2012-01-21 8 views
1

現在、JSync接続からデータを取得するAsyncTaskから値を取得できません。私はいくつかの例を見てきましたが、主に私はAsyncTaskの結果を投稿するだけでした。AsyncTask戻り値

まず、私は唯一の文字列、名前を持っている犬と呼ばれるオブジェクトを持っています。私は犬の名前をサーバーから取得しようとしています。 私の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のようなものを使用してみました( "アウト"、task.d.getName()); しかし、私は "DogName"である犬のデフォルト名を取得し続けています。 AsyncTaskから値を取り出す方法は?

+0

[この回答を見る](http://stackoverflow.com/a/7618705/593709) –

+0

はい、 Log.e( "Dog"、d.getName())は "新しい犬の名前"としてのdognameを表示します –

+0

あなたの助けてくれてありがとうAdil、私はそれを読んだときにあなたを理解していませんでしたが、よく –

答えて

1

OK、ここで何が起こっているものがある:

あなたが参照(C/C++/Objective-Cの中などpointers)としてDogを渡したい、 あなたは他を使用して、元の変数の変化を反映したいです変数。

Javaはオブジェクトを参照渡ししないことに注意してください。Javaはオブジェクトを値渡しします(値は転送され、別のオブジェクトが作成され、値が割り当てられます)。

それで、結果保持オブジェクトを元のオブジェクトの値として再度割り当てることができます。

+0

新しいDataDownloadListener()から結果(オブジェクトデータ)を取得する方法を知っていますか? –

+0

私は[ここ](http://stackoverflow.com/a/7618705/593709)を実装したので、データを 'listener.downloadedSuccessfully(data)'に渡し、実装では私がコメントしたデータを取得します'// handler result'、結果を得ることができます.. :) –

+0

私はまだ少し混乱しています。私の活動では、最後の行の後:getdata.execute( "");私はデータを返したい。上から外に、どのように私はdataDownloadedSuccessfully(オブジェクトデータ)からオブジェクトデータを取得し、それを外側に返すことができますか? –

1

次、

宣言を行うと、あなたの活動のインタフェースを実装し、それがonPostExecute法からのコールバックなどの手法です使用することができます。