我正在尝试制作一个在 TextView 中显示来自 Json 的文本的应用程序。目前我得到以下信息:
import retrofit2.Call;
import retrofit2.http.GET;
import retrofit2.http.Query;
public interface ApiService {
/*
Retrofit get annotation with our URL
And our method that will return us the List of ContactList
*/
@GET("/daily_json.js")
Call<CurrencyOperations> getData(@Query("ID") String resourceName);
//getMyJSON();
}
货币操作类:
import com.google.gson.annotations.Expose;
import com.google.gson.annotations.SerializedName;
public class CurrencyOperations {
@SerializedName("Date")
@Expose
private String date;
@SerializedName("PreviousDate")
@Expose
private String previousDate;
@SerializedName("PreviousURL")
@Expose
private String previousURL;
@SerializedName("Timestamp")
@Expose
private String timestamp;
@SerializedName("Valute")
@Expose
private Valute valute;
public String getDate() {
return date;
}
public void setDate(String date) {
this.date = date;
}
public String getPreviousDate() {
return previousDate;
}
public void setPreviousDate(String previousDate) {
this.previousDate = previousDate;
}
public String getPreviousURL() {
return previousURL;
}
public void setPreviousURL(String previousURL) {
this.previousURL = previousURL;
}
public String getTimestamp() {
return timestamp;
}
public void setTimestamp(String timestamp) {
this.timestamp = timestamp;
}
public Valute getValute() {
return valute;
}
public void setValute(Valute valute) {
this.valute = valute;
}
}
美元类:
import com.google.gson.annotations.Expose;
import com.google.gson.annotations.SerializedName;
public class USD {
@SerializedName("ID") // это связывает то, что находится в json и мой код (я так думаю)
@Expose
private String iD;
@SerializedName("NumCode")
@Expose
private String numCode;
@SerializedName("CharCode")
@Expose
private String charCode;
@SerializedName("Nominal")
@Expose
private int nominal;
@SerializedName("Name")
@Expose
private String name;
@SerializedName("Value")
@Expose
private double value;
@SerializedName("Previous")
@Expose
private double previous;
public String getID() {
return iD;
}
public void setID(String iD) {
this.iD = iD;
}
public String getNumCode() {
return numCode;
}
public void setNumCode(String numCode) {
this.numCode = numCode;
}
public String getCharCode() {
return charCode;
}
public void setCharCode(String charCode) {
this.charCode = charCode;
}
public int getNominal() {
return nominal;
}
public void setNominal(int nominal) {
this.nominal = nominal;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public double getValue() {
return value;
}
public void setValue(double value) {
this.value = value;
}
public double getPrevious() {
return previous;
}
public void setPrevious(double previous) {
this.previous = previous;
}
}
价值等级:
import com.google.gson.annotations.Expose;
import com.google.gson.annotations.SerializedName;
public class Valute {
@SerializedName("USD")
@Expose
private USD uSD;
public USD getUSD() {
return uSD;
}
public void setUSD(USD uSD) {
this.uSD = uSD;
}
}
RetroClient 类:
import retrofit2.Retrofit;
import retrofit2.converter.gson.GsonConverterFactory;
public class RetroClient {
/********
* URLS
*******/
private static final String ROOT_URL = "https://www.cbr-xml-daily.ru/";
/**
* Get Retrofit Instance
*/
private static Retrofit getRetrofitInstance() {
return new Retrofit.Builder()
.baseUrl(ROOT_URL)
.addConverterFactory(GsonConverterFactory.create())
.build();
// !!!
}
/**
* Get API Service
*
* @return API Service
*/
public static ApiService getApiService() {
return getRetrofitInstance().create(ApiService.class);
}
}
MainActivity 类:
import retrofit2.Call;
import retrofit2.Callback;
import retrofit2.Response;
public class MainActivity extends AppCompatActivity {
private TextView mTextView;
private CurrencyOperations operations;
private ArrayList<CurrencyOperations> mList;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//Creating an object of our api interface
ApiService api = RetroClient.getApiService();
/**
* Calling JSON
*/
Call<CurrencyOperations> call = api.getData("bash");
mTextView = (TextView) findViewById(R.id.text);
// final CurrencyOperations operations = new CurrencyOperations();
// this.operations = new CurrencyOperations();
final USD usd = new USD();
/* HashMap<String, Object> hm;
hm = new HashMap<String, Object>();
//читаем что в себе хранит параметр balance
hm.put(NAME, urls.getJSONObject(i).getString("name").toString());*/
call.enqueue(new Callback<CurrencyOperations>() {
@Override
public void onResponse(Call<CurrencyOperations> call, Response<CurrencyOperations> response) {
mTextView.setText(usd.getID()); // ???
}
@Override
public void onFailure(Call<CurrencyOperations> call, Throwable t) {
}
});
}
}
JSON:
{
"Date": "2020-04-08T11:30:00+03:00",
"PreviousDate": "2020-04-07T11:30:00+03:00",
"PreviousURL": "\/\/www.cbr-xml-daily.ru\/archive\/2020\/04\/07\/daily_json.js",
"Timestamp": "2020-04-07T23:00:00+03:00",
"Valute": {
"AUD": {
"ID": "R01010",
"NumCode": "036",
"CharCode": "AUD",
"Nominal": 1,
"Name": "Австралийский доллар",
"Value": 46.6312,
"Previous": 46.2341
},
"AZN": {
"ID": "R01020A",
"NumCode": "944",
"CharCode": "AZN",
"Nominal": 1,
"Name": "Азербайджанский манат",
"Value": 44.4769,
"Previous": 45.0383
},
"GBP": {
"ID": "R01035",
"NumCode": "826",
"CharCode": "GBP",
"Nominal": 1,
"Name": "Фунт стерлингов Соединенного королевства",
"Value": 93.0662,
"Previous": 93.9429
},
"AMD": {
"ID": "R01060",
"NumCode": "051",
"CharCode": "AMD",
"Nominal": 100,
"Name": "Армянских драмов",
"Value": 15.0534,
"Previous": 15.2434
},
"BYN": {
"ID": "R01090B",
"NumCode": "933",
"CharCode": "BYN",
"Nominal": 1,
"Name": "Белорусский рубль",
"Value": 29.5612,
"Previous": 29.7155
},
"BGN": {
"ID": "R01100",
"NumCode": "975",
"CharCode": "BGN",
"Nominal": 1,
"Name": "Болгарский лев",
"Value": 41.9311,
"Previous": 42.2257
},
"BRL": {
"ID": "R01115",
"NumCode": "986",
"CharCode": "BRL",
"Nominal": 1,
"Name": "Бразильский реал",
"Value": 14.274,
"Previous": 14.2818
},
"HUF": {
"ID": "R01135",
"NumCode": "348",
"CharCode": "HUF",
"Nominal": 100,
"Name": "Венгерских форинтов",
"Value": 22.7589,
"Previous": 22.7079
},
"HKD": {
"ID": "R01200",
"NumCode": "344",
"CharCode": "HKD",
"Nominal": 10,
"Name": "Гонконгских долларов",
"Value": 97.3224,
"Previous": 98.5482
},
"DKK": {
"ID": "R01215",
"NumCode": "208",
"CharCode": "DKK",
"Nominal": 1,
"Name": "Датская крона",
"Value": 10.9849,
"Previous": 11.0588
},
"USD": {
"ID": "R01235",
"NumCode": "840",
"CharCode": "USD",
"Nominal": 1,
"Name": "Доллар США",
"Value": 75.455,
"Previous": 76.4074
},
"EUR": {
"ID": "R01239",
"NumCode": "978",
"CharCode": "EUR",
"Nominal": 1,
"Name": "Евро",
"Value": 82.012,
"Previous": 82.6346
},
"INR": {
"ID": "R01270",
"NumCode": "356",
"CharCode": "INR",
"Nominal": 100,
"Name": "Индийских рупий",
"Value": 99.7673,
"Previous": 10.0268
},
"KZT": {
"ID": "R01335",
"NumCode": "398",
"CharCode": "KZT",
"Nominal": 100,
"Name": "Казахстанских тенге",
"Value": 17.2656,
"Previous": 17.3999
},
"CAD": {
"ID": "R01350",
"NumCode": "124",
"CharCode": "CAD",
"Nominal": 1,
"Name": "Канадский доллар",
"Value": 53.8004,
"Previous": 54.1244
},
"KGS": {
"ID": "R01370",
"NumCode": "417",
"CharCode": "KGS",
"Nominal": 100,
"Name": "Киргизских сомов",
"Value": 88.877,
"Previous": 89.9985
},
"CNY": {
"ID": "R01375",
"NumCode": "156",
"CharCode": "CNY",
"Nominal": 1,
"Name": "Китайский юань",
"Value": 10.696,
"Previous": 10.7725
},
"MDL": {
"ID": "R01500",
"NumCode": "498",
"CharCode": "MDL",
"Nominal": 10,
"Name": "Молдавских леев",
"Value": 40.6218,
"Previous": 40.9691
},
"NOK": {
"ID": "R01535",
"NumCode": "578",
"CharCode": "NOK",
"Nominal": 10,
"Name": "Норвежских крон",
"Value": 73.5924,
"Previous": 72.5616
},
"PLN": {
"ID": "R01565",
"NumCode": "985",
"CharCode": "PLN",
"Nominal": 1,
"Name": "Польский злотый",
"Value": 18.0757,
"Previous": 18.1099
},
"RON": {
"ID": "R01585F",
"NumCode": "946",
"CharCode": "RON",
"Nominal": 1,
"Name": "Румынский лей",
"Value": 16.9787,
"Previous": 17.0972
},
"XDR": {
"ID": "R01589",
"NumCode": "960",
"CharCode": "XDR",
"Nominal": 1,
"Name": "СДР (специальные права заимствования)",
"Value": 102.4845,
"Previous": 103.7895
},
"SGD": {
"ID": "R01625",
"NumCode": "702",
"CharCode": "SGD",
"Nominal": 1,
"Name": "Сингапурский доллар",
"Value": 52.9212,
"Previous": 53.2604
},
"TJS": {
"ID": "R01670",
"NumCode": "972",
"CharCode": "TJS",
"Nominal": 10,
"Name": "Таджикских сомони",
"Value": 73.903,
"Previous": 74.8358
},
"TRY": {
"ID": "R01700J",
"NumCode": "949",
"CharCode": "TRY",
"Nominal": 1,
"Name": "Турецкая лира",
"Value": 11.2234,
"Previous": 11.2795
},
"TMT": {
"ID": "R01710A",
"NumCode": "934",
"CharCode": "TMT",
"Nominal": 1,
"Name": "Новый туркменский манат",
"Value": 21.5894,
"Previous": 21.8619
},
"UZS": {
"ID": "R01717",
"NumCode": "860",
"CharCode": "UZS",
"Nominal": 10000,
"Name": "Узбекских сумов",
"Value": 78.0865,
"Previous": 79.4999
},
"UAH": {
"ID": "R01720",
"NumCode": "980",
"CharCode": "UAH",
"Nominal": 10,
"Name": "Украинских гривен",
"Value": 27.8478,
"Previous": 28.0394
},
"CZK": {
"ID": "R01760",
"NumCode": "203",
"CharCode": "CZK",
"Nominal": 10,
"Name": "Чешских крон",
"Value": 30.039,
"Previous": 29.8461
},
"SEK": {
"ID": "R01770",
"NumCode": "752",
"CharCode": "SEK",
"Nominal": 10,
"Name": "Шведских крон",
"Value": 75.4437,
"Previous": 75.2515
},
"CHF": {
"ID": "R01775",
"NumCode": "756",
"CharCode": "CHF",
"Nominal": 1,
"Name": "Швейцарский франк",
"Value": 77.5408,
"Previous": 78.1901
},
"ZAR": {
"ID": "R01810",
"NumCode": "710",
"CharCode": "ZAR",
"Nominal": 10,
"Name": "Южноафриканских рэндов",
"Value": 41.194,
"Previous": 40.0399
},
"KRW": {
"ID": "R01815",
"NumCode": "410",
"CharCode": "KRW",
"Nominal": 1000,
"Name": "Вон Республики Корея",
"Value": 62.1042,
"Previous": 62.1658
},
"JPY": {
"ID": "R01820",
"NumCode": "392",
"CharCode": "JPY",
"Nominal": 100,
"Name": "Японских иен",
"Value": 69.3106,
"Previous": 70.0247
}
}
}
json 链接:https ://www.cbr-xml-daily.ru/daily_json.js
这个项目在 GitHub 上:https ://github.com/Nikolui333/JSONTestL
由于某种原因,我无法在 textView 中显示美元 ID 数据。PS我知道,很可能,我犯的错误很明显,但我以前从未这样做过,所以我不知道如何使代码工作。
直到您联系的那一刻,一切都为您完美运行
textView您的代码如下所示:
Как видно, Вы используете для задания текста
textViewне результат выполнения запроса, а собственноручно созданный пустой объектfinal USD usd = new USD();.Всё, что нужно для исправления проблемы - правильно инициализировать
usd:Добавлю, что в целом Вы немного неправильно работаете с POJO классами для данного json, но это не критично. Просто не все данные получаете оттуда. И я бы рекомендовал перейти на Kotlin. Создавать там data классы вместо POJO - одно удовольствие)