Невозможно сохранить данные ответов, опубликованные c для доступа извне android - PullRequest
0 голосов
/ 21 апреля 2020

Я могу получить очень странную проблему в моем проекте. Я могу получить ответ от volley через inte rnet, и после reposne я хочу сохранить его в sharedpref, но проблема заключается в том, что когда я получаю ответ и обнаруживаюсь в функцииnexse, тогда он показывает правильные данные, но когда я использовал для сохраните его вне функции ответа sharedpref, он дает 0. Я объявил строку publi c и начало класса, но безуспешно. Я очень странный, в чем проблема.

SharedPreferences savelogin = getSharedPreferences("login",MODE_PRIVATE);
                                final SharedPreferences.Editor slogin = savelogin.edit();


                                String url = "https://datafinderdatabase.xyz/dfapi/FetchId.php?username="+fuser;
                                StringRequest stringRequest = new StringRequest(Request.Method.GET, url, new Response.Listener<String>() {
                                    @Override
                                    public void onResponse(String response) {
                                       userid = response.toString();

                                    }
                                }, new Response.ErrorListener() {
                                    @Override
                                    public void onErrorResponse(VolleyError error) {
                                        Toasty.error(getApplicationContext(), "Network Issue", Toast.LENGTH_SHORT).show();
                                    }
                                });

                                RequestQueue requestQueue = Volley.newRequestQueue(getApplicationContext());
                                requestQueue.add(stringRequest);

                                slogin.putString("username",fuser);
                                slogin.putString("password",fpass);
                                slogin.putString("userid",userid);
                                slogin.commit();

Ответы [ 2 ]

0 голосов
/ 21 апреля 2020

Эти:

slogin.putString("username",fuser);
slogin.putString("password",fpass);
slogin.putString("userid",userid);
slogin.commit();

должны быть внутри этого:

@Override
public void onResponse(String response) {
userid = response.toString();
//here

}
0 голосов
/ 21 апреля 2020

Это потому, что ваш вызов API является асинхронным. Следовательно, полученный вами результат может быть обработан после завершения этой функции. Чтобы решить эту проблему, вы можете использовать интерфейсный подход, объясненный здесь для аналогичной проблемы: дождитесь, пока firebase получит данные

ИЛИ: вам нужно сохранить переменную в общих настройках внутри onResponse функция.

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