Возвращаемое значение с помощью AsyncHttpClient loopj - PullRequest
0 голосов
/ 16 мая 2018

В настоящее время я использую 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, но не могу заставить его работать.

1 Ответ

0 голосов
/ 16 мая 2018

Создайте 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 и делать с ними все, что вам нужно. Я надеюсь, что это поможет и надеюсь, что это то, что вам нужно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...