Retrofit:NPE,尝试在空对象引用上调用接口方法(仅限发行版)

时间:2015-03-06 23:45:50

标签: java android retrofit

我是Retrofit的新手,我的实现在我的应用程序的调试版本中运行得很好但是当我切换到发布版本时,我在调用模型类(My POJO类)时会得到一个NPE。我确保在Proguard中添加

-keep class retrofit.** { *; }
-keep class retrofit.http.** { *; }
-keep class retrofit.client.** { *; }
-keep class com.squareup.okhttp.** { *; }
-keep interface com.squareup.okhttp.** { *; }
-keepattributes Signature
-dontwarn okio.** 

这是我的Retorfit实现:

    TestService service = RequestHelper.createService(TestAPIService.class,
     TestAPIService.BASE_URL);

                    service.getResponse("USER", 40, new Callback<OffersResponse>() {


                        @Override
                        public void success(final TestResponse testResponse, final Response response) {

                            bundle.putParcelable("TestResponse", testResponse);
                            String user = testResponse.getUser().get(0).getName().toString();
                            Toast.makeText(getActivity(),user, Toast.LENGTH_LONG).show();

                        }

                        @Override
                        public void failure(RetrofitError error) {
                            Log.d(TAG, "" + error.toString());

                        }
                    });

调试版本为我提供了正确的用户名,在发布版本中,我从日志中获得了服务器的正确响应,但是当我尝试使用用户名显示吐司时,我得到了一个N​​PE Attempt to invoke interface method on a null object reference

完成堆栈跟踪

E/AndroidRuntime(17647): java.lang.NullPointerException: Attempt to invoke interface method 'java.lang.Object java.util.List.get(int)' on a null object reference
E/AndroidRuntime(17647):    at com.test.browser.check.w.a(Unknown Source)
E/AndroidRuntime(17647):    at com.test.browser.check.w.success(Unknown Source)
E/AndroidRuntime(17647):    at retrofit.CallbackRunnable$1.run(Unknown Source)
E/AndroidRuntime(17647):    at android.os.Handler.handleCallback(Handler.java:739)
E/AndroidRuntime(17647):    at android.os.Handler.dispatchMessage(Handler.java:95)
E/AndroidRuntime(17647):    at android.os.Looper.loop(Looper.java:135)
E/AndroidRuntime(17647):    at android.app.ActivityThread.main(ActivityThread.java:5221)
E/AndroidRuntime(17647):    at java.lang.reflect.Method.invoke(Native Method)
E/AndroidRuntime(17647):    at java.lang.reflect.Method.invoke(Method.java:372)
E/AndroidRuntime(17647):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899)
E/AndroidRuntime(17647):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)
W/ActivityManager( 2144):   Force finishing activity com.test.browser/.check.Check

1 个答案:

答案 0 :(得分:1)

我的所有POJO类和服务器api调用都是库项目(我自己的SDK)的一部分。我忘了将我的SDK添加到导致错误的proguard属性文件中。现在一切都在工作。