Java 使用异步任务将xml下载到字符串[]
因此,我试图获得一个异步任务,以获取三个不同的XML文件。问题是,我不知道如何让他们退出异步任务 有一个GetXML类: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<
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();
}