将字符串从AsyncTask传递到另一个活动

时间:2013-01-16 23:39:59

标签: android android-asynctask httpclient

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

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

最后一件事,请原谅我可怜的英语,不幸的是,我一定不是英语母语人士,你必须看到。

事先,非常感谢!

真诚地:)

2 个答案:

答案 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。如果您的AsyncTaskActivity的内部类,那么您可以将结果设置为Activity中的字段变量。否则,您可以从Activity调用onPostExecute()中的函数来执行您想要的数据操作。

另外,你的英语不好真的不错:)。