AsyncTask 静态,不同类型的参数和返回值.Android.osNetworkthreadException.



我必须做很多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);

最新更新