2016-05-12 2 views
0

У меня есть куча фрагментов в FragmentPagerAdapter с одним ImageView в стороне каждого фрагмента. Если я прокручу очень быстро, эта ошибка возникает:NullPointerException в ImageView в фрагменте в 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) 

Если я прокручиваю медленно, то он отлично работает.

Android код (код одинаков для каждого фрагмента кода в 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 метод:

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

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

    return view; 
} 

, как я могу избежать NullPointerException?

+0

Опубликовать xml-код и полный код фрагмента –

+0

положить код try catch в метод OnCreate() ............ – sushildlh

+0

использовать onCreateView для инициализации вашего ImageView. –

ответ

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

ImageView нужно инициализировать в onCreateView. Случай с вами getView() return null ...

0

Добавить свой фрагмент инициализации в onViewCreated вместо onCreateView. он будет гарантировать, что imageview будет инициализирован после того, как ваше представление завышено.

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

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

} 
+0

что делать, если я использую метод onCreateView? –

+0

если вы измените метод на мой, то я отметю его правильно –

+0

Я не знаю, что это вопрос с этим методом? вы можете использовать его, если он разрешит вашу проблему. 'onViewCreated' вызовет после того, как ваше представление будет создано, поэтому ваше представление никогда не будет null, если этот метод получит вызов, если вы правильно разобьете представление. поэтому дайте ему попробовать @LazarK – KDeogharkar

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

привет Вы можете добавить суждение, GetView ли Null, и отказоустойчивая, обработку!

+0

что это не имеет смысла? –

+0

Потому что я думаю, что проблема в getView() возвращает null, а затем выносит суждение. – kabuqinuofu

+0

Пример: if (getView()! = Null) {ImageView img = (ImageView) getView(). FindViewById (R.id.ProductFiveImageView);} – kabuqinuofu

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