Android 改造错误应为BEGIN_数组,但BEGIN_对象更改为对象对我有效

Android 改造错误应为BEGIN_数组,但BEGIN_对象更改为对象对我有效,android,retrofit2,Android,Retrofit2,你好 我知道有人问过这个问题,而我发现的另外两个话题在某种程度上确实有所帮助。 我从客户那里得到了一个我无法控制的回复,所以它的格式是我需要处理的 Json包含来自多个用户的用户信息列表。 这就是我使用列表而不是POJO的原因。 问题如下。POJO不会返回任何错误,但也不会返回任何值,并且只返回一个值而不是多个值 因此,我收集的是JSON的格式,它不被视为列表,而是对象 使用POSTMAN作为基准工具来验证GET调用是否有效以及列表中返回的值 我仍然是这方面的新手,所以任何帮助都将不胜感激 来自

你好

我知道有人问过这个问题,而我发现的另外两个话题在某种程度上确实有所帮助。 我从客户那里得到了一个我无法控制的回复,所以它的格式是我需要处理的

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

因此,我收集的是JSON的格式,它不被视为列表,而是对象

使用POSTMAN作为基准工具来验证GET调用是否有效以及列表中返回的值

我仍然是这方面的新手,所以任何帮助都将不胜感激

来自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
}
然后我在mainactivity课上打电话 (因为它不再是一个列表了,我再也不能循环浏览记录了

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());
      }
      });
reformation-reformation=new-reformation.Builder()。
基本URL(“http://10..../com/").
addConverterFactory(GsonConverterFactory.create())。
build();
JasonPlaceHolder JasonPlaceHolder API=reformation.create(JasonPlaceHolder.class);
Call Call=jasonPlaceHolderApi.getUserInfo();
call.enqueue(新回调(){
@凌驾
公共void onResponse(调用、响应){
如果(!response.issusccessful()){
textVierResults.setText(“代码:+response.code());
返回;
}
UserInfo userInfos=response.body();
//用于(用户信息用户界面:用户信息){
字符串内容=”;
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(内容);
// }
}
@凌驾
失败时公共无效(调用调用,可丢弃的t){
Toast.makeText(MainActivity.this,“发生错误”,Toast.LENGTH_SHORT.show();
textVierResults.setText(t.getMessage());
}
});
有人能提出解决办法吗

因此,我似乎需要再钻一个层次来获得这些值

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

class SomeClass {

   ArrayList<UserInfo> info;
}
class-SomeClass{
ArrayList信息;
}
现在你明白你的反应了

因此,我似乎需要再钻一个层次来获得这些值

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

class SomeClass {

   ArrayList<UserInfo> info;
}
class-SomeClass{
ArrayList信息;
}
现在你明白你的反应了

创建新的模型类项传递并将其替换为传递的UserInfo JasonPlaceHolder和改装类

公共类项目{
清单项目;
公共列表getitems(){
退货项目;
}
}
call.enqueue(新回调(){
@凌驾
公共void onResponse(调用、响应){
如果(!response.issusccessful()){
textVierResults.setText(“代码:+response.getitems());
返回;
}
创建新的模型类项传递并将其替换为传递的UserInfo JasonPlaceHolder和改装类

公共类项目{
清单项目;
公共列表getitems(){
退货项目;
}
}
call.enqueue(新回调(){
@凌驾
公共void onResponse(调用、响应){
如果(!response.issusccessful()){
textVierResults.setText(“代码:+response.getitems());
返回;
}

如果要手动解析json数据,以到达json树中的列表节点

添加一个JSONResponse类,该类将表示返回的原始JSON,您可以使用getItems方法获取userInfos数组,该方法将返回JSON对象中“items”键的值(在本例中,将返回一个UserInfo对象数组)

}

使Get方法返回一个JSONResponse对象,如下所示

@GET("allusers")
Call<JSONResponse> getUserInfo();"
JSONResponse jsonResponse = response.body();
userInfos= new ArrayList<>(Arrays.asList(jsonResponse.getItems()));
 String content = "";

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


}
textVierResults.append(content);
@GET(“诱惑者”)
调用getUserInfo();”
最后,在onResponse中,从JSONResponse对象获取UserInfo列表,如下所示

@GET("allusers")
Call<JSONResponse> getUserInfo();"
JSONResponse jsonResponse = response.body();
userInfos= new ArrayList<>(Arrays.asList(jsonResponse.getItems()));
 String content = "";

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


}
textVierResults.append(content);
JSONResponse JSONResponse=response.body();
userInfos=newarraylist(Arrays.asList(jsonResponse.getItems());
字符串内容=”;
用于(用户信息用户界面:用户信息){
content++=“Useremail:”+ui.getUseremail()+“\n”;
content+=“Userpassword:”+ui.getUserpassword()+“\n”;
content+=“Firstname:”+ui.getFirstname()+“\n”;
content+=“Lastname:”+ui.getLastname()+“\n”;
content++=“Userstatus:”+ui.getUserstatus()+“\n”;
}
textVierResults.append(内容);

如果要手动解析json数据,以到达json树中的列表节点

添加一个JSONResponse类,该类将表示返回的原始JSON,您可以使用getItems方法获取userInfos数组,该方法将返回JSON对象中“items”键的值(在本例中,将返回一个UserInfo对象数组)

}

使Get方法返回一个JSONResponse对象,如下所示

@GET("allusers")
Call<JSONResponse> getUserInfo();"
JSONResponse jsonResponse = response.body();
userInfos= new ArrayList<>(Arrays.asList(jsonResponse.getItems()));
 String content = "";

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


}
textVierResults.append(content);
@GET(“诱惑者”)
调用getUserInfo();”
最后,在onResponse中,从JSONResponse对象获取UserInfo列表,如下所示

@GET("allusers")
Call<JSONResponse> getUserInfo();"
JSONResponse jsonResponse = response.body();
userInfos= new ArrayList<>(Arrays.asList(jsonResponse.getItems()));
 String content = "";

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


}
textVierResults.append(content);
JSONResponse JSONResponse=response.body();
userInfos=newarraylist(Arrays.asList(jsonResponse.getItems());
字符串内容=”;
用于(用户信息用户界面:用户信息){
content++=“Useremail:”+ui.getUseremail()+“\n”;
content+=“Userpassword:”+ui.getUserpassword()+“\n”;
content+=“Firstname:”+ui.getFirstname()+“\n”;
content+=“Lastname:”+ui.getLastname()+“\n”;
content+=“Userstatus:”+ui.getUser