终止应用程序后 API 响应上的空对象引用。如果应用程序正确注销响应将起作用
Null object reference on API response after killing app. if app logout properly response will work
如果应用程序被手动终止并尝试发送更新,我将在 API 响应中收到 nullPointerException
。如果我正确注销它的工作正常。我记录了输入值,一切都很好。任何人请查看此代码
这是我的 API 更新。
private void updateFb(final String shop, final String phone,final String user_ids,final String lat, String lon,final String feedb) {
Log.i("TAG", shop+","+phone+","+user_ids+","+lat+","+lon+","+feedb);
new RetrofitHelper(MainActivity.this)
.getApIs()
.feedback(shop,phone,user_ids,lat,lon,feedb)
.enqueue(new Callback<JsonElement>()
{
@Override
public void onResponse(Call<JsonElement> call, Response<JsonElement> response) {
try {
JSONObject jsonObject=new JSONObject(response.body().toString());
String status=jsonObject.getString("status");
String date_time=jsonObject.getString("dt_time");
if (status=="Failed"){
Toasty.error(MainActivity.this, "Updating Failed", Toast.LENGTH_SHORT).show();
}
else {
shopName.setText("");
feedback.setText("");
phoneEdt.setText("");
InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), 0);
Toasty.success(MainActivity.this, "Success", Toast.LENGTH_SHORT).show();
}
} catch (JSONException e) {
e.printStackTrace();
}
}
@Override
public void onFailure(Call<JsonElement> call, Throwable t) {
}
});
// API interface
@FormUrlEncoded
@POST("/web-api/insert_shop.php?")
Call<JsonElement>feedback(@Field("shop_name") String shopName,@Field("phone")String phone, @Field("user_id") String user_id,
@Field("pos_lat") String pos_lat, @Field("pos_long") String pos_lon, @Field("feedback") String feedback);
我得到了回复。
java.lang.NullPointerException: Attempt to invoke interface method 'retrofit2.Call com.example.user.comcubeassist.retrofit.APIs.feedback(java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String)' on a null object reference
new RetrofitHelper(MainActivity.this).getApIs()
的值是 null
,因此当您尝试访问 feedback
方法时,它会抛出空引用。验证 getApIs()
方法并检查它返回 null
.
的原因
编辑
我猜你正在登录页面上初始化你的 Refrofit 客户端,因此如果你终止并重新打开 app ,它会返回 null 。尝试在主屏幕上初始化客户端
如果应用程序被手动终止并尝试发送更新,我将在 API 响应中收到 nullPointerException
。如果我正确注销它的工作正常。我记录了输入值,一切都很好。任何人请查看此代码
这是我的 API 更新。
private void updateFb(final String shop, final String phone,final String user_ids,final String lat, String lon,final String feedb) {
Log.i("TAG", shop+","+phone+","+user_ids+","+lat+","+lon+","+feedb);
new RetrofitHelper(MainActivity.this)
.getApIs()
.feedback(shop,phone,user_ids,lat,lon,feedb)
.enqueue(new Callback<JsonElement>()
{
@Override
public void onResponse(Call<JsonElement> call, Response<JsonElement> response) {
try {
JSONObject jsonObject=new JSONObject(response.body().toString());
String status=jsonObject.getString("status");
String date_time=jsonObject.getString("dt_time");
if (status=="Failed"){
Toasty.error(MainActivity.this, "Updating Failed", Toast.LENGTH_SHORT).show();
}
else {
shopName.setText("");
feedback.setText("");
phoneEdt.setText("");
InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), 0);
Toasty.success(MainActivity.this, "Success", Toast.LENGTH_SHORT).show();
}
} catch (JSONException e) {
e.printStackTrace();
}
}
@Override
public void onFailure(Call<JsonElement> call, Throwable t) {
}
});
// API interface
@FormUrlEncoded
@POST("/web-api/insert_shop.php?")
Call<JsonElement>feedback(@Field("shop_name") String shopName,@Field("phone")String phone, @Field("user_id") String user_id,
@Field("pos_lat") String pos_lat, @Field("pos_long") String pos_lon, @Field("feedback") String feedback);
我得到了回复。
java.lang.NullPointerException: Attempt to invoke interface method 'retrofit2.Call com.example.user.comcubeassist.retrofit.APIs.feedback(java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String)' on a null object reference
new RetrofitHelper(MainActivity.this).getApIs()
的值是 null
,因此当您尝试访问 feedback
方法时,它会抛出空引用。验证 getApIs()
方法并检查它返回 null
.
编辑 我猜你正在登录页面上初始化你的 Refrofit 客户端,因此如果你终止并重新打开 app ,它会返回 null 。尝试在主屏幕上初始化客户端