我正在尝试使用HTTPClient使用AsyncTask获取网站的html代码,并将代码传回我的主Activity。
我使用此代码(尝试)执行此操作:
public class AsyncTaskGet extends AsyncTask<String, String, String>{
String result;
InputStream in;
protected String doInBackground(String... params) {
try
{
HttpClient httpClient = new DefaultHttpClient();
HttpGet httpRequest = new HttpGet("http://www.google.fr");
HttpResponse response = httpClient.execute(httpRequest);
try{
BufferedReader reader = new BufferedReader(new InputStreamReader(null, result), 8);
StringBuilder sb = new StringBuilder();
String line = null;
while ((line = reader.readLine()) != null) {
sb.append(line + "\n");
}
if (response != null) {
in = response.getEntity().getContent();
}
in.close();
result = sb.toString();
}catch (Exception e) {
Log.e("log_tag", "Error converting result " + e.toString());
}
}catch(IOException e){
e.printStackTrace();
}
return result;
}
@Override
protected void onPostExecute(String result) {
//Here is one of my problem, I don't know how to get the returned value result as a string.
}
}
这是我的AsyncTaskGet,因为我尝试了许多徒劳无功的尝试,除了这部分,我删除了主要活动中的所有代码。
new AsyncTaskGet().execute();
所以基本上,我想做的是将结果作为字符串返回到我的主要活动上,以便在TextView中显示它。 现在我希望我的应用程序很简单,所以我可以理解使用AsyncTasks的基础知识,我没有检查互联网连接或类似的东西,我在清单上添加权限使用互联网(显然
(因为它是我的第一个应用程序之一,请放一点)
最后一件事,请原谅我可怜的英语,不幸的是,我一定不是英语母语人士,你必须看到。
事先,非常感谢!
真诚地:)
答案 0 :(得分:4)
最简单的方法是通过构造函数将调用活动传递给AsyncTask,并创建一个方法,将结果作为活动本身的参数。
private Activity mActivity;
public AsyncTaskGet(Activity activity) {
mActivity = activity;
}
protected void onPostExecute(String result) {
mActivity.takeItBack(result);
}
有一些限制:当前代码只适用于AsyncTask和Activity之间的1对1关系,这意味着私有成员变量类型必须是您调用它的活动。如果您不希望需要实现接口:
// interface
public interface AsyncTaskCallback {
void takeItBack(String result);
}
// activity
public MyActivity implements AsyncTaskCallback {
@Override
public void takeItBack(String result) {
// do something
}
}
// AsyncTask
public class AsyncTaskGet extends AsyncTask<String, String, String> {
private AsyncTaskCallback mCallback;
public AsyncTaskGet(AsyncTaskCallback callback) {
mCallback= callback;
}
protected void onPostExecute(String result) {
mCallback.takeItBack(result);
}
}
答案 1 :(得分:2)
您已将结果作为onPostExecute()
传递给String
。如果您的AsyncTask
是Activity
的内部类,那么您可以将结果设置为Activity
中的字段变量。否则,您可以从Activity
调用onPostExecute()
中的函数来执行您想要的数据操作。
另外,你的英语不好真的不错:)。