Java AsyncTask1错误

Java AsyncTask1错误,java,android,Java,Android,不确定是什么导致了错误。这是我的主要活动 04-05 19:11:08.221: E/AndroidRuntime(1067): FATAL EXCEPTION: AsyncTask #1 04-05 19:11:08.221: E/AndroidRuntime(1067): java.lang.RuntimeException: An error occured while executing doInBackground() 04-05 19:11:08.221: E/AndroidRunt

不确定是什么导致了错误。这是我的主要活动

04-05 19:11:08.221: E/AndroidRuntime(1067): FATAL EXCEPTION: AsyncTask #1
04-05 19:11:08.221: E/AndroidRuntime(1067): java.lang.RuntimeException: An error occured while executing doInBackground()
04-05 19:11:08.221: E/AndroidRuntime(1067):     at android.os.AsyncTask$3.done(AsyncTask.java:278)
04-05 19:11:08.221: E/AndroidRuntime(1067):     at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:273)
04-05 19:11:08.221: E/AndroidRuntime(1067):     at java.util.concurrent.FutureTask.setException(FutureTask.java:124)
04-05 19:11:08.221: E/AndroidRuntime(1067):     at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:307)
04-05 19:11:08.221: E/AndroidRuntime(1067):     at java.util.concurrent.FutureTask.run(FutureTask.java:137)
04-05 19:11:08.221: E/AndroidRuntime(1067):     at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:208)
04-05 19:11:08.221: E/AndroidRuntime(1067):     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
04-05 19:11:08.221: E/AndroidRuntime(1067):     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
04-05 19:11:08.221: E/AndroidRuntime(1067):     at java.lang.Thread.run(Thread.java:856)
04-05 19:11:08.221: E/AndroidRuntime(1067): Caused by: java.lang.NullPointerException
04-05 19:11:08.221: E/AndroidRuntime(1067):     at com.versced.wallpapermc.MainActivity$SyncData.doInBackground(MainActivity.java:324)
04-05 19:11:08.221: E/AndroidRuntime(1067):     at com.versced.wallpapermc.MainActivity$SyncData.doInBackground(MainActivity.java:1)
04-05 19:11:08.221: E/AndroidRuntime(1067):     at android.os.AsyncTask$2.call(AsyncTask.java:264)
04-05 19:11:08.221: E/AndroidRuntime(1067):     at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
04-05 19:11:08.221: E/AndroidRuntime(1067):     ... 5 more
我尝试了很多方法,但不确定错误发生在哪里。如果有什么我可以张贴在这里,使事情更容易,那么请提及它,我会张贴它。
非常感谢您的帮助。

根据堆栈跟踪,错误发生在com.versced.wallperMC.MainActivity$SyncData.doInBackgroundMainActivity.java:324。在其他可能的问题中,您没有处理listFiles返回null的情况,因此这可能是崩溃的根源。否则,请指出MainActivity的第324行是什么。对于文件favFolders:dirFav.listFiles{if favFolders.isDirectory{对于文件映像:favFolders.listFiles{mFavourites.addimage.toString;}}}这不是第324行,因为您引用了六行,并且不是所有行都可以是第324行。如果你是说你的NullPointerException来自那里,那么我支持我的建议,你不要处理dirFav.listFiles返回null的情况。对不起,那里的第一行是324,我只是认为我应该把全部放在这里。我会调查的。谢谢
   package com.versced.wallpapermc;

import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

import android.app.Dialog;
import android.app.ProgressDialog;
import android.content.Intent;
import android.content.res.Configuration;
import android.os.AsyncTask;
import android.os.Bundle;
import android.os.Environment;
import android.util.Log;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;

import com.google.android.gms.ads.AdRequest;
import com.google.android.gms.ads.AdView;
import com.versced.wallpapermc.adapters.GridImageAdapter;
import com.versced.wallpapermc.adapters.LeftMenuAdapter;
import com.versced.wallpapermc.models.Categories;
import com.versced.wallpapermc.models.Category;
import com.versced.wallpapermc.models.Recent;
import com.versced.wallpapermc.util.Controller;
import com.versced.wallpapermc.util.DialogUtils;

public class MainActivity extends NavigationDrawerActivity implements OnItemClickListener {

    public static final String PARC_RECENT = "com.versced.wallpapermc.Recent";
    public static final String PARC_FAVOURITES = "com.versced.wallpapermc.Favourites";
    public static final String PARC_CATEGORIES = "com.versced.wallpapermc.Categories";
    public static final String PARC_POSITION = "com.versced.wallpapermc.Position";

    private AdView mAdView;

    private Dialog mSplashScreenDialog;
    private Recent mRecent;
    private ArrayList<String> mFavourites;
    private List<Category> mCategories;
    private SyncData mSyncData;
    private DialogUtils dialog;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        mSyncData = new SyncData();
        mSyncData.execute();
        mAdView = (AdView) findViewById(R.id.main_activity_ad_view);
        mAdView.loadAd(new AdRequest.Builder().build());

        mGrid.setOnItemClickListener(this);

        dialog = new DialogUtils(this);

    }

    @Override
    public void onConfigurationChanged(Configuration newConfig) {
        // TODO Auto-generated method stub
        super.onConfigurationChanged(newConfig);
        mGrid.setNumColumns(getResources().getInteger(R.integer.grid_num_columns));
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        if (mSyncData != null) {
            mSyncData.cancel(true);
        }
        if (mAdView != null) {
            mAdView.destroy();
        }
    }


    @Override
    public void onResume() {
        super.onResume();
        if (mAdView != null) {
            mAdView.resume();
        }
    }

    @Override
    public void onPause() {
        if (mAdView != null) {
            mAdView.pause();
        }
        super.onPause();
    }


    public void hideSplashScreen() {
        if (mSplashScreenDialog != null) {
            mSplashScreenDialog.dismiss();
            mSplashScreenDialog = null;
        }
        mSyncData = null;
    }

    @Override
    protected void setGridAdapter(int position) {
        getActionBar().show();
        if (position < 2) {
            if (position == 0) {
                mGrid.setAdapter(new GridImageAdapter(this, mRecent));
            } else {
                Dialog progressDialog = ProgressDialog.show(
                        MainActivity.this, "",
                        getString(R.string.please_wait));
                SyncData data = new SyncData(progressDialog, 11);
                data.execute();
            }
        } else {
            mGrid.setAdapter(new GridImageAdapter(this, mCategories.get(position - 2)));
        }
    }

    @Override
    public void setTitle(int position) {
        if (position < 2) {
            if (position == 0) {
                setTitle(getString(R.string.recent));
            } else {
                setTitle(getString(R.string.favourites));
            }
        } else {
            setTitle(mCategories.get(position - 2).getName());
        }
    }

    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
        Intent intent = new Intent(this, FullScreenGalleryActivity.class);
        if (currentSelectedItem < 2) {
            if (currentSelectedItem == 0) {
                intent.putExtra(PARC_RECENT, mRecent);
            } else {
                intent.putStringArrayListExtra(PARC_FAVOURITES, mFavourites);
            }
        } else {
            intent.putExtra(PARC_CATEGORIES, mCategories.get(currentSelectedItem - 2));
        }
        intent.putExtra(PARC_POSITION, position);
        Log.v("1", "1");
        startActivity(intent);
        Log.v("2", "2");
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle presses on the action bar items
        ArrayList<String> random;
        GridImageAdapter adapter;
        switch (item.getItemId()) {
            case R.id.action_search:
                dialog.showDialog();
                return true;
            case R.id.action_refresh:
                Dialog progressDialog = ProgressDialog.show(
                        MainActivity.this, "",
                        getString(R.string.please_wait));
                SyncData data;
                if (currentSelectedItem < 2) {
                    if (currentSelectedItem == 0) {
                        data = new SyncData(progressDialog, 10);
                    } else {
                        data = new SyncData(progressDialog, 11);
                    }
                } else {
                    data = new SyncData(progressDialog, 12);
                }

                data.execute();
                return true;
            case R.id.random:
                if (currentSelectedItem < 2) {
                    if (currentSelectedItem == 0) {
                        random = new ArrayList<String>();
                        for(String st: mRecent.getImages()) {
                            random.add(st);
                        }
                        Collections.shuffle(random);
                        mRecent.setImages(random);
                        adapter = new GridImageAdapter(this, mRecent);
                        mGrid.setAdapter(adapter);
                    } else {
                        Collections.shuffle(mFavourites);
                        adapter = new GridImageAdapter(this, mFavourites);
                        mGrid.setAdapter(adapter);
                    }
                } else {
                    random = new ArrayList<String>();
                    for(String st: mCategories.get(currentSelectedItem-2).getImages()) {
                        random.add(st);
                    }
                    Collections.shuffle(random);
                    mCategories.get(currentSelectedItem-2).setImages(random);
                    adapter = new GridImageAdapter(this, mCategories.get(currentSelectedItem-2));
                    mGrid.setAdapter(adapter);
                }
                return true;
            case R.id.sort_up:
                if (currentSelectedItem < 2) {
                    if (currentSelectedItem == 0) {
                        Collections.sort(mRecent.getImages());
                        adapter = new GridImageAdapter(this, mRecent);
                        mGrid.setAdapter(adapter);
                    } else {
                        Collections.sort(mFavourites);
                        adapter = new GridImageAdapter(this, mFavourites);
                        mGrid.setAdapter(adapter);
                    }
                } else {
                    Collections.sort(mCategories.get(currentSelectedItem-2).getImages());
                    adapter = new GridImageAdapter(this, mCategories.get(currentSelectedItem-2));
                    mGrid.setAdapter(adapter);
                }
                return true;
            case R.id.sort_down:
                Comparator comparator = Collections.reverseOrder();
                if (currentSelectedItem < 2) {
                    if (currentSelectedItem == 0) {
                        Collections.sort(mRecent.getImages(), comparator);
                        adapter = new GridImageAdapter(this, mRecent);
                        mGrid.setAdapter(adapter);
                    } else {
                        Collections.sort(mFavourites, comparator);
                        adapter = new GridImageAdapter(this, mFavourites);
                        mGrid.setAdapter(adapter);
                    }
                } else {
                    Collections.sort(mCategories.get(currentSelectedItem-2).getImages(), comparator);
                    adapter = new GridImageAdapter(this, mCategories.get(currentSelectedItem-2));
                    mGrid.setAdapter(adapter);
                }
                return true;
            default:
                return super.onOptionsItemSelected(item);
        }
    }

    public void search(String result) {
        Dialog progressDialog = ProgressDialog.show(
                MainActivity.this, "",
                getString(R.string.please_wait));
        progressDialog.show();
        GridImageAdapter adapter;
        ArrayList<String> al = new ArrayList<String>();
        String text = result.toUpperCase();
        if (currentSelectedItem < 2) {
            if (currentSelectedItem == 0) {
                for(String st : mRecent.getImages()) {
                    if(st.toUpperCase().contains(text)) {
                        al.add(st);
                    }
                }
                mRecent.setImages(al);
                adapter = new GridImageAdapter(this, mRecent);
                mGrid.setAdapter(adapter);
            } else {
                for(String st : mFavourites) {
                    if(st.toUpperCase().contains(text)) {
                        al.add(st);
                    }
                }
                mFavourites = new ArrayList<String>();
                for(String st : al) {
                    mFavourites.add(st);
                }
                adapter = new GridImageAdapter(this, mFavourites);
                mGrid.setAdapter(adapter);
            }
        } else {
            for(String st : mCategories.get(currentSelectedItem-2).getImages()) {
                if(st.toUpperCase().contains(text)) {
                    al.add(st);
                }
            }
            mCategories.get(currentSelectedItem-2).setImages(al);
            adapter = new GridImageAdapter(this, mCategories.get(currentSelectedItem-2));
            mGrid.setAdapter(adapter);
        }
        progressDialog.dismiss();
    }

    private class SyncData extends AsyncTask<Void, Void, Integer> {
        private Dialog progressDialog;
        private int selection;

        public SyncData() {
            super();
        }

        public SyncData(Dialog progressDialog) {
            this.progressDialog = progressDialog;
            this.progressDialog.show();
        }

        public SyncData(Dialog progressDialog, int selection) {
            this.progressDialog = progressDialog;
            this.selection = selection;
            this.progressDialog.show();
        }

        @Override
        protected Integer doInBackground(Void... params) {
            try {
                Categories categories = Controller.fetchCategories();
                if(selection != 2){
                    mRecent = categories.getRecent();
                }
                mFavourites = new ArrayList<String>();
                String dir = Environment.getExternalStorageDirectory() + "/"
                        + getPackageName();
                File dirFav = new File(dir, "favourites");
                dirFav.mkdirs();
                for (File favFolders : dirFav.listFiles()) {
                    if (favFolders.isDirectory()) {
                        for (File image : favFolders.listFiles()) {
                            mFavourites.add(image.toString());
                        }
                    }
                }
                mCategories = categories.getCategories();
                for (Category c : mCategories) {
                    new File(dir, c.getName()).mkdirs();
                    new File(new File(dir, "favourites"), c.getName()).mkdirs();
                }
            } catch (IOException e) {
                e.printStackTrace();
                return -1;
            }
            return 1;
        }

        @Override
        protected void onPostExecute(Integer result) {
            if (result == 1) {
                if(selection == 2) {
                    mGrid.setAdapter(new GridImageAdapter(MainActivity.this, mFavourites));
                } else if(selection == 10) {
                    mGrid.setAdapter(new GridImageAdapter(MainActivity.this, mRecent));
                } else if(selection == 11) {
                    mGrid.setAdapter(new GridImageAdapter(MainActivity.this, mFavourites));
                } else if(selection == 12) {
                    mGrid.setAdapter(new GridImageAdapter(MainActivity.this, mCategories.get(currentSelectedItem-2)));
                }
                if(progressDialog != null) {
                    progressDialog.dismiss();
                }else {
                    hideSplashScreen();
                    //mainActivity.selectItem(0, Tags.LEFT_MENU_CATALOGUE);
                    mDrawerList.setAdapter(new LeftMenuAdapter(MainActivity.this, mCategories));
                    selectItem(0);
                }
            } else {
                showToast(R.string.error);
            }
            selection = 0;
        }
    }
}