AsyncTask返回结果

时间:2012-01-21 08:24:20

标签: android android-asynctask

我目前无法从AsyncTask获取一个从JSON连接获取数据的值。我看了几个例子,但大多数时候我只看到AsyncTask发布的结果。

首先,我有一个名为Dog的对象,它只有一个String,Name。我想从服务器上获取狗的名字。 在我的oncreate中使用以下代码,在启动DogAsyncTask时启动一个名为n和Dog d_in的URL。

    Dog d_in = new Dog("DogName");
    DogAsyncTask task = new DogAsyncTask(d_in);
    String n = "www.dog.com";
    task.execute(n);
    Log.e("Out", d_in.getName());

我的AsyncTask如下:

 private class DogAsyncTask extends AsyncTask<String, Void, String> {

    Dog d = null;

    DogAsyncTask(Dog d){
        this.d = d;
    }

    ProgressDialog mProgressDialog;
    @Override
    protected void onPostExecute(String result) {
        d.setName(result);
        Log.e("Dog", d.getName());
        mProgressDialog.dismiss();
    }

    @Override
    protected void onPreExecute() {
        mProgressDialog = ProgressDialog.show(AsyncTestActivity.this, "Loading...", "Data is Loading...");
    }

    @Override
    protected String doInBackground(String... name) {
        //Go to url = name and then gets String below.
        String outfromjson = "new dog name";  //This will be a function that gets a name from JSON
        return outfromjson;
    }
}

我尝试过使用类似的东西     Log.e(“Out”,task.d.getName()); 但我一直得到狗的默认名称“DogName”。如何从AsyncTask中携带值?

2 个答案:

答案 0 :(得分:1)

您可以执行以下操作,

在您的活动中声明并实现一个接口,然后将其方法用作onPostExecute方法的回调。

答案 1 :(得分:1)

好的,这里发生的事情是:

您想传递Dog作为参考(pointers,如在C / C ++ / Objective-C中), 并且您希望使用其他变量反映原始变量的变化。

但请记住,Java不会通过引用传递对象,Java会按值传递对象(只传输值,创建另一个对象并赋值)。

所以你可以做的是你可以再次将结果持有者对象作为一个值分配给原始对象。