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

标签 java android retrofit

我是 Retrofit 的新手,我的实现在我的应用程序的调试版本中工作得很好,但是一旦我切换到发布版本,我就会在调用模型类(我的 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());

                        }
                    });

调试版本为我提供了正确的用户名,在发布版本中,我在日志中从服务器获得了正确的响应,但是当我尝试用用户名显示 toast 时,我得到了一个 NPE Attempt to invoke interface空对象引用上的方法

完整的堆栈跟踪

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

最佳答案

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

关于java - Retrofit : NPE , 尝试在空对象引用上调用接口(interface)方法(仅限发行版),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28909549/

相关文章:

java - 谷歌语音java getSMS()

java - Java 相对于 C++ 的指针模型

java - 在获得所需值后尝试使用break退出for循环 - 总是抛出异常

java - 一个对象如何在它自己的类中被初始化?

android - 如何使用 Retrofit 获取 JSON 响应

java - 谷歌翻译 API : Requests from this client application <empty> are blocked

java - 使用gson库将Json反序列化为java类

java - 来自 ok Retrofit 响应的图像的空模型

Android - 在改造中设置适配器

android - 将 subscribeOn 与 Retrofit 结合使用