Вход с помощью okhttp json

#android #json #okhttp

#Android #json #okhttp

Вопрос:

Здесь я создаю страницу входа в систему.Когда я написал имя пользователя и при переходе к редактированию текста пароля, он должен проверять имя пользователя в json api, независимо от того, входит ли он в систему в первый раз или повторно….при повторном входе в систему setvisible textview забудьте передать setVisibView.visible, и если это первый раз, он покажет getpassword textview. Вот мой код:

  try {
                                JSONObject jsonObject = new JSONObject(res);
                                JSONArray result = jsonObject.getJSONArray(ConstantsValues.result);
                                JSONArray result1 = jsonObject.getJSONArray(ConstantsValues.result1);

                                for (int i = 0; i < result.length(); i  ) {
                                    JSONObject obj_result = result.getJSONObject(i);
                                    String Success = obj_result.getString("SUCCESS");
                                    if (Success.equals("1")) {
                                        for (int j = 0; j < result1.length(); j  ) {
                                            JSONObject obj_result1 = result1.getJSONObject(j);
                                            String Message = obj_result1.getString("message");
                                            if (Message.equals("Forget Password.")) {
                                                forgetpass.setVisibility(View.VISIBLE);
                                            } else {
                                                getpass.setVisibility(View.VISIBLE);
                                            }
                                        }

                                    } else {
                                        showAlertDialog("Invalid", "Invalid password or Email");
                                    }


                                }
                                runOnUiThread(new Runnable() {
                                    @Override
                                    public void run() {
                                        // you can access all the UI componenet

                                    }
                                });
  

здесь ошибка:

  E/JSONDemo: onResponse
 android.view.ViewRootImpl$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.
     at android.view.ViewRootImpl.checkThread(ViewRootImpl.java:7266)
     at android.view.ViewRootImpl.recomputeViewAttributes(ViewRootImpl.java:3490)
     at android.view.ViewGroup.recomputeViewAttributes(ViewGroup.java:1357)
     at android.view.ViewGroup.recomputeViewAttributes(ViewGroup.java:1357)
     at android.view.ViewGroup.recomputeViewAttributes(ViewGroup.java:1357)
     at android.view.ViewGroup.recomputeViewAttributes(ViewGroup.java:1357)
     at android.view.ViewGroup.recomputeViewAttributes(ViewGroup.java:1357)
     at android.view.ViewGroup.recomputeViewAttributes(ViewGroup.java:1357)
     at android.view.ViewGroup.recomputeViewAttributes(ViewGroup.java:1357)
     at android.view.ViewGroup.recomputeViewAttributes(ViewGroup.java:1357)
     at android.view.ViewGroup.recomputeViewAttributes(ViewGroup.java:1357)
     at android.view.ViewGroup.recomputeViewAttributes(ViewGroup.java:1357)
     at android.view.ViewGroup.recomputeViewAttributes(ViewGroup.java:1357)
     at android.view.View.needGlobalAttributesUpdate(View.java:9904)
     at android.view.View.setFlags(View.java:10749)
     at android.view.View.setVisibility(View.java:7511)
     at com.example.abhishek.focus_business_solution.SignIn$3$1.onResponse(SignIn.java:248)
     at okhttp3.RealCall$AsyncCall.execute(RealCall.java:133)
     at okhttp3.internal.NamedRunnable.run(NamedRunnable.java:32)
     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113)
     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)
     at java.lang.Thread.run(Thread.java:818)
  

Ответ №1:

Предполагая, что весь ваш код находится внутри фонового потока, весь просматриваемый вами код видимости должен находиться внутри runOnUiThread() :

например:

         if (Message.equals("Forget Password.")) {
                runOnUiThread(new Runnable() {
                     @Override
                     public void run() {
                         forgetpass.setVisibility(View.VISIBLE);
                     }
               });
        }
  

Комментарии:

1. аналогично используйте метод для доступа ко всем элементам пользовательского интерфейса

2. Спасибо, брат, я искал только это……. Я не понимал, что делать, и спасибо..