1

我在下面写了一个异步任务

   public class DownloadTask extends AsyncTask<String, Void, String>{

        @Override
        protected String doInBackground(String... urls) {
            String result = "";
            HttpsURLConnection urlConnection = null;
            try {
                URL url = new URL(urls[0]);
                urlConnection = (HttpsURLConnection)url.openConnection();
                InputStream inputStream = urlConnection.getInputStream();
                InputStreamReader reader = new InputStreamReader(inputStream);
                int data = reader.read();
                while (data != -1){
                    char currentData = (char)data;
                    result+=currentData;
                    data = reader.read();
                }
                Log.i("Downloaded data",result);
            }catch (Exception e){
                e.printStackTrace();
            }

            return result;
        }
    }

这里 AsyncTask 返回一个string值。在onCreate我调用这个 AsyncTask 的对象的方法中

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        listView = (ListView) findViewById(R.id.listView);
        titles = new ArrayList<String>();
        arrayAdapter =new ArrayAdapter(MainActivity.this,android.R.layout.simple_list_item_1,titles);
        listView.setAdapter(arrayAdapter);
        //To get json data
        DownloadTask task  = new DownloadTask();
        try {
            task.execute("https://hacker-news.firebaseio.com/v0/topstories.json?print=pretty");
        }catch (Exception e){
            e.printStackTrace();
        }

    }

此代码可以正常工作。但我怀疑我们是否需要一个字符串类型的变量来捕获 AsyncTask 的返回值。这里没有使用变量,它只是写成task.execute("https://hacker-news.firebaseio.com/v0/topstories.json?print=pretty");. 为什么这不会引发错误。谁能解释一下。我是安卓新手。

4

1 回答 1

2

的返回值是文档AsyncTask.execute(Params... params)中所述的任务本身,以便您可以保留对它的引用。如果您只是忽略返回值,则不会导致错误。

一个AsyncTask异步工作。这就是您稍后onPostExecute(Result result)AsyncTask. 此方法在 UI 线程上运行,因此您可以在那里更新视图等。

于 2020-04-16T15:17:41.787 回答