我需要从 ASyncTask 的 onPostExecute() 方法调用新 Activity ,但上下文返回 null。
public class ImageDownloadTask extends AsyncTask<String,Void,ArrayList<String>> {
public final String search = "https://www.google.co.in/search?&tbm=isch&q=";
public final String searchAlbum = "album+art";
ArrayList<String> arrayList=new ArrayList<String>();
ArrayList<String> urlList=new ArrayList<String>();
Context context;
@Override
protected void onPreExecute() {
super.onPreExecute();
}
@Override
protected ArrayList<String> doInBackground(String... urls) {
System.out.println(urls.length);
arrayList.clear();
urlList.clear();
for(int i=0;i<urls.length;i++) {
String url = urls[i];
String finalUrl = search + url + searchAlbum;
try {
//Log.i("URL", finalUrl);
urlList.add(finalUrl);
Document document = Jsoup.connect(finalUrl).get();
String result = document.toString();
//Pattern pattern = Pattern.compile("<img class=\"rg_ic rg_i\" data-src=\"(.*?)\" data-sz");
Pattern newPattern = Pattern.compile("\"ou\":\"(.*?)\",\"ow\"");
//Matcher m = pattern.matcher(result);
Matcher newMatcher = newPattern.matcher(result);
if(newMatcher.find())
arrayList.add(newMatcher.group(1));
} catch (Exception e) {
e.printStackTrace();
}
}
System.out.println("Printing Images");
System.out.println(urlList);
System.out.println(arrayList);
return arrayList;
}
@Override
protected void onPostExecute(ArrayList<String> strings) {
if(context!=null) {
Intent i = new Intent(context,MusicPlayerActivity.class).putExtra("arrayImages",arrayList);
context.startActivity(i);}
else
Log.i("Context","NULL"); //Check why it is null*****
super.onPostExecute(strings);
}
}
输出为 Context:NULL。
为什么是null,我试过做一个MainActivity和Activity类型的变量,但是都没有解决问题。
感谢您的宝贵时间。
最佳答案
您声明了您的 context
变量但从未设置它:
Context context;
是的,当您尝试使用它时,它是 null
。
您应该在尝试使用它之前填充它 - 也许将引用传递给调用 Activity
或类似的。
关于java - 无法从异步任务调用第二个 Activity ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43476488/