[英]Can't get JSON data with retrofit 2
我知道这不是第一次有人问这个问题,但是有了Retrofit2,我找不到合适的解决方案。 我遵循了在线教程,效果很好。 当我将相同的代码应用于自己的端点时,出现以下异常:java.lang.IllegalStateException:预期为BEGIN_ARRAY,但在行1的第2列路径中为BEGIN_OBJECT $我不知道该如何解决。 我有这样的JSON数据
[{{“ id_toko”:“ 3”,“ nama_toko”:“ Toko Ajib”,“ pesan_toko”:“ Diskon Gan!” }]
像这样
[{“ id_device”:“ 1”,“ nama_device”:“ Samsung Galaxy A5”,“ jenis_device”:“ Android”}]
我想将它们解析为我的应用,这是我的服务API
public interface ServiceApi {
@GET("show2.php")
Call<List<DataRepo>> toko(
);
@GET("show1.php")
Call<DataSearch> searching(
);
}
这是我的模型:
public class DataRepo {
@SerializedName("id_toko")
int id_toko;
@SerializedName("nama_toko")
String nama_toko;
@SerializedName("pesan_toko")
String pesan_toko;
public int getId_toko() {
return id_toko;
}
public String getNama_toko() {
return nama_toko;
}
public String getPesan_toko() {
return pesan_toko;
}
}
public class DataSearch {
@SerializedName("items")
List<Item> items;
public List<Item> getItems() {
return items;
}
}
public class Item {
@SerializedName("id_device")
int id_device;
@SerializedName("nama_device")
String nama_device;
@SerializedName("jenis_device")
String jenis_device;
public int getId_device() {
return id_device;
}
public String getNama_device() {
return nama_device;
}
public String getJenis_device() {
return jenis_device;
}
}
我的主要方法
public class Main {
public static void main(String[] args) {
ServiceApi client = ClientApi.createService(ServiceApi.class);
Call<List<DataRepo>> call = client.toko();
Call<DataSearch> call1 = client.searching();
List<DataRepo> toko = null;
DataSearch searches = null;
List<Item> items = null;
try {
toko = call.execute().body();
searches = call1.execute().body();
for (DataRepo tokos : toko) {
System.out.println(tokos.getNama_toko() + " (" + tokos.getPesan_toko() + ")");
}
System.out.println();
items = searches.getItems();
for (Item item : items){
System.out.println(item.getNama_device() + ", Jenis: " + item.getJenis_device());
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
但是我无法获取JSON数据,我在错误日志中所拥有的只是
com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was BEGIN_ARRAY at line 1 column 2
将此模型类用于您的第一个json
public class JsonItems{
@SerializedName("id_toko")
@Expose
private String idToko;
@SerializedName("nama_toko")
@Expose
private String namaToko;
@SerializedName("pesan_toko")
@Expose
private String pesanToko;
public String getIdToko() {
return idToko;
}
public void setIdToko(String idToko) {
this.idToko = idToko;
}
public String getNamaToko() {
return namaToko;
}
public void setNamaToko(String namaToko) {
this.namaToko = namaToko;
}
public String getPesanToko() {
return pesanToko;
}
public void setPesanToko(String pesanToko) {
this.pesanToko = pesanToko;
}
}
以及使用改造2进行网络通话的以下方法
private void loadJSON() {
Retrofit retrofit = new Retrofit.Builder()
.baseUrl("your BASE_URL")
.addConverterFactory(GsonConverterFactory.create())
.build();
BankInterface request = retrofit.create(RequestInterface.class);
Call<List<JsonItems>> call = request.getToken();
call.enqueue(new Callback<List<JsonItems>>() {
@Override
public void onResponse(Call<List<JsonItems>> call, Response<List<JsonItems>> response) {
List<JsonItems> jsonItems= response.body();
String token = jsonItems.get(0).getIdToko();
}
@Override
public void onFailure(Call<List<JsonItems>> call, Throwable t) {
showToast("No Internet Connection");
}
});
}
和以下用于指定端点
public interface BankInterface {
@GET("your endpoint")
Call<List<JsonItems>> getToken();
}
希望这可以帮助!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.