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

时间:2015-01-05 11:19:04

标签: java android android-asynctask

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

1 个答案:

答案 0 :(得分:1)

问题是

.execute(path,LinesNumber).get();

使得UI线程等待执行AsyncTask,因为get是一个阻塞调用。您应该只使用.execute(path,LinesNumber);