Java Android AsyncHttpClient convert byte [] responseBody для InputStream


1 принят

Потому 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, который делает все выше. Это личное предпочтение.

Java, Android,

java,android,

0

Ответов: 1


1 принят

Потому 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, который делает все выше. Это личное предпочтение.

Java, Android,
Похожие вопросы