У меня такой вопрос, как разобрать json с неизвестным ключом? https://acx.io//api/v2/tickers.json - из этого json я хочу получить массив из двух полей base_unit и quote_unit.
import com.google.gson.annotations.Expose;
import com.google.gson.annotations.SerializedName;
import java.util.List;
import java.util.Map;
public class CurrencyACX {
private Map<String, PairsACX> listCurrencyACX;
public Map<String, PairsACX> getListCurrencyACX() {
return listCurrencyACX;
}
public class PairsACX{
@SerializedName("base_unit")
@Expose
private String baseCurrency;
@SerializedName("quote_unit")
@Expose
private String quoteCurrency;
public String getBaseCurrency() {
return baseCurrency;
}
public String getQuoteCurrency() {
return quoteCurrency;
}
}
}
public interface JsonPlaceHolderAPI {
//list from ACX
@GET("/api/v2/tickers.json")
Call<CurrencyACX> getCurrencyListACX();
}
private void addListCurrencyACX(){
Retrofit retrofit = new Retrofit.Builder()
.baseUrl("https://acx.io/")
.addConverterFactory(GsonConverterFactory.create())
.build();
JsonPlaceHolderAPI requestInterface = retrofit.create(JsonPlaceHolderAPI.class);
Call<CurrencyACX> call = requestInterface.getCurrencyListACX();
call.enqueue(new Callback<CurrencyACX>() {
@Override
public void onResponse(Call<CurrencyACX> call, Response<CurrencyACX> response) {
Log.d("myLOG","Succes");
// Log.d("myLOG","======" + response.body().getListCurrencyACX().isEmpty());
}
@Override
public void onFailure(Call<CurrencyACX> call, Throwable t) {
Log.d("myLOG","Failed");
}
});
onResponse выполняется успешно, но когда я пытаюсь обрабатывать response, response у меня пустой. Я использую библиотеку retrofit. Нашел в интернете пару нерабочих в моем случай примеров https://www.freshbytelabs.com/2018/11/parse-json-array-with-unkown-key-using.html и https://stackoverflow.com/questions/33758601/parse-dynamic-key-json-string-using-retrofit. Может быть я не смог разобраться. Не понимаю в чем проблема. Заранее Благодарю!
Вы и не должны инициализировать Map
- при правильно составленном POJO это должен сделать GsonConverter
. В вашем случае Map
должна быть корневым объектом response, класс CurrencyACX
лишний, а PairsACX
нужно вывести в отдельный java-файл.
public interface JsonPlaceHolderAPI {
//list from ACX
@GET("/api/v2/tickers.json")
Call<Map<String, PairsACX>> getCurrencyListACX();
}
private void addListCurrencyACX(){
Retrofit retrofit = new Retrofit.Builder()
.baseUrl("https://acx.io/")
.addConverterFactory(GsonConverterFactory.create())
.build();
JsonPlaceHolderAPI requestInterface = retrofit.create(JsonPlaceHolderAPI.class);
Call<Map<String, PairsACX>> call = requestInterface.getCurrencyListACX();
call.enqueue(new Callback<Map<String, PairsACX>>() {
@Override
public void onResponse(Call<Map<String, PairsACX>> call, Response<Map<String, PairsACX>> response) {
Log.d("myLOG","Succes");
Log.d("myLOG","======" + response.body().isEmpty());
}
@Override
public void onFailure(Call<Map<String, PairsACX>> call, Throwable t) {
Log.d("myLOG","Failed");
}
});
Виртуальный выделенный сервер (VDS) становится отличным выбором
Всем добрый день! В общем не знаю, сможет ли кто помочь, так как вопрос сложный и объёмный, но все же отпишусьПошел я на курсы по java, знания базовой...
Начал свое знакомство с Realm и столкнулся с проблемой что такие классы как Calendar и Drawable не поддерживаются Realm, оно и логичноCalendar я стал хранить...
Помогите разобраться с многоядерной обработкой Java-программы