【问题标题】:Getting Null Response using Retrofit Library in android在 android 中使用 Retrofit 库获取空响应
【发布时间】:2016-01-22 06:58:54
【问题描述】:

我在我的应用程序中使用 Retrofit Library 来处理网络请求。我的代码如下:

1. MyAPI.java(接口)

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

2。 Message.java

    public class Message {

    String user;
    String message;
    //String roomID;

    public String getUser() {
        return user;
    }

    public void setUser(String user) {
        this.user = user;
    }

    public String getMessage() {
        return message;
    }

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

    @Override
    public String toString() {
        return(message);
    }
}

3.Messages.java

    public class Messages {
    List<Message> items;
}

4.MainActivity.java

public class MainActivity extends AppCompatActivity {
String roomID = "548b737c0eadfb00eb93891bb28242e5";

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

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

    call.enqueue(new Callback<Messages>() {
        @Override
        public void onResponse(Response<Messages> response, Retrofit retrofit) {
            Log.e("Response", String.valueOf(response.body()));
        }

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

}

}

要使用的网址是:

http://pms.vebific.com:81/chat/index/548b737c0eadfb00eb93891bb28242e5

预期响应:

 [
  {
"_id": {
"$id": "56963d96da036c6c05815e63"
},
"room_id": "548b737c0eadfb00eb93891bb28242e5",
"user": "Jeevan Verma",
"id": 479,
"message": "\\uD83D\\uDC30",
"date": 1481587559734,
"status": "sent"
},
{
"_id": {
"$id": "56963d8cda036c6c05815e62"
},
"room_id": "548b737c0eadfb00eb93891bb28242e5",
"user": "Jeevan Verma",
"id": 479,
"message": "\\uD83D\\uDE0A",
"date": 1481587559734,
"status": "sent"
},
{
"_id": {
"$id": "56964454da036c6c05815e64"
},
"room_id": "548b737c0eadfb00eb93891bb28242e5",
"user": "Jeevan Verma",
"id": 479,
"message": "\\uD83D\\uDC2D",
"date": 1481589296434,
"status": "sent"
}
]

当我在浏览器中使用它时,我得到了响应。

在使用 Retrofit 时,我得到空响应。我想我可能遗漏了一些东西。请帮我修复它。请告诉我如何使用 Retrofit 读取响应。

【问题讨论】:

  • 你的意思是response 为空吗?
  • @bigdestroyer , 24599-24599/com.example.deepakr.retrofitdemo E/Response: null
  • 尝试从您的基本 URL 中删除最后一个斜杠 (/)。也许这对你有帮助stackoverflow.com/questions/33757619/…
  • 现在 onFailure() 方法被执行了。 01-22 12:39:32.916 26405-26405/com.example.deepakr.retrofitdemo E/错误:---------------
  • 尝试记录Throwable并发布堆栈跟踪

标签: android retrofit


【解决方案1】:

更改您的 api 定义以返回 Call&lt;List&lt;Message&gt;&gt; 而不是 Call&lt;Messages&gt;

Call<List<Message>>loadMessages(@Path("roomID") String roomID);

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("Response", String.valueOf(response.body()));
        }

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-03
    • 2016-01-21
    • 1970-01-01
    相关资源
    最近更新 更多