无法从Asynctask调用第二个活动



我需要从onsynctask的onpostexecute((方法调用新活动,但上下文返回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);
  }
}

输出是上下文:null。

为什么它是零的,我尝试制作类型的主动脉和活动的变量,但两者都无法解决问题。

谢谢您的时间。

您声明您的context变量,但从未设置它:

Context context;

是的,尝试使用时是null

您应该在尝试使用它之前将其填充 - 也许将引用到调用Activity或类似。

将此ImagedownloadTask放入活动中,然后您可以使用以下代码

调用它
 new MyTask().execute(urls);

在您的ImagedownLoadTask上,将OnPostexecute on onpostexecute函数更改为

 @Override
        protected void onPostExecute(ArrayList<String> strings) {
            super.onPostExecute(strings);
            Intent i = new Intent(YourActivityName.this, MusicPlayerActivity.class).putExtra("arrayImages", strings);
            startActivity(i);

        }

}}

最新更新