用于 onActivityCreated 中通用图像加载器的片段中进度条的 NullPointerException

     2023-02-19     166

关键词:

【中文标题】用于 onActivityCreated 中通用图像加载器的片段中进度条的 NullPointerException【英文标题】:NullPointerException for progressbar in fragment for Universal Image Loader in onActivityCreated 【发布时间】:2014-08-13 00:08:40 【问题描述】:

我遇到了无法诊断的奇怪 NPE。我知道它来自引用我的 ProgressBar 微调器,但我不知道为什么,因为我在 onCreateView 中为片段实例化它。

下面是我的片段的代码。在你看之前,我正在使用通用图像加载器来加载图像。如果我完全删除微调器 E.G. 的代码行,图像会加载。 spinner.setVisibility(View.GONE); spinner.setVisibility(View.VISIBLE);

import android.app.Activity;
import android.graphics.Bitmap;
import android.net.Uri;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.ProgressBar;
import android.widget.TextView;
import android.widget.Toast;

import com.nostra13.universalimageloader.core.DisplayImageOptions;
import com.nostra13.universalimageloader.core.ImageLoader;
import com.nostra13.universalimageloader.core.assist.FailReason;
import com.nostra13.universalimageloader.core.assist.ImageScaleType;
import com.nostra13.universalimageloader.core.display.FadeInBitmapDisplayer;
import com.nostra13.universalimageloader.core.listener.SimpleImageLoadingListener;


/**
 * A simple @link Fragment subclass.
 * Activities that contain this fragment must implement the
 *
 * to handle interaction events.
 * Use the @link ImageFragment#newInstance factory method to
 * create an instance of this fragment.
 *
 */
public class ImageFragment extends Fragment 
    // TODO: Rename parameter arguments, choose names that match
    private static final String ARG_PARAM1 = "param1";
    private static final String ARG_PARAM2 = "param2";

    private int mImageNum;

    private ImageView imageDisplay;
    private TextView textTest;

    public ProgressBar spinner;

    private String mUrl;

    private ImageLoader imageLoader = ImageLoader.getInstance();

    DisplayImageOptions options;


    /**
     * Use this factory method to create a new instance of
     * this fragment using the provided parameters.
     *
     * @return A new instance of fragment ImageFragment.
     */
    // TODO: Rename and change types and number of parameters
    public static ImageFragment newInstance(int position, String url)
    
        ImageFragment fragment = new ImageFragment();
        Bundle args = new Bundle();
        args.putInt(ARG_PARAM1, position);
        args.putString(ARG_PARAM2, url);
        fragment.setArguments(args);
        return fragment;
    
    public ImageFragment()
    
        // Required empty public constructor
    

    @Override
    public void onCreate(Bundle savedInstanceState) 
        super.onCreate(savedInstanceState);
        mImageNum = getArguments() != null ? getArguments().getInt(ARG_PARAM1) : -1;
        mUrl = getArguments() != null ? getArguments().getString(ARG_PARAM2) : null;
    

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) 
        final View v = inflater.inflate(R.layout.fragment_image, container, false);
        imageDisplay = (ImageView) v.findViewById(R.id.imageView);
        spinner = (ProgressBar) imageDisplay.findViewById(R.id.loading);

        options = new DisplayImageOptions.Builder()
                .showImageForEmptyUri(R.drawable.ic_empty)
                .showImageOnFail(R.drawable.ic_error)
                .resetViewBeforeLoading(true)
                .cacheOnDisk(true)
                .imageScaleType(ImageScaleType.EXACTLY)
                .bitmapConfig(Bitmap.Config.RGB_565)
                .considerExifParams(true)
                .displayer(new FadeInBitmapDisplayer(300))
                .build();

        return v;
    

    @Override
    public void onActivityCreated(Bundle savedInstanceState) 
        super.onActivityCreated(savedInstanceState);



        imageLoader.displayImage(mUrl, imageDisplay, options, new SimpleImageLoadingListener() 
            @Override
            public void onLoadingStarted(String imageUri, View view) 
                spinner.setVisibility(View.VISIBLE);
            

            @Override
            public void onLoadingFailed(String imageUri, View view, FailReason failReason) 
                String message = null;
                switch (failReason.getType()) 
                    case IO_ERROR:
                        message = "Input/Output error";
                        break;
                    case DECODING_ERROR:
                        message = "Image can't be decoded";
                        break;
                    case NETWORK_DENIED:
                        message = "Downloads are denied";
                        break;
                    case OUT_OF_MEMORY:
                        message = "Out Of Memory error";
                        break;
                    case UNKNOWN:
                        message = "Unknown error";
                        break;
                

                spinner.setVisibility(View.GONE);
            

            @Override
            public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) 
                spinner.setVisibility(View.GONE);
            
        );




    

请帮忙!我不擅长使用 Fragments,我不知道为什么它不起作用

【问题讨论】:

【参考方案1】:
final View v = inflater.inflate(R.layout.fragment_image, container, false);
imageDisplay = (ImageView) v.findViewById(R.id.imageView);
spinner = (ProgressBar) imageDisplay.findViewById(R.id.loading);

这个“微调器”是片段视图的子视图还是“imageDisplay”?

或许,应该是spinner = (ProgressBar) v.findViewById(R.id.loading);

【讨论】:

【参考方案2】:

你应该改变这个

    spinner = (ProgressBar) imageDisplay.findViewById(R.id.loading);

    spinner = (ProgressBar) v.findViewById(R.id.loading);

您应该从Fragment 的膨胀视图中找到View

【讨论】:

下面这个人最先回答,但你们都是我书中的赢家! @user2977650 哦,那我想你是我希望的新伙伴!

对onActivityCreated片段回调有啥误解吗?

】对onActivityCreated片段回调有啥误解吗?【英文标题】:IsthereanymisunderstandingabouttheonActivityCreatedfragmentcallback?对onActivityCreated片段回调有什么误解吗?【发布时间】:2020-07-2408:31:50【问题描述】:onActivityCreated似乎意味着“这个片... 查看详情

onActivityCreated 已弃用,如何正确使用 LifecycleObserver?

】onActivityCreated已弃用,如何正确使用LifecycleObserver?【英文标题】:onActivityCreatedisdeprecated,howtoproperlyuseLifecycleObserver?【发布时间】:2020-08-0200:37:55【问题描述】:Google在Android上弃用Fragment的onActivityCreated()并推荐使用LifeCycleObserv... 查看详情

为啥会调用fragment的onCreateView、onCreate、onActivityCreated

】为啥会调用fragment的onCreateView、onCreate、onActivityCreated【英文标题】:Whydoesthefragment\'sonCreateView,onCreate,onActivityCreatedarecalled为什么会调用fragment的onCreateView、onCreate、onActivityCreated【发布时间】:2013-06-1617:03:27【问题描述】:我有... 查看详情

如何在 OnActivityCreated 中解决这个不受欢迎的问题?

】如何在OnActivityCreated中解决这个不受欢迎的问题?【英文标题】:HowtoresolvethisdeprectedprobleminOnActivityCreated?【发布时间】:2021-09-3014:57:57【问题描述】:我得到\'onActivityCreated(android.os.bundle)\'已被弃用。packageexample.com.fragmentrecycler... 查看详情

在 onActivityCreated() 之后再次调用 Fragment 的 onAttach()

】在onActivityCreated()之后再次调用Fragment的onAttach()【英文标题】:Fragment\'sonAttach()calledagainafteronActivityCreated()【发布时间】:2019-10-2501:52:06【问题描述】:我正在添加一个带有编辑文本和复选框的片段,并且我正在尝试在方向更改... 查看详情

Fragment中onCreate()、onCreateView()和onActivityCreated()的区别和使用

】Fragment中onCreate()、onCreateView()和onActivityCreated()的区别和使用【英文标题】:DifferenceandusesofonCreate(),onCreateView()andonActivityCreated()infragments【发布时间】:2015-05-0921:05:57【问题描述】:片段中的onCreate()、onCreateView()和onActivityCre 查看详情

为啥我们可以在 onActivityCreated 之前运行的 onCreateView 中调用 getActivity()?

】为啥我们可以在onActivityCreated之前运行的onCreateView中调用getActivity()?【英文标题】:whywecancallgetActivity()inonCreateViewwhichrunbeforeonActivityCreated?为什么我们可以在onActivityCreated之前运行的onCreateView中调用getActivity()?【发布时间】:2... 查看详情

onactivitycreated啥时候执行

...);onCreateView():为fragment绑定UI视图时,该方法被回调;onActivityCreated():当宿主Activity的onCreate()方法返回后,该方法被回调;onDestroyView():当与fragment绑定的UI视图被移除时,该方法被回调;onDetach():当fragment不再依附于Activity... 查看详情

Android(Fragment) - 是不是建议在 onActivityCreated 方法中初始化视图对象?

】Android(Fragment)-是不是建议在onActivityCreated方法中初始化视图对象?【英文标题】:Android(Fragment)-IsitrecommendedtoinitializeaviewobjectinsideonActivityCreatedmethod?Android(Fragment)-是否建议在onActivityCreated方法中初始化视图对象?【发布时间】:... 查看详情

EmailBackend 用于在 Django 中通过多个 SMTP 发送电子邮件

】EmailBackend用于在Django中通过多个SMTP发送电子邮件【英文标题】:EmailBackendforsendingemailthroughmultipleSMTPinDjango【发布时间】:2012-11-1510:40:50【问题描述】:使用标准设置很好地解释了让Django发送电子邮件here,如下所示。EMAIL_BACKEND... 查看详情

AndroidX 活动结果 API onActivityCreated 已弃用

】AndroidX活动结果APIonActivityCreated已弃用【英文标题】:AndroidXActivityResultAPIonActivityCreatedDeprecated【发布时间】:2021-03-2501:06:41【问题描述】:在应用级别Gradle中实现以下依赖项后implementation"androidx.fragment:fragment:1.3.0-beta02"implementati... 查看详情

fragment的oncreateview和onactivitycreate之间的区别(转)

...CreateView,butwhatotherfunctionalitycanbeinonCreateViewvs.whatshouldwaitforonActivityCreated?Mycurrentimplementationusesseparateactivitiesforeverything,andatypicalactivitydoesmostofitsworkinitsonCreatemethod,includinginflatingtheview,settingthecontentview,initializingthevariouswidgetswithdata,settin... 查看详情

在 onActivityCreated/onStart/onViewCreated 方法内的 getView() 上出现 NullPointerException 警告

】在onActivityCreated/onStart/onViewCreated方法内的getView()上出现NullPointerException警告【英文标题】:NullPointerExceptionWarningongetView()insideonActivityCreated/onStart/onViewCreatedmethod【发布时间】:2015-07-1818:32:04【问题描述】:我知道getView()可 查看详情

从 Rails 的 JSON 响应中寻找用于 Angular 中通用错误处理的范例

】从Rails的JSON响应中寻找用于Angular中通用错误处理的范例【英文标题】:LookingforparadigmtouseforgenericerrorhandlinginAngularfromaJSONresponsefromRails【发布时间】:2013-04-0221:10:59【问题描述】:我正在构建一个应用程序,它被构建为Rails服务... 查看详情

用于从该框中通过 SSH 连接到 jumphost 和 sftp 的 Python 脚本

】用于从该框中通过SSH连接到jumphost和sftp的Python脚本【英文标题】:PythonscripttoSSHintoajumphostandsftpfromwithinthatbox【发布时间】:2021-09-2812:31:57【问题描述】:我目前正在尝试编写一个气流作业,该作业将允许我通过ssh进入EC2实例,... 查看详情

onActivityCreated() 中的捆绑返回 null,即使在 onSaveInstanceState() 中设置值之后也是如此

】onActivityCreated()中的捆绑返回null,即使在onSaveInstanceState()中设置值之后也是如此【英文标题】:BundleinonActivityCreated()returnsnull,evenaftersettingvaluesinonSaveInstanceState()【发布时间】:2013-10-2715:58:38【问题描述】:在应用程序中,每当f... 查看详情

Base64 vs HEX 用于在 XML doc 中通过 Internet 发送二进制内容

】Base64vsHEX用于在XMLdoc中通过Internet发送二进制内容【英文标题】:Base64vsHEXforsendingbinarycontentovertheinternetinXMLdoc【发布时间】:2011-03-1203:53:17【问题描述】:在XML文档中的系统之间发送二进制内容的最佳方式是什么我知道Base64和He... 查看详情

课程测试用图

查看详情