首页 > 解决方案 > 如何在 Android 的 TextView 和 EditText 中显示来自 API 服务器的 JSON 数据?

问题描述

我正在尝试获取 JSON 响应的值并将其显示在我的 textView 和 editText 中。但是我得到一个空对象引用作为错误。

JSON响应:

{
    "srNo": 1,
    "date": "11/14/2019 12:00:00 AM",
    "fieldEngineer": "Angel",
    "accountName": "Forever 21 Megamall",
    "irNo": 1,
    "joNo": 1,
    "address": "Mandaluyong City",
    "contactPerson": "Jansen Babon",
    "designation": "",
    "contactNo": "",
    "email": "",
    "timeIn": "00:00:00",
    "timeOut": "00:00:00",
    "productType": "Security",
    "problem": ""
}

Java类:

    private void fetchData() {
        JsonObject paramObject = new JsonObject();


        Call<ResObj> call = userService.userLogin(paramObject);
        call.enqueue(new Callback<ResObj>() {
            @Override
            public void onResponse(Call<ResObj> call, retrofit2.Response<ResObj> response) {



               ResObj resObj = response.body();

               String srNo = resObj.getSrNo();
               String date = resObj.getDate();
               String fieldEngineer = resObj.getFieldEngineer();
               String accountName = resObj.getAccountName();
               String irNo = resObj.getIrNo();
               String joNo = resObj.getJoNo();
               String address = resObj.getAddress();
               String contactPerson = resObj.getContactPerson();
               String designation = resObj.getDesignation();
               String contactNo = resObj.getContactNo();
               String email = resObj.getEmail();
               String timeIn = resObj.getTimeIn();
               String timeOut = resObj.getTimeOut();
               String productType = resObj.getProductType();
               String problem = resObj.getProblem();

               //the response I am getting here is null

               tvSrNo.setText(srNo);
               etdate.setText(date);
               etfieldengineer.setText(fieldEngineer);
               etaccname.setText(accountName);
               etirno.setText(irNo);
               etjono.setText(joNo);

                JsonObject workObj = new JsonObject();

                try {
                    workObj.addProperty("srNo", resObj.getSrNo());
                } catch (Exception e) {
                    e.printStackTrace();
                }

            }

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

            }
        });
    }

我尝试使用它 tvSrNo.setText(resObj.getSrNo())而不是,tvSrNo.setText(srNo)但它仍然遇到同样的问题。

我也在使用改造。

我期望 JSON 数据将被放置在 editText 或 textView 中的结果。但显然,响应变得无效。

ResObj 类:

    private String date;
    private String address;
    private String accountName;
    private String contactPerson;
    private String timeOut;
    private String problem;
    private String srNo;
    private String fieldEngineer;
    private String joNo;
    private String irNo;
    private String message;
    private String designation;
    private String email;
    private String timeIn;
    private String productType;
    private boolean status;
    private String contactNo;

    public String getMessage() {
        return message;
    }

    public void setMessage(String message) {
        this.message = message;
    }


    public String getDate() {
        return date;
    }

    public void setDate(String date) {
        this.date = date;
    }

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }

    public String getAccountName() {
        return accountName;
    }

    public void setAccountName(String accountName) {
        this.accountName = accountName;
    }

    public String getContactPerson() {
        return contactPerson;
    }

    public void setContactPerson(String contactPerson) {
        this.contactPerson = contactPerson;
    }

    public String getTimeOut() {
        return timeOut;
    }

    public void setTimeOut(String timeOut) {
        this.timeOut = timeOut;
    }

    public String getProblem() {
        return problem;
    }

    public void setProblem(String problem) {
        this.problem = problem;
    }

    public String getSrNo() {
        return srNo;
    }

    public void setSrNo(String srNo) {
        this.srNo = srNo;
    }

    public String getFieldEngineer() {
        return fieldEngineer;
    }

    public void setFieldEngineer(String fieldEngineer) {
        this.fieldEngineer = fieldEngineer;
    }

    public String getJoNo() {
        return joNo;
    }

    public void setJoNo(String joNo) {
        this.joNo = joNo;
    }

    public String getIrNo() {
        return irNo;
    }

    public void setIrNo(String irNo) {
        this.irNo = irNo;
    }

    public String getDesignation() {
        return designation;
    }

    public void setDesignation(String designation) {
        this.designation = designation;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public String getTimeIn() {
        return timeIn;
    }

    public void setTimeIn(String timeIn) {
        this.timeIn = timeIn;
    }

    public String getProductType() {
        return productType;
    }

    public void setProductType(String productType) {
        this.productType = productType;
    }

    public boolean isStatus() {
        return status;
    }

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

    public String getContactNo() {
        return contactNo;
    }

    public void setContactNo(String contactNo) {
        this.contactNo = contactNo;
    }

日志猫:

    java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String com.example.android.ras.ResObj.getSrNo()' on a null object reference
        at com.example.android.ras.MainActivity$3.onResponse(MainActivity.java:187)
        at retrofit2.ExecutorCallAdapterFactory$ExecutorCallbackCall$1$1.run(ExecutorCallAdapterFactory.java:71)
        at android.os.Handler.handleCallback(Handler.java:907)
        at android.os.Handler.dispatchMessage(Handler.java:105)
        at android.os.Looper.loop(Looper.java:216)
        at android.app.ActivityThread.main(ActivityThread.java:7625)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:524)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:987)

标签: javaandroidrestretrofit2

解决方案


像这样制作你的 POJO 类

import com.google.gson.annotations.Expose;
import com.google.gson.annotations.SerializedName;

public class Example {

@SerializedName("srNo")
@Expose
private Integer srNo;
@SerializedName("date")
@Expose
private String date;
@SerializedName("fieldEngineer")
@Expose
private String fieldEngineer;
@SerializedName("accountName")
@Expose
private String accountName;
@SerializedName("irNo")
@Expose
private Integer irNo;
@SerializedName("joNo")
@Expose
private Integer joNo;
@SerializedName("address")
@Expose
private String address;
@SerializedName("contactPerson")
@Expose
private String contactPerson;
@SerializedName("designation")
@Expose
private String designation;
@SerializedName("contactNo")
@Expose
private String contactNo;
@SerializedName("email")
@Expose
private String email;
@SerializedName("timeIn")
@Expose
private String timeIn;
@SerializedName("timeOut")
@Expose
private String timeOut;
@SerializedName("productType")
@Expose
private String productType;
@SerializedName("problem")
@Expose
private String problem;

public Integer getSrNo() {
return srNo;
}

public void setSrNo(Integer srNo) {
this.srNo = srNo;
}

public String getDate() {
return date;
}

public void setDate(String date) {
this.date = date;
}

public String getFieldEngineer() {
return fieldEngineer;
}

public void setFieldEngineer(String fieldEngineer) {
this.fieldEngineer = fieldEngineer;
}

public String getAccountName() {
return accountName;
}

public void setAccountName(String accountName) {
this.accountName = accountName;
}

public Integer getIrNo() {
return irNo;
}

public void setIrNo(Integer irNo) {
this.irNo = irNo;
}

public Integer getJoNo() {
return joNo;
}

public void setJoNo(Integer joNo) {
this.joNo = joNo;
}

public String getAddress() {
return address;
}

public void setAddress(String address) {
this.address = address;
}

public String getContactPerson() {
return contactPerson;
}

public void setContactPerson(String contactPerson) {
this.contactPerson = contactPerson;
}

public String getDesignation() {
return designation;
}

public void setDesignation(String designation) {
this.designation = designation;
}

public String getContactNo() {
return contactNo;
}

public void setContactNo(String contactNo) {
this.contactNo = contactNo;
}

public String getEmail() {
return email;
}

public void setEmail(String email) {
this.email = email;
}

public String getTimeIn() {
return timeIn;
}

public void setTimeIn(String timeIn) {
this.timeIn = timeIn;
}

public String getTimeOut() {
return timeOut;
}

public void setTimeOut(String timeOut) {
this.timeOut = timeOut;
}

public String getProductType() {
return productType;
}

public void setProductType(String productType) {
this.productType = productType;
}

public String getProblem() {
return problem;
}

public void setProblem(String problem) {
this.problem = problem;
}

}

确保在您的改造实例中有 Gson Converter

private static Retrofit getRetrofitInstance() {
        return new Retrofit.Builder()
                .baseUrl(ROOT_URL)
                .addConverterFactory(GsonConverterFactory.create())
                .build();
    }

然后拨打电话并将数据放入 ArrayList


推荐阅读