2016-07-23 7 views
0

私はAndroid Studioでアプリケーションを開発しようとしています。私はこの状況で立ち往生しています。 私は、AsyncHttpクライアントを使用して、MySQLデータベースからテーブル名のリストを取得しています。 UIアクティビティから以下の関数を呼び出してSpinnerの値を設定します。しかし、私は値を返すことができません。値は、内部クラスと戻り値の型がvoidであるオーバーライドされたメソッドの内部で取得されます。さらに理解するためにコードを見てください。私が考え内部クラスの返り値型voidのオーバーライドメソッドからの戻り

public void fetchAvailableLocations() 
{ 
    AsyncHttpClient httpClient = new AsyncHttpClient(); 
    RequestParams requestParams = new RequestParams(); 

    String _URL = ""; // Enter URL here 

    byte[] retreivedBytes; 

    httpClient.post(_URL, requestParams, responseHandler, new AsyncHttpResponseHandler() { 


     @Override 
     public void onSuccess(int i, cz.msebera.android.httpclient.Header[] headers, byte[] bytes) { 
      retrievedBytes = bytes; //This is where I'm stuck 

     } 

     @Override 
     public void onFailure(int i, cz.msebera.android.httpclient.Header[] headers, byte[] bytes, Throwable throwable) { 
      //make toasts 
     } 
    }); 
} 

一つの解決策は、UI活動に静的フィールドを作成するバイトのパラメータにパラメータとしてバイトを取り、静的フィールドを割り当て、コールバック関数を作成し、その後からそれを呼び出すことですonSuceedメソッドしかし、このルートは醜いように見えます。もっと簡単な方法はありますか?

私はAndroidプログラミングにとってちょっと新しくて助けてください。

+0

はい、あります。含まれているデータを使用してイベントをonSuccessに投稿するには、[EventBus](https://github.com/greenrobot/EventBus)を使用し、必要な場所でそのイベントを待ち受けるだけで、渡されたデータで何でもしてください。 – Vucko

+0

@Vucko。ソリューションをありがとうございます。しかし、このメソッド(Bと呼ぶ)は、onClickメソッドである別のメソッド(Aと呼ぶ)によって呼び出されます。私はこれを使用する場合は、基本的に別のメソッド(suscriberメソッド、Cなど)を静的フィールドに格納しなければならないので、メソッドAはメソッドBからのコントロールが返ってきたときにメソッドを使用できますか?私が上に書いた他のソリューションと同じではないのですか? 私が間違っている場合は私を修正してください。それは私がこの仕組みがどのように理解されていないことを意味するでしょう。 – Akhil

答えて

1

代わりに使用継承を拡張する:

public class fetchAvailableLocationsClass implements AsyncHttpResponseHandler { 

    public void fetchAvailableLocations() { 
     AsyncHttpClient httpClient = new AsyncHttpClient(); 
     RequestParams requestParams = new RequestParams(); 

     String _URL = ""; // Enter URL here 

     byte[] retreivedBytes; 

     httpClient.post(_URL, requestParams, responseHandler, this); 


     @Override 
     public void onSuccess (int i, cz.msebera.android.httpclient.Header[] headers, byte[] bytes) 
     { 
      retrievedBytes = bytes; //This is where I'm stuck 

     } 

     @Override 
     public void onFailure (int i, cz.msebera.android.httpclient.Header[] headers, 
     byte[] bytes, Throwable throwable){ 
      //make toasts 
     } 

    } 
} 
+0

ありがとうございます。しかし、このメソッドは、onSucessオーバーライドで異なるロジックを使用する他のメソッドを持つクラスの一部です。また、私はレスポンスハンドラを拡張していません。私はそれを直接使用しています。 – Akhil

関連する問題