Возвращаемое значение с помощью AsyncHttpClient loopj

В настоящее время я использую loopj Android Asynchronous loopj для чтения данных из JSON. Это мой код:

public class HorariosActivity extends AppCompatActivity {

    String hora_inicio;
    String hora_fin;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_horarios);

        obtDatosBD();
    }


    private void obtDatosBD(){    

        final AsyncHttpClient client = new AsyncHttpClient();
        client.get("http://192.168.0.26/WS_policlinica/horas.php", new AsyncHttpResponseHandler() {
            @Override
            public void onSuccess(int statusCode, Header[] headers, byte[] responseBody) {
                if(statusCode==200){

                    try {

                        JSONArray jsonArray = new JSONArray(new String(responseBody));

                        for (int i=0; i<jsonArray.length(); i++){
                            hora_inicio = jsonArray.getJSONObject(i).getString("FISIO_HORA_INICIO");
                            hora_fin = jsonArray.getJSONObject(i).getString("FISIO_HORA_FIN");

                        }

                    }catch (Exception e){
                        e.printStackTrace();
                    }

                }
            }

            @Override
            public void onFailure(int statusCode, Header[] headers, byte[] responseBody, Throwable error) {

            }
        });
    }}}

С помощью этого кода я могу получать и хранить данные в onSuccess, такие как hora_inicio и hora_fin. Но как можно использовать эти значения вне функции onSuccess?

В частности, я хочу использовать эти переменные в своем onCreate, но не могу заставить его работать.


person Mimmetico    schedule 16.05.2018    source источник
comment
Создайте функцию обратного вызова, чтобы вы могли использовать значения после выполнения вашего obtDatosBD метода, например, для обновления пользовательского интерфейса новыми значениями.   -  person Yupi    schedule 16.05.2018


Ответы (1)


Создайте interface, например:

public interface CallbackInterface {
void onDownloadSuccess(JSONArray jsonArray);
void onDownloadFailed(@NonNull Throwable t);
}

Затем внутри вашего Activity, откуда вы загружаете данные, реализуйте этот интерфейс implements CallbackInterface, после чего вам понадобятся ваши override методы onDownloadSuccess и onDownloadFailed. В вашем obtDatosBD() pas в качестве параметра CallbackInterface, например: obtDatosBD(CallbackInterface callbackInterface), когда вы вызываете метод obtDatosBD в onCreate, вам нужно будет указать this в качестве параметра.

Внутри метода onSuccess вы можете передать значения в метод интерфейса:

if(callbackInterface != null)
callbackInterface.onDownloadSuccess(jsonArray);

Следуя тому же самому методу onFailure с onDownloadFailed. Затем в методах, которые вы использовали ранее override, вы сможете получать значения в этом случае JSONArray и делать с ними все, что вам нужно. Я надеюсь, что это поможет, и надеюсь, что это то, что вам нужно.

person Yupi    schedule 16.05.2018