Java Android asyncTask数组返回null

Java Android asyncTask数组返回null,java,android,nullpointerexception,android-asynctask,Java,Android,Nullpointerexception,Android Asynctask,我试图重写一些代码,因为android在4.0版中指定必须将网络任务放在单独的线程上,我有一段代码运行得很好,但由于我尝试将它放在异步任务中,现在我根本无法让它工作,我设置了异步任务以返回数组,但它不断返回null,这里有什么我看不到的明显的东西吗 package com.imagetest.second; import java.io.IOException; import java.io.InputStream; import java.net.HttpURLConnection; imp

我试图重写一些代码,因为android在4.0版中指定必须将网络任务放在单独的线程上,我有一段代码运行得很好,但由于我尝试将它放在异步任务中,现在我根本无法让它工作,我设置了异步任务以返回数组,但它不断返回null,这里有什么我看不到的明显的东西吗

package com.imagetest.second;

import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;

import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.AsyncTask;
import android.os.Bundle;
import android.widget.Toast;

public class ImagetestActivity extends Activity {
// Elements media;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setContentView(R.layout.main);

    String url = "http://www.goal.com/en-ca/news/4196/brazil/2012/05/23/3123112/ganso-set-for-knee-surgery";

    new getMainImg().execute(url);

}

private class getMainImg extends AsyncTask<String, Void, Document> {

    @Override
    protected Document doInBackground(String... params) {
        Document doc = null;

        try {
            doc = Jsoup.connect(params[0]).get();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return doc;
    }

    @Override
    protected void onPostExecute(Document result) {
        // TODO Auto-generated method stub
        super.onPostExecute(result);

        List<Element> media = new ArrayList<Element>();
        media = result.select("img[src]");

        List<Dog> theImportantUrlArray = new ArrayList<Dog>();
        for (Element src : media) {
            String srcStr = src.attr("src");
            String first7st = srcStr.substring(0, 7);
            if (first7st.equals("http://")) {

                Integer theHeight = getBitmapFromURL(srcStr).getHeight();
                theImportantUrlArray.add(new Dog(srcStr, theHeight));

            }

        }
        Collections.sort(theImportantUrlArray, new Dog());

        Integer thetweetpic = theImportantUrlArray.get(0).getDogAge();
        String theTweetUrl = theImportantUrlArray.get(0).getDogName();

        Toast.makeText(ImagetestActivity.this,
                thetweetpic.toString() + " " + theTweetUrl,
                Toast.LENGTH_LONG).show();
    }

}

public static Bitmap getBitmapFromURL(String src) {
    try {
        URL url = new URL(src);
        HttpURLConnection connection = (HttpURLConnection) url
                .openConnection();
        connection.setDoInput(true);
        connection.connect();
        InputStream input = connection.getInputStream();
        Bitmap myBitmap = BitmapFactory.decodeStream(input);
        return myBitmap;
    } catch (IOException e) {
        e.printStackTrace();
        return null;
    }
}

public class Dog implements Comparator<Dog>, Comparable<Dog> {
    private String theUrl;
    private int height;

    Dog() {
    }

    Dog(String n, int a) {
        theUrl = n;
        height = a;
    }

    public String getDogName() {
        return theUrl;
    }

    public int getDogAge() {
        return height;
    }

    // Overriding the compareTo method
    public int compareTo(Dog d) {
        return (this.theUrl).compareTo(d.theUrl);
    }

    // Overriding the compare method to sort the age
    public int compare(Dog d, Dog d1) {
        return d1.height - d.height;
    }
}

}
package com.imagetest.second;
导入java.io.IOException;
导入java.io.InputStream;
导入java.net.HttpURLConnection;
导入java.net.URL;
导入java.util.ArrayList;
导入java.util.Collections;
导入java.util.Comparator;
导入java.util.List;
导入org.jsoup.jsoup;
导入org.jsoup.nodes.Document;
导入org.jsoup.nodes.Element;
导入org.jsoup.select.Elements;
导入android.app.Activity;
导入android.graphics.Bitmap;
导入android.graphics.BitmapFactory;
导入android.os.AsyncTask;
导入android.os.Bundle;
导入android.widget.Toast;
公共类ImagetestActivity扩展了活动{
//媒体元素;
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
字符串url=”http://www.goal.com/en-ca/news/4196/brazil/2012/05/23/3123112/ganso-set-for-knee-surgery";
新建getMainImg().execute(url);
}
私有类getMainImg扩展异步任务{
@凌驾
受保护文档doInBackground(字符串…参数){
单据单据=空;
试一试{
doc=Jsoup.connect(参数[0]).get();
}捕获(IOE异常){
//TODO自动生成的捕捉块
e、 printStackTrace();
}
退货单;
}
@凌驾
受保护的void onPostExecute(文档结果){
//TODO自动生成的方法存根
super.onPostExecute(结果);
List media=new ArrayList();
媒体=结果。选择(“img[src]”;
列出ImportantUrlArray=new ArrayList();
对于(元素src:media){
字符串srcStr=src.attr(“src”);
字符串first7st=srcStr.substring(0,7);
if(first7st.equals(“http:/”){
整数theHeight=getBitmapFromURL(srcStr).getHeight();
添加(新狗(srcStr,theHeight));
}
}
sort(theImportantUrlArray,newdog());
整数thetweetpic=theImportantUrlArray.get(0.getDoAge();
字符串theTweetUrl=theImportantUrlArray.get(0.getDogName();
Toast.makeText(ImagetestActivity.this,
thetweetpic.toString()+“”+theTweetUrl,
Toast.LENGTH_LONG).show();
}
}
公共静态位图getBitmapFromURL(字符串src){
试一试{
URL=新URL(src);
HttpURLConnection连接=(HttpURLConnection)url
.openConnection();
connection.setDoInput(true);
connection.connect();
InputStream输入=连接。getInputStream();
位图myBitmap=BitmapFactory.decodeStream(输入);
返回我的位图;
}捕获(IOE异常){
e、 printStackTrace();
返回null;
}
}
公共类狗实现比较器,可比较{
私有字符串URL;
私人内部高度;
狗(){
}
狗(字符串n,整数a){
URL=n;
高度=a;
}
公共字符串getDogName(){
返回URL;
}
public int getDogAge(){
返回高度;
}
//重写compareTo方法
公共内部比较(狗d){
return(this.theUrl).compareTo(d.theUrl);
}
//重写compare方法以对年龄进行排序
公共整数比较(狗d、狗d1){
返回d1.height-d.height;
}
}
}

在调用select后是
结果
为空,还是
媒体
已满?哪一个数组为空以及何时?我得到一个字符串越界异常05-24 00:19:24.959:E/AndroidRuntime(608):java.lang.StringIndexOutOfBoundsException:length=0;regionStart=0;regionLength=7在哪条线上?我很想帮助你,但我无法单步查看你的代码,因此我需要更多信息。我如何找到该行?我试过几次学习android调试,但都没能很好地理解它,它不是android调试,而是Java调试(与大多数C风格语言基本相同)。我不需要知道行号,我需要知道你调用了什么方法导致了崩溃。您可以通过在方法中设置断点并一次单步执行一行来解决这个问题。在这方面,听起来您需要学习更多关于一般调试技巧的知识。除非你能把问题的范围缩小很多,否则你在StackOverflow上不会有太多的运气得到答案。