简体   繁体   English

FragmentPagerAdapter中的Fragment中的ImageView上的NullPointerException

[英]NullPointerException on ImageView in Fragment in FragmentPagerAdapter

I have a bunch of fragments in a FragmentPagerAdapter with one ImageView in side each fragment. 我在FragmentPagerAdapter中有一堆片段,每个片段旁边都有一个ImageView。 If I swipe really fast this error comes up: 如果我快速滑动,就会出现此错误:

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)

If I swipe slowly then it works perfectly fine. 如果我缓慢滑动,则效果很好。

Android Code (code is the same for each fragment. Code in AsyncTask): 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 method: 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;
}

how can i avoid the NullPointerException? 如何避免NullPointerException?

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

ImageView need initialize in onCreateView. ImageView需要在onCreateView中初始化。 A case of you getView() return null... 您的情况getView()返回null ...

Add your initialization snippet in onViewCreated method instead of onCreateView . onViewCreated方法而不是onCreateView添加您的初始化代码段。 it will ensure that imageview will be initialize after your view is inflated. 它将确保您的视图膨胀后将初始化imageview

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

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

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

您可以添加一个判断,getView是否为空,以及容错处理!

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM