0

我正在尝试使用 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 的基础知识,我没有检查互联网连接或类似的东西,我在清单上添加了使用互联网的权限(显然

(请放纵一点,因为这是我的第一个应用程序之一)

最后一件事,请原谅我糟糕的英语,不幸的是,我不是你必须看到的以英语为母语的人。

提前,非常感谢!

真挚地 :)

4

2 回答 2

4

最简单的方法是通过构造函数将调用活动传递给 AsyncTask 并创建一个方法,该方法将结果作为活动本身的参数。

private Activity mActivity;

public AsyncTaskGet(Activity activity) {
    mActivity = activity;
}

protected void onPostExecute(String result) {
    mActivity.takeItBack(result);           
}

有一些限制:当前代码仅适用于 AsyncTask 和 Activity 之间的 1 对 1 关系,这意味着私有成员变量类型必须是您调用它的 Activity。如果你不希望你需要实现一个接口:

// 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);           
    }
}
于 2013-01-16T23:51:28.680 回答
2

您已经将结果onPostExecute()作为String. 如果您AsyncTask是您的内部类,Activity那么您可以将结果设置为Activity. 否则,您可以在Activityfrom中调用一个函数onPostExecute()来对数据执行您想要的操作。

另外,你的英语不好真的一点也不差:)

于 2013-01-16T23:46:26.467 回答