Android 改造响应返回空对象
Android Retrofit response returning null object
我在我的本地主机上使用 Django
构建了一个简单的 rest API,并尝试使用 android GET
、POST
retrofit
。我已成功使用 GET
方法并在简单的 android TextView
中检索了 JSON 对象。但是当我尝试从远程 android 设备使用 POST
时,它确实 return 代码 500(称为内部服务器错误)。但是我的 POST
正在本地主机服务器上工作。我不明白为什么 POST 不工作,所以 response.body()
return 向我的 Post
class 发送了一个空对象。
这是我的 createPost()
,我试图在本地主机 Django 服务器上 Post 一些东西:
private void createPost() {
Post post = new Post("AAAAAAAA", "33");
Call<Post> call = jsonPlaceHolderApi.createPost(post);
call.enqueue(new Callback<Post>() {
@Override
public void onResponse(Call<Post> call, Response<Post> response) {
if(!response.isSuccessful()){
tv.setText("Code" + response.code());
}
Post postResponse = response.body();
String content = "";
content += postResponse.getAlias() + "\n";
content += postResponse.getName() + "\n\n";
tv.append(content);
}
@Override
public void onFailure(Call<Post> call, Throwable t) {
tv.setText(t.getMessage());
}
});
}
还有我的Postclass:
public class Post {
@SerializedName("name")
private String name;
@SerializedName("alias")
private String alias;
public Post(String name, String alias) {
this.name = name;
this.alias = alias;
}
public String getName() {
return name;
}
public String getAlias() {
return alias;
}
}
在我的 JsonPlaceHolderApi 接口中:
public interface JsonPlaceHolderApi {
@GET("heroes")
Call<List<Post>> getPosts();
@POST("heroes")
Call<Post> createPost(@Body Post post);
}
最后,在我的 logcat window 中,我得到了:
2020-07-02 21:47:31.858 25271-25271/com.asif.restapitestapp E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.asif.restapitestapp, PID: 25271
java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String com.asif.restapitestapp.Post.getAlias()' on a null object reference
at com.asif.restapitestapp.MainActivity.onResponse(MainActivity.java:79)
at retrofit2.ExecutorCallAdapterFactory$ExecutorCallbackCall.run(ExecutorCallAdapterFactory.java:70)
at android.os.Handler.handleCallback(Handler.java:761)
at android.os.Handler.dispatchMessage(Handler.java:98)
at android.os.Looper.loop(Looper.java:156)
at android.app.ActivityThread.main(ActivityThread.java:6517)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:942)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:832)
如有任何建议,我们将不胜感激。提前致谢。
在 @POST
中添加一个额外的斜杠“/”解决了我的问题。
public interface JsonPlaceHolderApi {
@GET("heroes")
Call<List<Post>> getPosts();
@POST("heroes/")
Call<Post> createPost(@Body Post post);
}
我在我的本地主机上使用 Django
构建了一个简单的 rest API,并尝试使用 android GET
、POST
retrofit
。我已成功使用 GET
方法并在简单的 android TextView
中检索了 JSON 对象。但是当我尝试从远程 android 设备使用 POST
时,它确实 return 代码 500(称为内部服务器错误)。但是我的 POST
正在本地主机服务器上工作。我不明白为什么 POST 不工作,所以 response.body()
return 向我的 Post
class 发送了一个空对象。
这是我的 createPost()
,我试图在本地主机 Django 服务器上 Post 一些东西:
private void createPost() {
Post post = new Post("AAAAAAAA", "33");
Call<Post> call = jsonPlaceHolderApi.createPost(post);
call.enqueue(new Callback<Post>() {
@Override
public void onResponse(Call<Post> call, Response<Post> response) {
if(!response.isSuccessful()){
tv.setText("Code" + response.code());
}
Post postResponse = response.body();
String content = "";
content += postResponse.getAlias() + "\n";
content += postResponse.getName() + "\n\n";
tv.append(content);
}
@Override
public void onFailure(Call<Post> call, Throwable t) {
tv.setText(t.getMessage());
}
});
}
还有我的Postclass:
public class Post {
@SerializedName("name")
private String name;
@SerializedName("alias")
private String alias;
public Post(String name, String alias) {
this.name = name;
this.alias = alias;
}
public String getName() {
return name;
}
public String getAlias() {
return alias;
}
}
在我的 JsonPlaceHolderApi 接口中:
public interface JsonPlaceHolderApi {
@GET("heroes")
Call<List<Post>> getPosts();
@POST("heroes")
Call<Post> createPost(@Body Post post);
}
最后,在我的 logcat window 中,我得到了:
2020-07-02 21:47:31.858 25271-25271/com.asif.restapitestapp E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.asif.restapitestapp, PID: 25271
java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String com.asif.restapitestapp.Post.getAlias()' on a null object reference
at com.asif.restapitestapp.MainActivity.onResponse(MainActivity.java:79)
at retrofit2.ExecutorCallAdapterFactory$ExecutorCallbackCall.run(ExecutorCallAdapterFactory.java:70)
at android.os.Handler.handleCallback(Handler.java:761)
at android.os.Handler.dispatchMessage(Handler.java:98)
at android.os.Looper.loop(Looper.java:156)
at android.app.ActivityThread.main(ActivityThread.java:6517)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:942)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:832)
如有任何建议,我们将不胜感激。提前致谢。
在 @POST
中添加一个额外的斜杠“/”解决了我的问题。
public interface JsonPlaceHolderApi {
@GET("heroes")
Call<List<Post>> getPosts();
@POST("heroes/")
Call<Post> createPost(@Body Post post);
}