2016-02-18 2 views
-3

Этот класс реализует SlideShowListener:
RestaurantFragment.javaИсключение нулевого указателя в методе интерфейса

public class RestaurentFragment extends MasterFragment implements SlideShowListener { 

    private SlideShowHttpService slideShowHttpService; 
    // Remaining code here. 

@Override 
    public void onResume() { 
     super.onResume(); 

     if(Util.isNetworkAvailable(mContext)){ 
      slideShowHttpService = new SlideShowHttpService(mContext); 
      slideShowHttpService.mSlideShowListener = this; 
     }else{ 
      CustomSnackBar.display(mContext, "No Connection", "Retry"); 
    } 

@Override 
public void setSlideShowData(List<ImageSliderPOJO> urlsList, int statusCode) { 
     Log.d(TAG," image url "+urlsList.get(0).getImageUrl()); 
    } 

    // Remaining code here. 


} 

Этот класс бросает исключения нулевого указателя.
SlideShowHttpService.java

public class SlideShowHttpService { 
     private static final String TAG = SlideShowHttpService.class.getSimpleName(); 
     private Context mContext; 
     public SlideShowListener mSlideShowListener; 

     public SlideShowHttpService(Context context){ 
      this.mContext = context; 
     } 

     public void parseImageURLLists() { 
      if (Util.isNetworkAvailable(mContext)) { 
       final ArrayList<ImageSliderPOJO> urlsList = new ArrayList<>(); 
       FoodRestClient.getURLList("bins/3655b", new AsyncHttpResponseHandler() { 
        @Override 
        public void onSuccess(int statusCode, Header[] headers, byte[] responseBody) { 
         String response = new String(responseBody); 
         try { 

          JSONArray array = new JSONArray(response); 
          int arraySize = array.length(); 
          if (arraySize > 0) { 
           for (int i = 0; i < arraySize; i++) { 
            JSONObject object = array.getJSONObject(i); 
            String imageUrl = object.getString("SliderImage"); 
            String targetVendorId = object.getString("TargetVendorId"); 
            urlsList.add(new ImageSliderPOJO(imageUrl, targetVendorId)); 
           } 
           mSlideShowListener.setSlideShowData(urlsList, statusCode);  // Null pointer Exception here 
          } 
         } catch (JSONException e) { 
          Log.v(TAG, "json fetch failure " + e.getMessage()); 
          mSlideShowListener.setSlideShowData(null, statusCode); 
         } 

        } 

        @Override 
        public void onFailure(int statusCode, Header[] headers, byte[] responseBody, Throwable error) { 
         Log.v(TAG, "slideshow http service failure: " + error.getMessage() + " " + statusCode); 
         mSlideShowListener.setSlideShowData(null, statusCode); 
        } 
       }); 

      } 
     } 

    } 

И Это мой интерфейс SlideShowListener.java

public interface SlideShowListener { 
    void setSlideShowData(List<ImageSliderPOJO> urlsList, int statusCode); 
} 

Вход Cat ошибка:

FATAL EXCEPTION: main 
    Process: com.app.foodmandu, PID: 12051 
    java.lang.RuntimeException: java.lang.NullPointerException: Attempt to invoke interface method 'void com.app.foodmandu.model.listener.SlideShowListener.setSlideShowData(java.util.List, int)' on a null object reference 
    at com.loopj.android.http.AsyncHttpResponseHandler.onUserException(AsyncHttpResponseHandler.java:304) 
    at com.loopj.android.http.AsyncHttpResponseHandler.handleMessage(AsyncHttpResponseHandler.java:395) 
    at com.loopj.android.http.AsyncHttpResponseHandler$ResponderHandler.handleMessage(AsyncHttpResponseHandler.java:510) 
    at android.os.Handler.dispatchMessage(Handler.java:102) 
    at android.os.Looper.loop(Looper.java:135) 
    at android.app.ActivityThread.main(ActivityThread.java:5312) 
    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:901) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:696) 
    Caused by: java.lang.NullPointerException: Attempt to invoke interface method 'void com.app.foodmandu.model.listener.SlideShowListener.setSlideShowData(java.util.List, int)' on a null object reference 
    at com.app.foodmandu.view.http.SlideShowHttpService$1.onSuccess(SlideShowHttpService.java:56) 
    at com.loopj.android.http.AsyncHttpResponseHandler.handleMessage(AsyncHttpResponseHandler.java:351) 
    at com.loopj.android.http.AsyncHttpResponseHandler$ResponderHandler.handleMessage(AsyncHttpResponseHandler.java:510)  
    at android.os.Handler.dispatchMessage(Handler.java:102)  
    at android.os.Looper.loop(Looper.java:135)  
    at android.app.ActivityThread.main(ActivityThread.java:5312)  
    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:901)  
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:696)  

Что я здесь делаю неправильно? почему есть mSlideShowListener.setSlideShowData() способ бросающий null указатель исключение? Я инициализирован mSlideShowListener внутри onResume() из RestaurantFragment класса

+1

Put ваша ошибка LogCat пожалуйста –

+0

ли 'onResume' на самом деле был вызван? Я бы посоветовал вам добавить здесь намного больше диагностических данных ... –

+5

Вы уверены, что 'mSlideShowListener' является' null'? возможно, что-то еще пустое, распечатайте их, используя метод android для отладки вещей, см. https://stackoverflow.com/questions/218384/what-is-a-null-pointer-exception-and-how-do-i-fix -it для получения более подробной информации – Ferrybig

ответ

2

В RestaurantFragment.java Контрольный список urlsList не равно нулю,

@Override 
public void setSlideShowData(List<ImageSliderPOJO> urlsList, int statusCode) { 
     if(urlsList!=null) 
      Log.d(TAG," image url "+urlsList.get(0).getImageUrl()); 
    } 

потому, что в службе

@Override 
        public void onFailure(int statusCode, Header[] headers, byte[] responseBody, Throwable error) { 
         Log.v(TAG, "slideshow http service failure: " + error.getMessage() + " " + statusCode); 
         mSlideShowListener.setSlideShowData(null, statusCode);//you're passing null to list 
        } 

и даже в уловом метод вы делаете то же самое, как это mSlideShowListener.setSlideShowData(null, statusCode);

+0

Это не проблема, я думаю! что-то не так с этим утверждением, но я не знаю, что: «slideShowHttpService.mSlideShowListener = this»! mSlideShowListener.setSlideShowData (urlsList, statusCode); Этот оператор бросает нулевой указатель! –

0

На самом деле проблема была, я инициализируется объект «slideShowHttpService», но забыл вызвать метод «parseImageURLLists()» на it.Stupid меня

Смежные вопросы