Java Android asyncTask数组返回null
我试图重写一些代码,因为android在4.0版中指定必须将网络任务放在单独的线程上,我有一段代码运行得很好,但由于我尝试将它放在异步任务中,现在我根本无法让它工作,我设置了异步任务以返回数组,但它不断返回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
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上不会有太多的运气得到答案。