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;
}
}
}