Java 如何解析空对象引用

Java 如何解析空对象引用,java,android-studio,nullpointerexception,Java,Android Studio,Nullpointerexception,我有一个项目运行良好后,在安卓工作室建设。但我需要将该项目导入另一个项目。这就像将两个项目合并为一个项目。我觉得一切都很好。但是当我尝试在模拟器中运行时,我发现了一些错误。我需要你的帮助 这是我的密码: public class SysCacheScanTask extends AsyncTask<Void, Void, Void> { private IScanCallback mCallback; private int mScanCount; priv

我有一个项目运行良好后,在安卓工作室建设。但我需要将该项目导入另一个项目。这就像将两个项目合并为一个项目。我觉得一切都很好。但是当我尝试在模拟器中运行时,我发现了一些错误。我需要你的帮助

这是我的密码:

public class SysCacheScanTask extends AsyncTask<Void, Void, Void> {
    private IScanCallback mCallback;

    private int mScanCount;
    private int mTotalCount;
    private ArrayList<JunkInfo> mSysCaches;
    private HashMap<String, String> mAppNames;
    private long mTotalSize = 0L;

    public SysCacheScanTask(IScanCallback callback) {
        this.mCallback = callback;
    }

    @Override
    protected Void doInBackground(Void... params) {
        this.mCallback.onBegin();
        PackageManager pm = AppController.getContext().getPackageManager();
        List<ApplicationInfo> installedPackages = pm.getInstalledApplications(PackageManager.GET_META_DATA);

        IPackageStatsObserver.Stub observer = new PackageStatsObserver();

        this.mScanCount = 0;
        this.mTotalCount = installedPackages.size();
        this.mSysCaches = new ArrayList<>();
        this.mAppNames = new HashMap<>();

        for (int i = 0; i < mTotalCount; i++) {
            ApplicationInfo info = installedPackages.get(i);
            this.mAppNames.put(info.packageName, pm.getApplicationLabel(info).toString());
            getPackageInfo(info.packageName, observer);
        }

        return null;
    }

    public void getPackageInfo(String packageName, IPackageStatsObserver.Stub observer) {
        try {
            if (Build.VERSION.SDK_INT < Build.VERSION_CODES.O) {
                PackageManager pm = AppController.getContext().getPackageManager();
                Method getPackageSizeInfo = pm.getClass().getMethod("getPackageSizeInfo", String.class, IPackageStatsObserver.class);

                getPackageSizeInfo.invoke(pm, packageName, observer);
            } else {
                final StorageStatsManager storageStatsManager = (StorageStatsManager) AppController.getContext().getSystemService(Context.STORAGE_STATS_SERVICE);
                final StorageManager storageManager = (StorageManager) AppController.getContext().getSystemService(Context.STORAGE_SERVICE);
                try {

                    ApplicationInfo ai = AppController.getContext().getPackageManager().getApplicationInfo(packageName, 0);
                    StorageStats storageStats = storageStatsManager.queryStatsForUid(ai.storageUuid, AppController.getContext().getApplicationInfo().uid);
                    long cacheSize = storageStats.getCacheBytes();
                    long dataSize = storageStats.getDataBytes();
                    long apkSize = storageStats.getAppBytes();

                    PackageStats packageStats = new PackageStats(packageName);
                    packageStats.cacheSize = cacheSize;
                    packageStats.dataSize = dataSize;
                    packageStats.codeSize = apkSize;
                    observer.onGetStatsCompleted(packageStats, true);

                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        } catch (NoSuchMethodException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        } catch (InvocationTargetException e) {
            e.printStackTrace();
        }
    }

    private class PackageStatsObserver extends IPackageStatsObserver.Stub {
        @Override
        public void onGetStatsCompleted(PackageStats packageStats, boolean succeeded) throws RemoteException {
            mScanCount++;
            if (packageStats == null || !succeeded) {
            } else {
                JunkInfo info = new JunkInfo();
                info.mPackageName = packageStats.packageName;
                info.name = mAppNames.get(info.mPackageName);
                info.mSize = packageStats.cacheSize + packageStats.externalCacheSize;
                if (info.mSize > 0) {
                    mSysCaches.add(info);
                    mTotalSize += info.mSize;
                }
                mCallback.onProgress(info);
            }

            if (mScanCount == mTotalCount) {
                JunkInfo info = new JunkInfo();
                info.name = AppController.getContext().getResources().getString(R.string.junk_clean_system_cache);
                info.mSize = mTotalSize;
                Collections.sort(mSysCaches);
                Collections.reverse(mSysCaches);
                info.mChildren = mSysCaches;
                info.mIsVisible = true;
                info.mIsChild = false;

                ArrayList<JunkInfo> list = new ArrayList<>();
                list.add(info);
                mCallback.onFinish(list);
            }
        }

    }
}

2020-10-31 09:41:18.158 8138-8138/com.antivirus.flashvpn E/speed-->>: down-->>0    upload-->>0
2020-10-31 09:41:19.165 8138-8138/com.antivirus.flashvpn E/speed-->>: down-->>0    upload-->>0
2020-10-31 09:41:20.169 8138-8138/com.antivirus.flashvpn E/speed-->>: down-->>0    upload-->>0
2020-10-31 09:41:20.854 8138-8549/com.antivirus.flashvpn E/AndroidRuntime: FATAL EXCEPTION: AsyncTask #1
    Process: com.antivirus.flashvpn, PID: 8138
    java.lang.RuntimeException: An error occurred while executing doInBackground()
        at android.os.AsyncTask$4.done(AsyncTask.java:415)
        at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:383)
        at java.util.concurrent.FutureTask.setException(FutureTask.java:252)
        at java.util.concurrent.FutureTask.run(FutureTask.java:271)
        at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:305)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
        at java.lang.Thread.run(Thread.java:923)
     Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.pm.PackageManager android.content.Context.getPackageManager()' on a null object reference
        at com.antivirus.flashvpn.anti_virus.tasks.ProcessScanTask.doInBackground(ProcessScanTask.java:50)
        at com.antivirus.flashvpn.anti_virus.tasks.ProcessScanTask.doInBackground(ProcessScanTask.java:20)
        at android.os.AsyncTask$3.call(AsyncTask.java:394)
        at java.util.concurrent.FutureTask.run(FutureTask.java:266)
        at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:305) 
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167) 
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641) 
        at java.lang.Thread.run(Thread.java:923) 
2020