如何在使用Retrofit v2库

时间:2016-01-22 13:50:17

标签: android retrofit

我正在使用Retrofit v2库进行网络调用。我在build.gradle文件中使用以下依赖项。

compile 'com.squareup.retrofit:retrofit:2.0.0-beta2'
compile 'com.squareup.retrofit:converter-gson:2.0.0-beta2'

1.User.java

    public class User {
    @SerializedName("email")
    String email;

    @SerializedName("password")
    String password;

    public User(String email, String password) {
        this.email = email;
        this.password = password;
    }
}

2.MyAPI.java

 public interface MyAPI {
    @GET("{roomID}")
    Call<List<Message>>loadMessages(@Path("roomID") String roomID);

    @POST("almabay_oauth/authorize")
    Call<User>login(@Body User user);
}

3.MainActivity.java

public class MainActivity extends AppCompatActivity {
String roomID = "548b737c0eadfb00eb93891bb28242e5";
MyAdapter adapter;
ListView lv;
List<Message> items;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    lv = (ListView) findViewById(R.id.lv);
    Retrofit retrofit = new Retrofit.Builder()
            .baseUrl("http://pms.vebific.com:81/chat/index/")
            .addConverterFactory(GsonConverterFactory.create())
            .build();

    MyAPI myAPI = retrofit.create(MyAPI.class);
    Call<List<Message>> call = myAPI.loadMessages(roomID);

    call.enqueue(new Callback<List<Message>>() {
        @Override
        public void onResponse(Response<List<Message>> response, Retrofit retrofit) {
            // Log.e("ResponseP", String.valueOf(response.body()));
            List<Message> items = response.body();
            Iterator iterator = items.iterator();
            while (iterator.hasNext()) {
                Message message = (Message) iterator.next();
                String user = message.getUser();
                //Log.e("User", user);
            }
            int statusCode = response.code();
            //Log.e("StatusCode", String.valueOf(statusCode));
            adapter = new MyAdapter(getApplicationContext(), items);
            lv.setAdapter(adapter);
        }

        @Override
        public void onFailure(Throwable t) {

        }
    });


    //--------------POST-------------

    Retrofit retrofit1 = new Retrofit.Builder()
            .baseUrl("http://phpstack-11819-25991-62288.cloudwaysapps.com/")
            .addConverterFactory(GsonConverterFactory.create())
            .build();
    MyAPI myPostApi = retrofit1.create(MyAPI.class);
    User user = new User("j@yahoo.com", "Admin123#");
    Call<User> call1 = myPostApi.login(user);
    call1.enqueue(new Callback<User>() {
        @Override
        public void onResponse(Response<User> response, Retrofit retrofit) {
            Log.e("Response code ", String.valueOf(response.code()));
            User user1 = response.body();
            Log.e("Response Message",response.message());
        }

        @Override
        public void onFailure(Throwable t) {

        }
    });
}

}

我已成功使用此库处理GET请求方法,但我无法理解在使用此库将数据发布到服务器后如何读取响应。我正在使用Retrofit库向服务器发送电子邮件ID和密码。我是在这里获取状态代码为200.这意味着一切正常。我知道在成功向服务器发送数据后,我得到一些响应字符串。但在这里我无法查看响应。请帮助。

2 个答案:

答案 0 :(得分:1)

正如您所说,您的响应代码为200,这表示您的请求和响应没有问题。

使用OkHttpLoggingIntercepter类。

HttpLoggingInterceptor logging = new HttpLoggingInterceptor();
        logging.setLevel(HttpLoggingInterceptor.Level.BODY);
        OkHttpClient httpClient = new OkHttpClient();
        httpClient.interceptors().add(logging);

        Retrofit retrofit = new Retrofit.Builder()
                .baseUrl(Constant.BASE_URL)
                .addConverterFactory(GsonConverterFactory.create())
                .client(httpClient)
                .build();

您将获得详细的回复日志以及所有错误(如果有)。

还有一件事 Gson Converter只解析在root上有json对象的json数据。不是JsonArray。

因此,通过编写上面的代码来检查日志中的响应字符串。

答案 1 :(得分:0)

尝试通过POST插件向Chrome发送此Postman请求,也许您的用户类错误