我正在尝试使用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类中使用它?
答案 0 :(得分:1)
在developer documentation上有一个非常彻底的AsyncTask解释。
基本上,您是AsyncTask的子类,定义了您将使用的参数类型。您的HTTPGet代码将进入doInBackground()
方法。要运行它,您需要创建AsyncTask类的新实例并调用execute()
。