2016-05-12 7 views
0

Ich habe eine Reihe von Fragmenten in einem FragmentPagerAdapter mit einem ImageView in jedem Fragment. Wenn ich wirklich schnell wische kommt dieser Fehler auf:NullPointerException auf ImageView in Fragment in FragmentPagerAdapter

E/AndroidRuntime: FATAL EXCEPTION: main 
       Process: com.wilsapp.wilsapp, PID: 21319 
       java.lang.NullPointerException: Attempt to invoke virtual method 'android.view.View android.view.View.findViewById(int)' on a null object reference 
       at com.wilsapp.wilsapp.Fragments.BuyerHomePageFragment9$DownloadImageTask.onPostExecute(BuyerHomePageFragment9.java:212) 
       at com.wilsapp.wilsapp.Fragments.BuyerHomePageFragment9$DownloadImageTask.onPostExecute(BuyerHomePageFragment9.java:192) 
       at android.os.AsyncTask.finish(AsyncTask.java:651) 
       at android.os.AsyncTask.-wrap1(AsyncTask.java) 
       at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:668) 
       at android.os.Handler.dispatchMessage(Handler.java:102) 
       at android.os.Looper.loop(Looper.java:148) 
       at android.app.ActivityThread.main(ActivityThread.java:5417) 
       at java.lang.reflect.Method.invoke(Native Method) 
       at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) 
       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 

Wenn ich langsam swipe dann funktioniert es vollkommen in Ordnung.

Android-Code (Code ist das gleiche für jedes Fragment-Code in AsyncTask.):

protected void onPostExecute(Bitmap result) { 
    try { 
     ImageView img = (ImageView) getView().findViewById(R.id.ProductOneImageView); 
     img.setImageBitmap(result); 
    }catch (Exception e){ 
     ImageView img = (ImageView) getView().findViewById(R.id.ProductOneImageView); 
     int id = getResources().getIdentifier("com.wilsapp.wilsapp:drawable/" + "error", null, null); 
     img.setImageResource(id); 
    } 
} 

Android onCreatView Methode:

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 

    View view = inflater.inflate(R.layout.fragment_buyer_home_page, container, false); 

    return view; 
} 

wie kann ich die Nullpointer vermeiden?

+0

Post Sie XML-Code und den vollständigen Code des Fragments –

+0

setzen Sie versuchen Fang Code in OnCreate() Methode .............. – sushildlh

+0

Verwenden Sie OnCreateView, um Ihre ImageView zu initialisieren. –

Antwort

-1
ImageView img = (ImageView) getView().findViewById(R.id.ProductFiveImageView); 

Image in onCreateView initialisieren müssen. Ein Fall von Ihnen getView() zurück null ...

0

Fügen Sie Ihr Initialisierungs-Snippet in onViewCreated Methode statt onCreateView. Dadurch wird sichergestellt, dass imageview initialisiert wird, nachdem Ihre Ansicht aufgebläht wurde.

@Override 
    public void onViewCreated(final View view, @Nullable Bundle savedInstanceState) { 

ImageView img = (ImageView) view.findViewById(R.id.ProductFiveImageView); 
      img.setImageBitmap(result); 

} 
+0

Was ist, wenn ich eine 'onCreateView' Methode verwenden? –

+0

Wenn Sie die Methode zu meiner ändern dann werde ich es richtig markieren –

+0

Ich weiß nicht, was ist das Problem mit dieser Methode? Sie können es verwenden, wenn es Ihr Problem löst. "onViewCreated" wird aufgerufen, nachdem Ihre Ansicht erstellt wurde, sodass Ihre Ansicht nie null wird, wenn diese Methode einen Aufruf erhält, wenn Sie die Ansicht ordnungsgemäß aufblasen. also versuchen Sie es @LazarK – KDeogharkar

0
ImageView img = (ImageView) getView().findViewById(R.id.ProductFiveImageView); 

hallo Sie können ein Urteil, getView hinzufügen Ob und Fehlertolerante Verarbeitung auf null!

+0

was ergab keinen Sinn? –

+0

Weil ich denke, das Problem ist in getView() zurück Null, Und dann ein Urteil treffen. – kabuqinuofu

+0

Beispiel: if (getView()! = Null) {ImageView img = (Bildansicht) getView(). FindViewById (R.id.ProductFiveImageView);} – kabuqinuofu

Verwandte Themen