请教大家一些问题在看安卓官网教程,连接至网络这一节。这个教程就是教你怎么在工作线程下东西然后显示在Activity上。它自建DownloadCallback抽象类,然后在MainActivity中实现这个接口:
MainActivity extends Activity implements DownloadCallback接着创建无头Fragment在其内创建AsyncTask来下载。下载时通过回调函数,让主线程刷新界面。而这个回调类(DownloadCallback实现),不是通过构造方法或者某种Set方法送给Fragment的,而是在Fragment内部onAttach (Context context)这个方法中,来了一句:
mCallback=(DownloadCallback)context;这是什么情况,不太懂。自己查了下,这个context其实就是MainActivity,为什么context会是MainActivity,最重要的是为什么可以把MainActivity强行转换成回调对象。还有就是AsyncTask的doInBackground方法刷新进度,貌似是在工作线程里回调了MainActivity的函数,这样回调函数不就在工作线程中执行了吗?怎么做到的?

解决方案 »

  1.   

    教程地址:
    https://developer.android.google.cn/training/basics/network-ops/connecting
      

  2.   

    有疑问的代码:
     @Override
        public void onAttach(Context context) {
            super.onAttach(context);
            // Host Activity will handle callbacks from task.
            mCallback = (DownloadCallback<String>) context;
        }还有一段:
      connection.connect();
            publishProgress(DownloadCallback.Progress.CONNECT_SUCCESS);
            int responseCode = connection.getResponseCode();
            if (responseCode != HttpsURLConnection.HTTP_OK) {
                throw new IOException("HTTP error code: " + responseCode);
            }
            // Retrieve the response body as an InputStream.
            stream = connection.getInputStream();
            publishProgress(DownloadCallback.Progress.GET_INPUT_STREAM_SUCCESS, 0);
            if (stream != null) {
                // Converts Stream to String with max length of 500.
                result = readStream(stream, 500);
            }
      

  3.   

    首先你的MainActivity可以强转成DownloadCallback这能理解吧,MainActivity也是context也能理解吧。
    而onAttach这个方法就是fragmananger把MainActivity传进去了而已,并且show之后就一定会立即调用的,这个不用太深究。教程只是告诉你这样能写,真正实战如果这样写最后你会疯的,太乱了。
    你可以看看这个:https://blog.csdn.net/weimingjue/article/details/88528373