繁体   English   中英

无法通过翻新2获得JSON数据

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM