我必须做很多AsyncTask不允许的不同事情(或者我不知道该怎么做)。我有一个调用 AsyncTask 方法的类(AsyncTask 是另一个类),我需要传递一个字符串和一个整数,我的 AsyncTask 必须打开一个在线文件并捕获项目并返回一个 String[]。我以为已经解决了我的问题,但它不适用于某些返回android.os.NetworkOnMainThreadException的android操作系统,所以我不知道其他解决方法,也不知道问题是什么。我的代码:
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;
}
问题是
.execute(path,LinesNumber).get();
这使得 UI 线程等待 AsyncTask 的执行,因为 get 是一个阻塞调用。您应该只使用.execute(path,LinesNumber);