我必须做很多AsyncTask不允许的事情(或者我不知道该怎么做)。我有一个调用AsyncTask方法的类(AsyncTask是另一个类),我需要传递一个String和一个Integer,我的AsyncTask必须打开一个在线文件并捕获项并返回一个String []。我想要解决我的问题,但它不能与一些Android操作系统返回android.os.NetworkOnMainThreadException,所以我不知道其他方式解决,我不知道是什么问题。我的代码:
public class Methods extends Activity{
static String url = "http://www.MYADDRESS.com/";
static String ConfPath = new String();
static public String[] Read(String path, int LinesNumber) throws InterruptedException{
try {
return new AsyncTask<Object, Integer, String[]>(){
@Override
public String[] doInBackground(Object... params) {
try {
String[] menus = new String [(int) params[1]];
BufferedReader reader = new BufferedReader(new InputStreamReader(new URL(url+params[0]).openStream()));
String line = reader.readLine();
for (int k = 0; k < (int) params[1]; k++) {
menus[k] = line;
line = reader.readLine();
}
return menus;
}
catch (IOException e){
e.printStackTrace();
}
return null;
}
}.execute(path,LinesNumber).get();
} catch (ExecutionException e) {
e.printStackTrace();
}
return null;
}
答案 0 :(得分:1)
问题是
.execute(path,LinesNumber).get();
使得UI线程等待执行AsyncTask,因为get是一个阻塞调用。您应该只使用.execute(path,LinesNumber);