android - 终止应用程序后 API 响应的空对象引用。如果应用程序正确注销响应将起作用

标签 android nullpointerexception retrofit2 okhttp

如果应用程序被手动终止并尝试发送更新,我将在 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 。尝试在主屏幕上初始化客户端

关于android - 终止应用程序后 API 响应的空对象引用。如果应用程序正确注销响应将起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47672885/

相关文章:

java - Yabe 中的 NPE 空指针异常

rx-java - RxJava2/Retrofit2 - 处理 204 个 PUT 和 DELETE 请求的空值

android - Retrofit 2 带数据的多部分图像上传

android - 当进行 retrofit2 请求时,单元测试 Call 对象为 null

android - 您可以使用由 PhoneGap 构建的应用程序访问用户手机上的日历和相机吗?

android - 仅在应用程序首次启动时用于教程的 ViewPager

java - 将 ListView 项解析为 setBackgroundResource 时发生 NullPointerException

Android Sentry 不在仪表板中显示日志

java - 在空对象引用上调用虚拟方法 'double android.location.Location.getLatitude()' 时出错

android - java.lang.NullPointerException 在 android 中单击标记