当前位置: 首页 > 知识库问答 >
问题:

改装错误应为BEGIN_ARRAY,但BEGIN_OBJECT更改为object对我有效

华宪
2023-03-14

日安,

我知道这个问题已经被问到了,我找到的另外两个话题在某一个点之前确实有所帮助。我有一个来自客户机的响应,但我无法控制,所以它的格式是我需要处理的。

Json包含来自多个用户的用户信息列表。这就是我使用列表而不是POJO的原因。问题如下。POJO返回时没有任何错误,但也没有任何值,并且只有一个值而不是多个值

来自postman的JASON响应如下所示(这就是我意识到它被检索的方式可能被视为对象而不是列表)。

{
  "items": [
   {
    "userpassword": "TEST123",
    "userstatus": "A",
    "useremail": "Someperson@domain.com",
    "firstname": "Some",
    "lastname": "Person"
},
{
    "userpassword": "Pass123@",
    "userstatus": "C",
    "useremail": "personannom@domain.org",
    "firstname": "Annom",
    "lastname": "Person`"
},
{
    "userpassword": "PietIE2#3",
    "userstatus": "A",
    "useremail": "Piet@pieinthesky.co.uk",
    "firstname": "Piet",
    "lastname": "Pompies"
},

],....
}

所以看来我需要再钻一层才能得到值。

再举几个例子

import retrofit2.Call;
import retrofit2.http.GET;


public interface JasonPlaceHolder {



    @GET("allusers")
    Call<UserInfo> getUserInfo();"
    //Call<List<UserInfo>> getUserInfo();  WAS
}
public class UserInfo {

    private String userpassword;

    private String userstatus;

    private String useremail;

    private String firstname;

    private String lastname;


    public String getUserpassword() {
    return userpassword;
    }

    public String getUserstatus() {
    return userstatus;
    }

    public String getUseremail() {
    return useremail;
    }

    public String getFirstname() {
    return firstname;
    }

    public String getLastname() {
    return lastname;
    }
}
Retrofit retrofit = new Retrofit.Builder().
  baseUrl("http://10..../com/").
  addConverterFactory(GsonConverterFactory.create()).
  build();

JasonPlaceHolder jasonPlaceHolderApi = retrofit.create(JasonPlaceHolder.class);

Call<UserInfo> call = jasonPlaceHolderApi.getUserInfo();
  call.enqueue(new Callback<UserInfo>() {
   @Override
    public void onResponse(Call<UserInfo> call, Response<UserInfo> response) {

     if(!response.isSuccessful()){
      textVierResults.setText("code: " + response.code());
     return;
  }
  UserInfo userInfos = response.body();

  //for(UserInfo ui:userInfos){
  String content = "";
  content += "Useremail: "    + userInfos.getUseremail()    + "\n";
  content += "Userpassword: " + userInfos.getUserpassword() + "\n";
  content += "Firstname: "    + userInfos.getFirstname()    + "\n";
  content += "Lastname: "     + userInfos.getLastname()     + "\n";
  content += "Userstatus: "   + userInfos.getUserstatus()   + "\n";

  textVierResults.append(content);

  // }


}



     @Override
      public void onFailure(Call<UserInfo> call, Throwable t) {
      Toast.makeText(MainActivity.this, "An error occurred", Toast.LENGTH_SHORT).show();
      textVierResults.setText(t.getMessage());
      }
      });

共有1个答案

孟俊发
2023-03-14

所以看来我需要再钻一层才能得到值。

你可能是对的,你现在可能需要这样的东西:

class SomeClass {

   ArrayList<UserInfo> info;
}

现在你要抓住你的反应。

 类似资料: