2016-07-23 117 views
0

我试图在Android Studio中开发应用程序。我陷入这种情况。 我正在使用AsyncHttp客户端从MySQL数据库中获取表名列表。我从UI活动调用下面的函数来填充Spinner中的值。但是我无法返回values.The值在内部类中获取,并在返回类型为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

是的,有。使用[EventBus](https://github.com/greenrobot/EventBus)在'onSuccess'中发布一个带有所包含数据的事件,只需在需要的地方倾听该事件,并根据传递的数据做任何事情。 – 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