AsyncTask Вернуться Результат - PullRequest
1 голос
/ 21 января 2012

В настоящее время у меня возникают проблемы при получении значения из AsyncTask, который получает данные из соединения JSON. Я рассмотрел несколько примеров, но в основном я видел только публикацию результатов из AsyncTask.

Сначала у меня есть объект с именем Dog, который имеет только строку, имя. Я пытаюсь получить имя собаки с сервера. Используя следующий код в моем oncreate, я запускаю DogAsyncTask, вводя URL с именем n и 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());

Моя 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 ]

1 голос
/ 21 января 2012

ОК, то, что здесь происходит, это:

Вы хотите передать Dog как ссылку (pointers как в C / C ++ / Objective-C), и вы хотите отразить изменение в исходной переменной, используя другую переменную.

но имейте в виду, что Java не передает объект по ссылке, Java передает объекты по значению (передается только значение, создается другой объект и присваивается значение).

Итак, вы можете снова назначить объект-держатель результата в качестве значения для исходного объекта.

1 голос
/ 21 января 2012

Вы можете сделать следующее:

Объявить и реализовать интерфейс в своей деятельности, а затем использовать его методы в качестве обратного вызова из метода onPostExecute.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...