Java 使用异步任务将xml下载到字符串[]

Java 使用异步任务将xml下载到字符串[],java,android,android-asynctask,Java,Android,Android Asynctask,因此,我试图获得一个异步任务,以获取三个不同的XML文件。问题是,我不知道如何让他们退出异步任务 有一个GetXML类: import java.io.BufferedReader; import java.io.InputStreamReader; import java.net.URL; import java.net.URLConnection; import android.os.AsyncTask; public class GetXML extends AsyncTask<

因此,我试图获得一个异步任务,以获取三个不同的XML文件。问题是,我不知道如何让他们退出异步任务

有一个GetXML类:

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.URLConnection;

import android.os.AsyncTask;

public class GetXML extends AsyncTask<String,Integer,String[]> {
@Override
protected String[] doInBackground(String... params) {
    // TODO Auto-generated method stub

    String[] retreiver = new String[3];

    try {
        retreiver = getXMLs();
        return retreiver;
    } catch (Exception e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    for(int i=0;i<retreiver.length;i++){
        retreiver[i]="<object_list><object><title>ERROR</title></object></object_list>";
    }
    return retreiver;
}


 private static String[] getXMLs() throws Exception {
        String[] urls = new String[3];

        urls[0] = "http://www.parkland.hostoi.com/XML_Files/indoor.xml";
        urls[1] = "http://www.parkland.hostoi.com/XML_Files/outdoor.xml";
        urls[2] = "http://www.parkland.hostoi.com/XML_Files/events.xml";

        BufferedReader reader = null;
        URLConnection uc = null;

        int i = 0;

        for(i=0;i<urls.length;i++){

            try {
                URL url = new URL(urls[i]);
                uc = url.openConnection();
                uc.connect();
                reader = new BufferedReader(new InputStreamReader(uc.getInputStream()));
                StringBuffer buffer = new StringBuffer();
                int read;
                char[] chars = new char[1024];
                while ((read = reader.read(chars)) != -1)
                    buffer.append(chars, 0, read);

                urls[i]= buffer.toString();
                } 
                finally {
                    if (reader != null)
                        reader.close();
                }
        }
        return urls;
 }
但所有这些都会导致崩溃、超时或其他情况。。。。LogCat中未显示任何错误


我只是不知道。这是我的第一个android项目,它让我非常痛苦。

你的任务没有执行,因为你从来没有执行过

需要打电话吗

 taskA .execute();
请参阅下文:

在主要活动中:

GetXML taskA = new GetXML();
taskA.execute();
您的任务是:

public class GetXML extends AsyncTask<String,Integer,String[]> {
        @Override
        protected String[] doInBackground(String... params) {
            // TODO Auto-generated method stub

            String[] retreiver = new String[3];

            try {
                retreiver = getXMLs();
                return retreiver;
            } catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            for(int i=0;i<retreiver.length;i++){
                retreiver[i]="<object_list><object><title>ERROR</title></object></object_list>";
            }
            return retreiver;
        }


        private String[] getXMLs() throws Exception {
            String[] urls = new String[3];

            urls[0] = "http://www.parkland.hostoi.com/XML_Files/indoor.xml";
            urls[1] = "http://www.parkland.hostoi.com/XML_Files/outdoor.xml";
            urls[2] = "http://www.parkland.hostoi.com/XML_Files/events.xml";

            BufferedReader reader = null;
            URLConnection uc = null;

            int i = 0;

            for(i=0;i<urls.length;i++){

                try {
                    URL url = new URL(urls[i]);
                    uc = url.openConnection();
                    uc.connect();
                    reader = new BufferedReader(new InputStreamReader(uc.getInputStream()));
                    StringBuffer buffer = new StringBuffer();
                    int read;
                    char[] chars = new char[1024];
                    while ((read = reader.read(chars)) != -1)
                        buffer.append(chars, 0, read);

                    urls[i]= buffer.toString();
                } 
                finally {
                    if (reader != null)
                        reader.close();
                }
            }
            return urls;
        }

        @Override
        protected void onPostExecute(String[] result) {
            // TODO Auto-generated method stub
            super.onPostExecute(result);
            String[] xmls = result;
        }
    }
public类GetXML扩展异步任务{
@凌驾
受保护字符串[]doInBackground(字符串…参数){
//TODO自动生成的方法存根
String[]retreiver=新字符串[3];
试一试{
retreiver=getXMLs();
退货回收;
}捕获(例外e){
//TODO自动生成的捕捉块
e、 printStackTrace();
}
对于(int i=0;i您可以尝试以下方法:

String[] xmls = new String[3];

    GetXML taskA = new GetXML();
    try {
        xmls = taskA.execute().get();
    } catch (InterruptedException e1) {
        // TODO Auto-generated catch block
        e1.printStackTrace();
    } catch (ExecutionException e1) {
        // TODO Auto-generated catch block
        e1.printStackTrace();
    }

在中可以找到一个很好的例子

您需要对任务调用
execute()
方法,而不是
get()


我还建议至少在您的
AsyncTask

中实现
onPostExecute()
方法。我已经更改了清单,但感谢您发布并留下最佳实践。
 <uses-permission android:name="android.permission.INTERNET"/>
String[] xmls = new String[3];

    GetXML taskA = new GetXML();
    try {
        xmls = taskA.execute().get();
    } catch (InterruptedException e1) {
        // TODO Auto-generated catch block
        e1.printStackTrace();
    } catch (ExecutionException e1) {
        // TODO Auto-generated catch block
        e1.printStackTrace();
    }