制作异步HTTPGet类

时间:2014-11-05 16:29:28

标签: java android android-asynctask androidhttpclient

我正在尝试使用HTTPGet从服务器检索字符串,然后我想将该字符串设置为MainActivity类中的TextView。这是我试图用来实现这一目标的类。 (我没有在这里包含导入,但它们在实际的类中。我还保留了我在这里使用的URL,但实际的URL在我的班级中)

public class GetFromServer {

public String getInternetData() throws Exception {
    BufferedReader in = null;
    String data = null;
    try{
        HttpClient client = new DefaultHttpClient();
        URI website = new URI("URL withheld");
        HttpGet request = new HttpGet();
        request.setURI(website);
        HttpResponse response = client.execute(request);
        in = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));
        StringBuffer sb = new StringBuffer("");
        String l = "";
        String nl = System.getProperty("line.separator");
        while ((l = in.readLine()) !=null){
            sb.append(l + nl);
        }
        in.close();
        data = sb.toString();
        return data;
    }finally {
        if (in != null){
            try{
                in.close();
                return data;
            }catch (Exception e){
                e.printStackTrace();
            }
        }
    }
}
}

然后在我的MainActivity类中使用它:

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    textView = (TextView) findViewById(R.id.textView);

    GetFromServer test = new GetFromServer();
    String returned = null;
    try {
        returned = test.getInternetData();
        textView.setText(returned);
    } catch (Exception e) {
        e.printStackTrace();
    }

}

这不起作用,因为我得到android.os.NetworkOnMainThreadException,这意味着我必须使用AsyncTask。我要问的是如何将此类转换为AsyncTask以便它可以工作?一旦它是AsyncTask,我如何在我的MainActivity类中使用它?

1 个答案:

答案 0 :(得分:1)

developer documentation上有一个非常彻底的AsyncTask解释。

基本上,您是AsyncTask的子类,定义了您将使用的参数类型。您的HTTPGet代码将进入doInBackground()方法。要运行它,您需要创建AsyncTask类的新实例并调用execute()