2016-02-19 124 views
0

我目前使用的是RetroFit,并且是新的工具。当我运行我的应用程序时,我遇到了标题中所述的问题。它不会崩溃,但它不会返回我需要的信息。我附上我的代码。非常感谢您的帮助。

public class MainActivity extends AppCompatActivity { 
    @Bind(R.id.textView_userid) TextView textView_userid; 
    @Bind(R.id.textView_email) TextView textView_email; 
    @Bind(R.id.textView_password) TextView textView_password; 
    @Bind(R.id.textView_firstName) TextView textView_firstname; 
    @Bind(R.id.textView_lastname) TextView textView_lastname; 
    @Bind(R.id.refresh_button) Button refresh_button; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 

     StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder().permitAll().build()); 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     ButterKnife.bind(this); 

    } 

    @OnClick(R.id.refresh_button) 
    public void onClick_Refresh(){ 


     UserApi.Factory.getInstance().getUsers().enqueue(new Callback<User>() { 
      @Override 
      public void onResponse(Response<User> response, Retrofit retrofit) { 
       textView_userid.setText(response.body().getUserId()); 
       textView_email.setText(response.body().getEmail()); 
       textView_firstname.setText(response.body().getFirstName()); 
       textView_lastname.setText(response.body().getLastName()); 
       Log.e("Info", response.body().toString()); 
       Log.v("Get", response.body().toString()); 
      } 

      @Override 
      public void onFailure(Throwable t) { 
       Log.e("failed", t.getMessage()); 

      } 
     }); 
    } 
    @Override 
    protected void onResume(){ 
     super.onResume(); 
     onClick_Refresh(); 
    } 
} 


public interface UserApi { 
    String baseUrl = "http://someUrl/"; 

    @GET("users") 
    Call<User> getUsers(); 

    class Factory{ 
     private static UserApi service; 
     public static UserApi getInstance(){ 
      if(service == null){ 
       Retrofit retrofit = new Retrofit.Builder().addConverterFactory(GsonConverterFactory.create()).baseUrl(baseUrl).build(); 
       service = retrofit.create(UserApi.class); 
       return service; 
      }else{ 
       return service; 
      } 
     } 
    } 
} 

@Generated( “org.jsonschema2pojo”) 公共类用户{

@SerializedName("userId") 
@Expose 
private int userId; 
@SerializedName("email") 
@Expose 
private String email; 
@SerializedName("firstName") 
@Expose 
private String firstName; 
@SerializedName("lastName") 
@Expose 
private String lastName; 

/** 
* 
* @return 
*  The userId 
*/ 
public int getUserId() { 
    return userId; 
} 

/** 
* 
* @param userId 
*  The userId 
*/ 
public void setUserId(int userId) { 
    this.userId = userId; 
} 

/** 
* 
* @return 
*  The email 
*/ 
public String getEmail() { 
    return email; 
} 

/** 
* 
* @param email 
*  The email 
*/ 
public void setEmail(String email) { 
    this.email = email; 
} 

/** 
* 
* @return 
*  The firstName 
*/ 
public String getFirstName() { 
    return firstName; 
} 

/** 
* 
* @param firstName 
*  The firstName 
*/ 
public void setFirstName(String firstName) { 
    this.firstName = firstName; 
} 

/** 
* 
* @return 
*  The lastName 
*/ 
public String getLastName() { 
    return lastName; 
} 

/** 
* 
* @param lastName 
*  The lastName 
*/ 
public void setLastName(String lastName) { 
    this.lastName = lastName; 
} 

}

[{"userId":1,"email":"[email protected]","password":"abc123","firstName":"bob","lastName":"joe"}] 
+0

你的问题还不够清楚,你能告诉我们什么方法正好引发异常。无论如何,从标题中的错误文本我得出结论,该方法是期待JSON对象,而不是JSON数组。 – stjepano

+0

另外,您可以查看http://stackoverflow.com/a/23670188/2450855 –

回答

0

的JSON剪断您提供节目您收到的阵列,而不是的对象请尝试更改以下代码:

UserApi.Factory.getInstance().getUsers().enqueue(new Callback<User>() { 
      @Override 
      public void onResponse(Response<User> response, Retrofit retrofit) { 

      } 
      @Override 
      public void onFailure(Throwable t) { 
       Log.e("failed", t.getMessage()); 

      } 
     }); 

为了这样的事情:

UserApi.Factory.getInstance().getUsers().enqueue(new Callback<List<User>>() { 
      @Override 
      public void onResponse(Response<List<User>> response, Retrofit retrofit) { 
        List<User> users = response.body; 
        // Do something with the rest 
       } 
      @Override 
      public void onFailure(Throwable t) { 
        Log.e("failed", t.getMessage()); 

      } 
     }); 
0

首先,改变身体的onResponse

@Override 
     public void onResponse(Response<List<User>> response, Retrofit retrofit) { 
       List<User> users = response.body; 

      } 

其次,对于同时测定哪里想到的JSONObject或jsonArray,你可以使用这个网站,you can get equivalent POJO for any Json response.

0

谢谢你们的帮助。我对界面和主要活动进行了一些更改。下面的结果工作。

UserApi.Factory.getInstance().getUsers().enqueue(new Callback<List<User>>() { 
     @Override 
     public void onResponse(Response<List<User>> response, Retrofit retrofit) { 
      for(User user: response.body()){ 
      Log.v("Endpoint Response: ", user.toString()); 
       textView_userid.setText(String.valueOf(user.getUserId())); 
       textView_email.setText(user.getEmail()); 
       textView_firstname.setText(user.getFirstName()); 
       textView_lastname.setText(user.getLastName()); 
      } 

     } 

     @Override 
     public void onFailure(Throwable t) { 
      Log.e("failed", t.getMessage()); 

     } 
    }); 


@GET("users") 
Call<List<User>> getUsers(); 

class Factory{ 
    private static UserApi service; 
    public static UserApi getInstance(){ 
     if(service == null){ 
      Retrofit retrofit = new Retrofit.Builder().addConverterFactory(GsonConverterFactory.create()).baseUrl(baseUrl).build(); 
      service = retrofit.create(UserApi.class); 
      return service; 
     }else{ 
      return service; 
     } 
    } 
} 
相关问题