آموزش جاوا و اندروید

یادداشت های یک برنامه نویس معمولی

آموزش جاوا و اندروید

یادداشت های یک برنامه نویس معمولی

طبقه بندی موضوعی

ریکوئست های sequential در اندروید

دوشنبه, ۶ شهریور ۱۴۰۲، ۰۵:۲۱ ب.ظ

برای اینکه دو تا ریکوئست پشت سر هم بزنیم، میشه از اپراتور flatMap توی rx استفاده کرد. آبجکتی که روی آن flatMap رو صدا میکنیم، باید observable باشه.

برای این کار خروجی دو تا ریکوئست رو از نوع observable تعریف میکنیم. روی ریسپانس ریکوئست اول flatMap میزنیم. flatMap توی ورودی یه فانکشن میگیره. ریسپانس ریکوئست اول ورودی این فانکشن هست. در واقع در بادی این فانکشن میشه روی ریسپانس ریکوئست اول manipulate انجام داد. در نهایت ریکوئست دوم رو return میکنیم و subscribe انجام میدیم. اگر ریکوئست اول به ارور بخوره، دومی انجام نمیشه و میره توی onError.

 

مثال:

webService.rxLogin(user)
                .flatMap(loginResponse -> {
                    User loggedUser = new User();

                    if (loginResponse != null && loginResponse.getResult() == (CONSTANT.SUCCESSFUL_RESPONSE) && loginResponse.getContent() != null) {
                        Gson gson = new Gson();

                        JsonObject jsonObject = gson.toJsonTree(loginResponse.getContents()).getAsJsonArray().get(0).getAsJsonObject();
                        Log.d(TAG, "jsonObject: " + jsonObject);
                        Application.token = jsonObject.get("accessToken").getAsString();
                        Application.refreshToken = jsonObject.get("refreshToken").getAsString();
                        Log.d(TAG, "token  : " + Application.token);
                        Log.d(TAG, "refreshToken  : " + Application.refreshToken);

                        User userContent = gson.fromJson(gson.toJson(loginResponse.getContent()), User.class);
                        Log.d(TAG, "userContent: " + userContent);

                        loggedUser.setName(userContent.getName());
                        loggedUser.setLastName(userContent.getLastName());
                        loggedUser.setCellNumber(userContent.getCellNumber());
                        loggedUser.setEmail(userContent.getEmail());
                        loggedUser.setImgUrl(userContent.getImgUrl());
                        loggedUser.setUserName(userContent.getUserName());
                        loggedUser.setId(userContent.getId());
                        loggedUser.setRegisterType(userContent.getRegisterType());
                        loggedUser.setRoles(userContent.getRoles());
                        loggedUser.setBooks(userContent.getBooks());
                        loggedUser.setPassword(userContent.getPassword());
                        Application.setUser(loggedUser);
//                        PrefHelper.INSTANCE.writeString("user", user.toString());
                        Log.d(TAG, "onResponse: "+PrefHelper.INSTANCE.readString("user", new User().toString()));

                        PrefHelper.INSTANCE.writeString("token", Application.token);
                        PrefHelper.INSTANCE.writeString("refreshToken", Application.refreshToken);

                    }
                    return webService.rxGetAllFavouriteBooks(loggedUser.getId());
                })
موافقین ۰ مخالفین ۰ ۰۲/۰۶/۰۶
میم دال

نظرات  (۰)

هیچ نظری هنوز ثبت نشده است

ارسال نظر

ارسال نظر آزاد است، اما اگر قبلا در بیان ثبت نام کرده اید می توانید ابتدا وارد شوید.
شما میتوانید از این تگهای html استفاده کنید:
<b> یا <strong>، <em> یا <i>، <u>، <strike> یا <s>، <sup>، <sub>، <blockquote>، <code>، <pre>، <hr>، <br>، <p>، <a href="" title="">، <span style="">، <div align="">
تجدید کد امنیتی