【问题标题】:Null list returned from Retrofit POJO从 Retrofit POJO 返回的空列表
【发布时间】:2018-01-02 02:36:44
【问题描述】:

我尝试使用 Retrofit 从服务器向 Spinner 添加动态数据。数据出来了。但我得到了错误。 Logcat 说:

致命异常:主要 进程:com.example.syaifulhusein.paketku,PID:31246 java.lang.NullPointerException:尝试在空对象引用上调用接口方法“int java.util.List.size()”

这是我的函数initSpinnerKotaAsal代码

private void initSpinnerKotaAsal() {
    loading = ProgressDialog.show(mContext, null, "harap tunggu...", true, false);

    mApiService.getProvince(API_KEY).enqueue(new Callback<Rajaongkir>() {
        @Override
        public void onResponse(Call<Rajaongkir> call, Response<Rajaongkir> response) {
            if (response.isSuccessful()) {
                loading.dismiss();
                List<ResultsItem> resultsItems = response.body().getResults();
                List<String> listSpinner = new ArrayList<String>();
                for (int i = 0; i < resultsItems.size(); i++) {
                    listSpinner.add(resultsItems.get(i).getProvince());
                }

                ArrayAdapter<String> adapter = new ArrayAdapter<String>(mContext,
                        android.R.layout.simple_spinner_item, listSpinner);
                adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
                spinnerKotaAsal.setAdapter(adapter);
            }
            else {
                loading.dismiss();
                Toast.makeText(mContext, "Gagal", Toast.LENGTH_SHORT).show();
            }
        }

        @Override
        public void onFailure(Call<Rajaongkir> call, Throwable t) {

        }
    });
}

这是我的响应对象

package com.example.syaifulhusein.paketku.model;

import java.util.List;

import com.google.gson.annotations.SerializedName;

public class Rajaongkir{

@SerializedName("query")
private List<Object> query;

@SerializedName("results")
private List<ResultsItem> results;

@SerializedName("status")
private Status status;

public void setQuery(List<Object> query){
    this.query = query;
}

public List<Object> getQuery(){
    return query;
}

public void setResults(List<ResultsItem> results){
    this.results = results;
}

public List<ResultsItem> getResults(){
    return results;
}

public void setStatus(Status status){
    this.status = status;
}

public Status getStatus(){
    return status;
}

@Override
public String toString(){
    return 
        "Rajaongkir{" + 
        "query = '" + query + '\'' + 
        ",results = '" + results + '\'' + 
        ",status = '" + status + '\'' + 
        "}";
    }
}

这是我的 ResultsItem.java

package com.example.syaifulhusein.paketku.model;


import com.google.gson.annotations.SerializedName;


public class ResultsItem{

@SerializedName("province")
private String province;

@SerializedName("province_id")
private String provinceId;

public void setProvince(String province){
    this.province = province;
}

public String getProvince(){
    return province;
}

public void setProvinceId(String provinceId){
    this.provinceId = provinceId;
}

public String getProvinceId(){
    return provinceId;
}

@Override
public String toString(){
    return 
        "ResultsItem{" + 
        "province = '" + province + '\'' + 
        ",province_id = '" + provinceId + '\'' + 
        "}";
    }
}

【问题讨论】:

  • 可能在处理对象的响应时出现问题。你也可以提供对象吗?
  • @TentenPonce 以上
  • 你应该检查 null 并优雅地处理它而不是崩溃......
  • 尝试记录response.body(),并添加ResultsItem 对象。所以我们可以检查它是否为空,意味着你没有正确序列化它。

标签: android nullpointerexception gson retrofit2


【解决方案1】:

使用GsonFormate插件在android Studio中创建合适的Pojo模型。

【讨论】:

  • 请删除查询字段并尝试
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-04-27
  • 1970-01-01
  • 1970-01-01
  • 2020-05-09
  • 1970-01-01
  • 1970-01-01
  • 2019-08-18
相关资源
最近更新 更多