我尝试使用 Retrofit 将我的 JSON 解析为我的 Java

Posted

技术标签:

【中文标题】我尝试使用 Retrofit 将我的 JSON 解析为我的 Java【英文标题】:I try to parse my JSON into my Java with Retrofit 【发布时间】:2020-07-28 01:37:50 【问题描述】:

我尝试了某人的教程来使用改造在 Java 中解析 JSON。

我用我的 http://umkmkabupatenmalang.xyz/api/config/ 更改了教程中的 url。但是当我尝试在 android 上运行它时,我会收到这样的错误

这是我的 MainActivity.java

import ... 

public class MainActivity extends AppCompatActivity 
    private RecyclerView recyclerView;
    private ArrayList<AndroidVersion> data;
    private DataAdapter adapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) 
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        view();
    

    private void view()
        recyclerView = (RecyclerView)findViewById(R.id.card_recycler_view);
        recyclerView.setHasFixedSize(true);
        RecyclerView.LayoutManager layoutManager = new LinearLayoutManager(getApplicationContext());
        recyclerView.setLayoutManager(layoutManager);
        loadJSON();
    

    private void loadJSON()
        Retrofit retrofit = new Retrofit.Builder()
                .baseUrl("http://umkmkabupatenmalang.xyz/")
                .addConverterFactory(GsonConverterFactory.create())
                .build();

        RequestInterface request = retrofit.create(RequestInterface.class);
        Call<JSONResponse> call = request.getJSON();
        call.enqueue(new Callback<JSONResponse>() 
            @Override
            public void onResponse(Call<JSONResponse> call, Response<JSONResponse> response) 
                JSONResponse jsonResponse = response.body();
                data = new ArrayList<>(Arrays.asList(jsonResponse.getAndroid()));
                adapter = new DataAdapter(data);
                recyclerView.setAdapter(adapter);
            

            @Override
            public void onFailure(Call<JSONResponse> call, Throwable t) 
                Log.d("Error", t.getMessage());
            
        );
    

这是我要解析的json

谁能给我解释一下错误是什么意思,并给出解决方案?

这是我的 JSONResponse

import com.example.skripsi.model.AndroidVersion;

public class JSONResponse 
    private AndroidVersion[] android;

    public AndroidVersion[] getAndroid() 
        return android;
    

【问题讨论】:

MainActivity.java 第 57 行有什么内容?这就是运行时报告的问题... 什么是 JSONResponse 类? 你可以在上面看到,我已经添加了我的 JSONResponse 这是在第 57 行 -> data = new ArrayList(Arrays.asList(jsonResponse.getAndroid())); 【参考方案1】:

在您的 JSONResponse 类中,您还应该提供一个 setter。

import com.google.gson.annotations.SerializedName;
import com.example.skripsi.model.AndroidVersion;

public class JSONResponse 
    @SerializedName("data")
    private AndroidVersion[] android;

    public AndroidVersion[] getAndroid() 
        return android;
    

    public setAndroid(AndroidVersion[] androids)
        this.android = androids;
    

让我知道这是否适合你。

【讨论】:

【参考方案2】:

以后您可以使用此网站将您的 JSON 转换为 java 类 Convert JSON into java classes

【讨论】:

以上是关于我尝试使用 Retrofit 将我的 JSON 解析为我的 Java的主要内容,如果未能解决你的问题,请参考以下文章

无法通过 @POST 请求使用 Retrofit 解析 JSON 响应和参数

使用 Retrofit 和 Kotlin 使用多态 Json

Retrofit2.0得到MalformedJsonException,而json似乎正确吗?

如何使用Retrofit 2和Gson来模拟JSON响应“密钥”频繁更改的数据

无法在Android Retrofit中为我的班级创建转换器

使用 Retrofit 获取 JSON