d.mc2
d.mc2

Reputation: 1129

AsyncTask Return Result

I am currently having trouble getting a value from an AsyncTask that gets data from a JSON connection. I have looked at a few examples, but mostly I have only seen posting results from AsyncTask.

First I have an object called Dog that only has a String, Name. I am trying to get the Name of the dog from the server. Using the following code in my oncreate, I start the DogAsyncTask while assing in an URL called n and a Dog d_in.

    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());

My AsyncTask is as follows:

 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;
    }
}

I tried using something like Log.e("Out", task.d.getName()); but I keep getting the default name of the dog which is "DogName". How to I carry values out of AsyncTask?

Upvotes: 1

Views: 695

Answers (2)

Adil Soomro
Adil Soomro

Reputation: 37729

OK, The thing what is happening here is:

You want to pass Dog as reference (pointers as in C / C++ / Objective-C), and you want to reflect change in original variable using other variable.

but keep in mind that Java doesn't pass object by reference, Java passes objects by value (only value is transferred, another object is created and assigned value).

So what you can do is you can assign that result-holder object again as a value to the original object.

Upvotes: 1

R.daneel.olivaw
R.daneel.olivaw

Reputation: 2679

You can do the following,

Declare and implement an interface in your activity and then use it's methods as a callback from the onPostExecute method.

Upvotes: 1

Related Questions