java - 在 AsyncTask 中通过 URL 从服务器获取 XML 并将响应返回给 UI

标签 java android android-asynctask

我尝试在异步任务中从服务器获取 xml,但我的 doInBackground 方法返回 NULL。我的错误在哪里?以及如何将结果发送到 UI?

Here is all classes

我有从服务器获取 xml 的代码:

package classes;

import android.os.AsyncTask;
import android.util.Log;
import org.apache.http.HttpResponse;
import org.apache.http.StatusLine;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.URISyntaxException;
import java.net.URL;

/**
 * Created by Mikhail on 28.03.2015.
 */
public class GetXMLFromServer {

    InputStreamReader reader;

    public GetXMLFromServer(){
        //reader = null;
    }

    public InputStreamReader getReaderWithXML(String url){

        GetXMlTask task = new GetXMlTask();
        task.execute(url);

        return reader;
    }

    public void setReader(InputStreamReader newReader){
        this.reader = newReader;
    }


    class GetXMlTask extends AsyncTask<String, Integer, InputStreamReader>{


        @Override
        protected InputStreamReader doInBackground(String... params) {
            InputStreamReader iStream = null;
            try {
                iStream = new InputStreamReader(getUrlData(params[0]));
            } catch (URISyntaxException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
            return iStream;
        }

        @Override
        protected void onPostExecute(InputStreamReader inputStreamReader) {
            super.onPostExecute(inputStreamReader);
            setReader(inputStreamReader);
        }

        public InputStream getUrlData(String urlString) throws URISyntaxException, IOException {
            DefaultHttpClient client = new DefaultHttpClient();
            HttpGet method = new HttpGet(String.valueOf(new URL(urlString)));
            HttpResponse res = client.execute(method);
            StatusLine status = res.getStatusLine();
            if (status.getStatusCode() != 200) {
                Log.d("APP", "HTTP error.Invalid server status code: " + res.getStatusLine());
            }
            return res.getEntity().getContent();
        }
    }
}

最佳答案

你有一个如何使用异步任务的好例子 here . 请检查!

返回在onPostExecute方法中。

要使用 OnPostExecute 将结果发送到 UI,请调用 UI 类的静态方法。

protected void onPostExecute(Long result) {
     YourUIFragmentORActivity.showResult(result);
     showDialog("Downloaded " + result + " bytes");
 }

关于java - 在 AsyncTask 中通过 URL 从服务器获取 XML 并将响应返回给 UI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29348457/

相关文章:

java - 创建自定义适配器类以避免自定义 ListView

java - TextWatcher.onTextChanged() 如何处理预测文本?

java - 如何将对象从asynctask返回到android中的主类

java - 识别字符串是否包含地理引用

javascript - 如何检查关键字是否存在而不管大小写?

安卓谷歌 Admob : Google Play services resources were not found

android - 如何在android中下载任何文件?

android - 永无止境的后台线程?

java - View.getId 和 R.id.viewLabel 返回不同的值

javascript - 你如何从 Nashorn 获取 JavaScript 堆栈跟踪?