Потому is[0]
что асинхронный вызов return is[0]
является синхронным. Это означает, что это значение is[0]
равно null, пока асинхронный вызов еще не выполнен. Один из способов решения - сделать sendGetDataRequest
возврат void
и вместо этого принять обратный вызов, например
public static void sendGetDataRequest(final YourCallback callback, ...)
Создайте новый интерфейс с именем YourCallback
public interface YourCallback{
void onSuccess(String string);
void failure();
}
И использовать этот обратный вызов внутри асинхронного метода
client.post(context,url,values , new AsyncHttpResponseHandler(Looper.getMainLooper()) {
@Override
public void onSuccess(int statusCode, Header[] headers, byte[] responseBody) {
callback.onSuccess(convertStreamToString(is[0]));
}
@Override
public void onFailure(int statusCode, Header[] headers, byte[] responseBody, Throwable error) {
callback.onFailure();
}
}
Наконец, вы вызываете свой статический метод следующим образом:
sendGetDataRequest(new YourCallback(){/* Override the methods */}, ...);
Кстати, вы также можете использовать AsyncTask
пакет android, который делает все выше. Это личное предпочтение.