2012-01-21 4 views
1

У меня возникла проблема с получением значения из AsyncTask, которое получает данные из JSON-соединения. Я просмотрел несколько примеров, но в основном я видел результаты публикации AsyncTask.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?

+0

[Посмотрите на этот ответ] (http://stackoverflow.com/a/7618705/593709) –

+0

да; Log.e («Собака», d.getName()) показывает догма как «новое имя собаки» –

+0

Спасибо за вашу помощь. Адил, я не понял вас, когда я прочитал его раньше, но после того, как он его проработал Что ж. –

ответ

1

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

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

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

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

+0

Вы знаете, как получить результат (данные объекта) из нового DataDownloadListener()? –

+0

как я реализовал [здесь] (http://stackoverflow.com/a/7618705/593709), я передаю данные в 'listener.downloadedSuccessfully (data)' и в реализации получаю эти данные, где я комментировал '// обработчик result', вы можете получить результат там .. :) –

+0

Я все еще немного смущен. В моей деятельности после последней строки: getdata.execute ("") ;, я хочу вернуть данные; вверх из функции, как я могу получить данные объекта из DataDownloadedSuccessfully (данные объекта) и вернуть его наружу? –

1

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

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

Смежные вопросы