为了账号安全,请及时绑定邮箱和手机立即绑定

为什么我的作业中会出现“Context = NullPointerException”错误?

为什么我的作业中会出现“Context = NullPointerException”错误?

暮色呼如 2022-12-28 14:18:42
我正在做作业教程,即构建 Instagram 应用程序。该教程大约有两年的历史,我在编码方面遇到了一些问题。我有以下错误,我不确定为什么。 java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.Context android.content.Context.getApplicationContext()' on a null object reference我的 UniversalImageLoader 类public class UniversalImageLoader {    private static final int defaultImage = R.drawable.ic_android;    private Context mContext;    public UniversalImageLoader(Context context) {        mContext = context;    }    public ImageLoaderConfiguration getConfig(){        //File cacheDir = StorageUtils.getCacheDirectory(mContext);        ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(mContext)//<--the error is in this line                .memoryCacheExtraOptions(480, 800) // default = device screen dimensions                .diskCacheExtraOptions(480, 800, null)                .threadPriority(Thread.NORM_PRIORITY - 2) // default                .tasksProcessingOrder(QueueProcessingType.FIFO) // default                .denyCacheImageMultipleSizesInMemory()                .memoryCache(new LruMemoryCache(2 * 1024 * 1024))                .memoryCacheSize(2 * 1024 * 1024)                .memoryCacheSizePercentage(13) // default                .diskCacheSize(50 * 1024 * 1024)                .diskCacheFileCount(100)                .diskCacheFileNameGenerator(new HashCodeFileNameGenerator()) // default                .imageDownloader(new BaseImageDownloader(mContext)) // default                .defaultDisplayImageOptions(DisplayImageOptions.createSimple()) // default                .writeDebugLogs()                .build();        return config;    }在 HomeActivity 中:(和 OnCreate)[在每个 Activity 中我都这样称呼它]initImageLoader();private void initImageLoader(){        UniversalImageLoader universalImageLoader = new UniversalImageLoader(mContext);        ImageLoader.getInstance().init(universalImageLoader.getConfig());    }
查看完整描述

1 回答

?
慕侠2389804

TA贡献1719条经验 获得超6个赞

当您创建 UniversalImageLoader 类的对象时,传递getApplicationContext()而不是活动上下文。


应用程序上下文在整个应用程序中可用,而活动上下文则绑定到活动生命周期。


更新:


Application Context:它是一个单例实例,可以通过 getApplicationContext() 在活动中访问。此上下文与应用程序的生命周期相关联。应用程序上下文可用于您需要其生命周期与当前上下文分离的上下文,或者当您传递超出活动范围的上下文时


private void initImageLoader(){

    UniversalImageLoader universalImageLoader = new UniversalImageLoader(getApplicationContext());

    ImageLoader.getInstance().init(universalImageLoader.getConfig());

}

活动上下文此上下文在活动中可用。此上下文与活动的生命周期相关联。


在这里阅读更多关于 Activity context 和 application context 的区别。 https://blog.mindorks.com/understanding-context-in-android-application-330913e32514


对于多个活动,您可以在 Application 类的 onCreate 方法中进行初始化。


public class MyApplication extends Application {


@Override

public void onCreate() {

    super.onCreate();

        // Initialize the Universal Image Loader here


    DisplayImageOptions defaultOptions = new 

    DisplayImageOptions.Builder()

            .cacheOnDisk(true).cacheInMemory(true).build();


    ImageLoaderConfiguration config = new 

    ImageLoaderConfiguration.Builder(getApplicationContext())

            .defaultDisplayImageOptions(defaultOptions).build();


    ImageLoader.getInstance().init(config);



}

然后在您的 Activity 中像这样获取图像加载器实例。


ImageLoader mImageLoader = ImageLoader.getInstance();

您还需要像这样在 AndroidManifest 中添加您的应用程序类。


<application

    android:name=".MyApplication"

    android:icon="@mipmap/ic_launcher"

    android:label="@string/app_name"


查看完整回答
反对 回复 2022-12-28
  • 1 回答
  • 0 关注
  • 80 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号