2015-10-16 50 views
4

在我的應用程序中,我一直在使用我的web服務調用的翻新。它工作正常,但是當應用程序投入到後臺崩潰,並得到了錯誤日誌中,安卓空指針在改造響應中的異常

java.lang.NullPointerException: Attempt to invoke interface method 'void retrofit.Callback.failure(retrofit.RetrofitError)' on a null object reference 
    at retrofit.CallbackRunnable$2.run(CallbackRunnable.java:53) 
    at android.os.Handler.handleCallback(Handler.java:739) 
    at android.os.Handler.dispatchMessage(Handler.java:95) 
    at android.os.Looper.loop(Looper.java:145) 
    at android.app.ActivityThread.main(ActivityThread.java:5942) 
    at java.lang.reflect.Method.invoke(Native Method) 
    at java.lang.reflect.Method.invoke(Method.java:372) 
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1400) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1195) 


Can anyone help me to overcome this issue..?? 

這是我改造的客戶端類,

public class RetrofitClient { 
private static RetrofitCommonService RETROFIT_CLIENT; 
public RetrofitClient() {} 
public static RetrofitCommonService getInstance() { 
    //if REST_CLIENT is null then set-up again. 
    if (RETROFIT_CLIENT == null) { 
     setupRestClient(); 
    } 
    return RETROFIT_CLIENT; 
} 

private static void setupRestClient() { 
    RestAdapter restAdapter = new RestAdapter.Builder() 
      .setClient(new OkClient(new OkHttpClient())) 
      .setEndpoint(Constants.BASE_URL) 
      //.setLogLevel(RestAdapter.LogLevel.FULL) 
      .build(); 
    RETROFIT_CLIENT = restAdapter.create(RetrofitCommonService.class); 
} 
} 

這是我改造服務接口,

public interface RetrofitCommonService { 

@FormUrlEncoded 
@POST("/user") 
void doRegistration(@Field("user[mobile_number]") String phone, @Field("user[new_uid]") String imei, 
        Callback<RetrofitResponse> response); 

} 

而這種方式我打電話給我的活動和活動實施改造回調改造服務。

RetrofitCommonService mRetrofitCommonService = RetrofitClient.getInstance(); 
    mRetrofitCommonService.doRegistration(mPhoneNumber, getDeviceId(), this); 

public class RegistrationActivity extends Activity implements Callback<RetrofitResponse>{ 

} 

@Override 
public void success(RetrofitResponse retrofitResponse, Response response) { 

     } 

@Override 
public void failure(RetrofitError error) { 
} 
+0

您提供的不僅僅是錯誤消息。它表示'Callback'對象是'null'。因此,請確保您始終使用有效的「回撥」進行異步調用。 – Henry

+0

在這裏放一些代碼這太含糊 – Piyush

+0

好吧,我會在這裏發佈我的代碼 – Nidheesh

回答

3

修復了這個問題

在我的活動中,我有兩個Retrofit服務操作,這兩個服務在相同的Retrofit回調方法上進行中繼。當一個服務試圖獲得回調時,這些會導致空指針,同時回調被其他服務使用。我已經從Retrofit服務中刪除了回調方法並使用了返回對象。然後中繼在回調方法是不需要的。

這個工作對我來說...

+0

根據Google Play崩潰報告,我們有同樣的問題。我們怎樣才能重新開發環境的情況(情況)。任何建議的步驟? – csonuryilmaz

1

回調應該調用,調用回調函數的方法之前進行正確的初始化。