2017-01-19 1 views
2

Я пытаюсь создать сценарий забывания пароля для своего приложения. Когда я запустил apk и попытаюсь оставить мой пароль, я получил ошибку, которая говорит Используйте JsonReader.setLenient (true), чтобы принять неверный JSON в строке 1, столбец 1 путь $ Ошибка, все работает нормально в моем apk, я могу войти в систему и выйти или зарегистрироваться, но когда я сброшу пароль, я получил JsonReader.setLenient (true). Мой apk json работает, и это правильно. Пожалуйста помогите. Я использую свой код.

{ 
    "operation":"resPassReq", 
    "user":{ 
     "email":"[email protected]" 

    } 
} 

и если запрос это успех ответ будет похож на,

{ 
    "result": "success", 
    "message": "Check your mail for reset password code." 
} 

Для отделочного процесса сброса пароля запрос будет похож на,

{ 
    "operation":"resPass", 
    "user":{ 
     "email":"[email protected]", 
     "code":"bcfqa3", 
     "password":"rjamalw" 

    } 
} 

и если запрос является успешным, ответ будет аналогичен,

{ 
    "result": "success", 
    "message": "Password Changed Successfully" 
} 

ResetPasswordFragment.java

import retrofit2.Call; 
import retrofit2.Callback; 
import retrofit2.Retrofit; 
import retrofit2.converter.gson.GsonConverterFactory; 

public class ResetPasswordFragment extends Fragment implements View.OnClickListener{ 

    private AppCompatButton btn_reset; 
    private EditText et_email,et_code,et_password; 
    private TextView tv_timer; 
    private ProgressBar progress; 
    private boolean isResetInitiated = false; 
    private String email; 
    private CountDownTimer countDownTimer; 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 

     View view = inflater.inflate(R.layout.fragment_password_reset,container,false); 
     initViews(view); 
     return view; 
    } 

    private void initViews(View view){ 

     btn_reset = (AppCompatButton)view.findViewById(R.id.btn_reset); 
     tv_timer = (TextView)view.findViewById(R.id.timer); 
     et_code = (EditText)view.findViewById(R.id.et_code); 
     et_email = (EditText)view.findViewById(R.id.et_email); 
     et_password = (EditText)view.findViewById(R.id.et_password); 
     et_password.setVisibility(View.GONE); 
     et_code.setVisibility(View.GONE); 
     tv_timer.setVisibility(View.GONE); 
     btn_reset.setOnClickListener(this); 
     progress = (ProgressBar)view.findViewById(R.id.progress); 


    } 

    @Override 
    public void onClick(View v) { 
     switch (v.getId()){ 

      case R.id.btn_reset: 

       if(!isResetInitiated) { 


        email = et_email.getText().toString(); 
        if (!email.isEmpty()) { 
         progress.setVisibility(View.VISIBLE); 
         initiateResetPasswordProcess(email); 
        } else { 

         Snackbar.make(getView(), "Fields are empty !", Snackbar.LENGTH_LONG).show(); 
        } 
       } else { 

        String code = et_code.getText().toString(); 
        String password = et_password.getText().toString(); 

        if(!code.isEmpty() && !password.isEmpty()){ 

         finishResetPasswordProcess(email,code,password); 
        } else { 

         Snackbar.make(getView(), "Fields are empty !", Snackbar.LENGTH_LONG).show(); 
        } 

       } 

       break; 
     } 
    } 

    private void initiateResetPasswordProcess(String email){ 

     Retrofit retrofit = new Retrofit.Builder() 
       .baseUrl(Constants.BASE_URL) 
       .addConverterFactory(GsonConverterFactory.create()) 
       .build(); 

     RequestInterface requestInterface = retrofit.create(RequestInterface.class); 

     User user = new User(); 
     user.setEmail(email); 
     ServerRequest request = new ServerRequest(); 
     request.setOperation(Constants.RESET_PASSWORD_INITIATE); 
     request.setUser(user); 
     Call<ServerResponse> response = requestInterface.operation(request); 

     response.enqueue(new Callback<ServerResponse>() { 
      @Override 
      public void onResponse(Call<ServerResponse> call, retrofit2.Response<ServerResponse> response) { 

       ServerResponse resp = response.body(); 
       Snackbar.make(getView(), resp.getMessage(), Snackbar.LENGTH_LONG).show(); 

       if(resp.getResult().equals(Constants.SUCCESS)){ 

        Snackbar.make(getView(), resp.getMessage(), Snackbar.LENGTH_LONG).show(); 
        et_email.setVisibility(View.GONE); 
        et_code.setVisibility(View.VISIBLE); 
        et_password.setVisibility(View.VISIBLE); 
        tv_timer.setVisibility(View.VISIBLE); 
        btn_reset.setText("Change Password"); 
        isResetInitiated = true; 
        startCountdownTimer(); 

       } else { 

        Snackbar.make(getView(), resp.getMessage(), Snackbar.LENGTH_LONG).show(); 

       } 
       progress.setVisibility(View.INVISIBLE); 
      } 

      @Override 
      public void onFailure(Call<ServerResponse> call, Throwable t) { 

       progress.setVisibility(View.INVISIBLE); 
       Log.d(Constants.TAG,"failed"); 
       Snackbar.make(getView(), t.getLocalizedMessage(), Snackbar.LENGTH_LONG).show(); 
       Log.d(Constants.TAG, t.getLocalizedMessage()); 
      } 
     }); 
    } 

    private void finishResetPasswordProcess(String email,String code, String password){ 

     Retrofit retrofit = new Retrofit.Builder() 
       .baseUrl(Constants.BASE_URL) 
       .addConverterFactory(GsonConverterFactory.create()) 
       .build(); 

     RequestInterface requestInterface = retrofit.create(RequestInterface.class); 

     User user = new User(); 
     user.setEmail(email); 
     user.setCode(code); 
     user.setPassword(password); 
     ServerRequest request = new ServerRequest(); 
     request.setOperation(Constants.RESET_PASSWORD_FINISH); 
     request.setUser(user); 
     Call<ServerResponse> response = requestInterface.operation(request); 

     response.enqueue(new Callback<ServerResponse>() { 
      @Override 
      public void onResponse(Call<ServerResponse> call, retrofit2.Response<ServerResponse> response) { 

       ServerResponse resp = response.body(); 
       Snackbar.make(getView(), resp.getMessage(), Snackbar.LENGTH_LONG).show(); 

       if(resp.getResult().equals(Constants.SUCCESS)){ 

        Snackbar.make(getView(), resp.getMessage(), Snackbar.LENGTH_LONG).show(); 
        countDownTimer.cancel(); 
        isResetInitiated = false; 
        goToLogin(); 

       } else { 

        Snackbar.make(getView(), resp.getMessage(), Snackbar.LENGTH_LONG).show(); 

       } 
       progress.setVisibility(View.INVISIBLE); 
      } 

      @Override 
      public void onFailure(Call<ServerResponse> call, Throwable t) { 

       progress.setVisibility(View.INVISIBLE); 
       Log.d(Constants.TAG,"failed"); 
       Snackbar.make(getView(), t.getLocalizedMessage(), Snackbar.LENGTH_LONG).show(); 

      } 
     }); 
    } 

    private void startCountdownTimer(){ 
     countDownTimer = new CountDownTimer(120000, 1000) { 

      public void onTick(long millisUntilFinished) { 
       tv_timer.setText("Time remaining : " + millisUntilFinished/1000); 
      } 

      public void onFinish() { 
       Snackbar.make(getView(), "Time Out ! Request again to reset password.", Snackbar.LENGTH_LONG).show(); 
       goToLogin(); 
      } 
     }.start(); 
    } 

    private void goToLogin(){ 

     Fragment login = new LoginFragment(); 
     FragmentTransaction ft = getFragmentManager().beginTransaction(); 
     ft.replace(R.id.fragment_frame,login); 
     ft.commit(); 
    } 
} 

RequestInterface.java

public interface RequestInterface { 

    @POST("req/") 
    Call<ServerResponse> operation(@Body ServerRequest request); 

} 

Но когда я изменить мой код, как показано ниже, все работает нормально, но проблема в том, что получил ответ OnFailure

private void initiateResetPasswordProcess(String email){ 
     HttpLoggingInterceptor interceptor = new HttpLoggingInterceptor(); 
     interceptor.setLevel(HttpLoggingInterceptor.Level.BODY); 
     OkHttpClient client = new OkHttpClient.Builder().addInterceptor(interceptor).build(); 
     Retrofit retrofit = new Retrofit.Builder() 
       .baseUrl(Constants.BASE_URL) 
       .client(client) 
       .addConverterFactory(GsonConverterFactory.create()) 
       .build(); 

     RequestInterface requestInterface = retrofit.create(RequestInterface.class); 

     User user = new User(); 
     user.setEmail(email); 
     ServerRequest request = new ServerRequest(); 
     request.setOperation(Constants.RESET_PASSWORD_INITIATE); 
     request.setUser(user); 
     Call<ServerResponse> response = requestInterface.operation(request); 

     response.enqueue(new Callback<ServerResponse>() { 
      @Override 
      public void onResponse(Call<ServerResponse> call, retrofit2.Response<ServerResponse> response) { 

       ServerResponse resp = response.body(); 
       Snackbar.make(getView(), resp.getMessage(), Snackbar.LENGTH_LONG).show(); 

       if(resp.getResult().equals(Constants.SUCCESS)){ 

        Snackbar.make(getView(), resp.getMessage(), Snackbar.LENGTH_LONG).show(); 
        et_email.setVisibility(View.GONE); 
        et_code.setVisibility(View.VISIBLE); 
        et_password.setVisibility(View.VISIBLE); 
        tv_timer.setVisibility(View.VISIBLE); 
        btn_reset.setText("Change Password"); 
        isResetInitiated = true; 
        startCountdownTimer(); 

       } else { 

        Snackbar.make(getView(), resp.getMessage(), Snackbar.LENGTH_LONG).show(); 

       } 
       progress.setVisibility(View.INVISIBLE); 
      } 

      @Override 
      public void onFailure(Call<ServerResponse> call, Throwable t) { 

       progress.setVisibility(View.INVISIBLE); 
       Log.d(Constants.TAG,"failed"); 
       // Snackbar.make(getView(), resp.getMessage(), Snackbar.LENGTH_LONG).show(); 
       et_email.setVisibility(View.GONE); 
       et_code.setVisibility(View.VISIBLE); 
       et_password.setVisibility(View.VISIBLE); 
       tv_timer.setVisibility(View.VISIBLE); 
       btn_reset.setText("Change Password"); 
       isResetInitiated = true; 
       startCountdownTimer(); 
       // Snackbar.make(getView(), t.getLocalizedMessage(), Snackbar.LENGTH_LONG).show(); 


      } 
     }); 
    } 

    private void finishResetPasswordProcess(String email,String code, String password){ 
     HttpLoggingInterceptor interceptor = new HttpLoggingInterceptor(); 
     interceptor.setLevel(HttpLoggingInterceptor.Level.BODY); 
     OkHttpClient client = new OkHttpClient.Builder().addInterceptor(interceptor).build(); 

     Retrofit retrofit = new Retrofit.Builder() 
       .baseUrl(Constants.BASE_URL) 
       .client(client) 
       .addConverterFactory(GsonConverterFactory.create()) 
       .build(); 

     RequestInterface requestInterface = retrofit.create(RequestInterface.class); 

     User user = new User(); 
     user.setEmail(email); 
     user.setCode(code); 
     user.setPassword(password); 
     ServerRequest request = new ServerRequest(); 
     request.setOperation(Constants.RESET_PASSWORD_FINISH); 
     request.setUser(user); 
     Call<ServerResponse> response = requestInterface.operation(request); 

     response.enqueue(new Callback<ServerResponse>() { 
      @Override 
      public void onResponse(Call<ServerResponse> call, retrofit2.Response<ServerResponse> response) { 

       ServerResponse resp = response.body(); 
       Snackbar.make(getView(), resp.getMessage(), Snackbar.LENGTH_LONG).show(); 

       if(resp.getResult().equals(Constants.SUCCESS)){ 

        Snackbar.make(getView(), resp.getMessage(), Snackbar.LENGTH_LONG).show(); 
        countDownTimer.cancel(); 
        isResetInitiated = false; 
        goToLogin(); 

       } else { 

        Snackbar.make(getView(), resp.getMessage(), Snackbar.LENGTH_LONG).show(); 

       } 
       progress.setVisibility(View.INVISIBLE); 
      } 

      @Override 
      public void onFailure(Call<ServerResponse> call, Throwable t) { 

       progress.setVisibility(View.INVISIBLE); 
       Log.d(Constants.TAG,"failed"); 
       // Snackbar.make(getView(), t.getLocalizedMessage(), Snackbar.LENGTH_LONG).show(); 
       countDownTimer.cancel(); 
       isResetInitiated = false; 
       goToLogin(); 

      } 
     }); 
    } 

ServerResponse.java

public class ServerResponse { 

    private String result; 
    private String message; 
    private User user; 

    public String getResult() { 
     return result; 
    } 

    public String getMessage() { 
     return message; 
    } 

    public User getUser() { 
     return user; 
    } 
} 

ServerRequest.java

public class ServerRequest { 

    private String operation; 
    private User user; 

    public void setOperation(String operation) { 
     this.operation = operation; 
    } 

    public void setUser(User user) { 
     this.user = user; 
    } 
} 
+1

Добро пожаловать в переполнение стека! Чтобы дать вам отличный ответ, это может помочь нам, если у вас есть взгляд на [спросить], если вы еще этого не сделали. Это может быть полезно, если вы можете предоставить [mcve]. – Mat

+0

Вы должны поделиться полученной вами ошибкой. Вы можете распечатать его, заменив '' 'Log.d (Constants.TAG,« failed »);' '' '' '' Log.d (Constants.TAG, «failed», t); '' 'в onFailure обратные вызовы. Вы также можете вывести любую важную информацию, содержащую объект '' 'call'''. – Haem

+0

Я получил эту ошибку - JsonReader.setLenient (true), чтобы принять неверный JSON в строке 1 столбец 1 путь $ Ошибка – Misty

ответ

0
private void initiateResetPasswordProcess(String email){ 
      HttpLoggingInterceptor interceptor = new HttpLoggingInterceptor(); 
      interceptor.setLevel(HttpLoggingInterceptor.Level.BODY); 
      OkHttpClient client = new OkHttpClient.Builder().addInterceptor(interceptor).build(); 
      Gson gson = new GsonBuilder() 
          .setLenient() 
          .create(); 
      Retrofit retrofit = new Retrofit.Builder() 
        .baseUrl(Constants.BASE_URL) 
        .client(client) 
        .addConverterFactory(GsonConverterFactory.create(gson)) 
        .build(); 

      RequestInterface requestInterface = retrofit.create(RequestInterface.class); 

      User user = new User(); 
      user.setEmail(email); 
      ServerRequest request = new ServerRequest(); 
      request.setOperation(Constants.RESET_PASSWORD_INITIATE); 
      request.setUser(user); 
      Call<ServerResponse> response = requestInterface.operation(request); 

      response.enqueue(new Callback<ServerResponse>() { 
       @Override 
       public void onResponse(Call<ServerResponse> call, retrofit2.Response<ServerResponse> response) { 

        ServerResponse resp = response.body(); 
        Snackbar.make(getView(), resp.getMessage(), Snackbar.LENGTH_LONG).show(); 

        if(resp.getResult().equals(Constants.SUCCESS)){ 

         Snackbar.make(getView(), resp.getMessage(), Snackbar.LENGTH_LONG).show(); 
         et_email.setVisibility(View.GONE); 
         et_code.setVisibility(View.VISIBLE); 
         et_password.setVisibility(View.VISIBLE); 
         tv_timer.setVisibility(View.VISIBLE); 
         btn_reset.setText("Change Password"); 
         isResetInitiated = true; 
         startCountdownTimer(); 

        } else { 

         Snackbar.make(getView(), resp.getMessage(), Snackbar.LENGTH_LONG).show(); 

        } 
        progress.setVisibility(View.INVISIBLE); 
       } 

       @Override 
       public void onFailure(Call<ServerResponse> call, Throwable t) { 

        progress.setVisibility(View.INVISIBLE); 
        Log.d(Constants.TAG,"failed"); 
        // Snackbar.make(getView(), resp.getMessage(), Snackbar.LENGTH_LONG).show(); 
        et_email.setVisibility(View.GONE); 
        et_code.setVisibility(View.VISIBLE); 
        et_password.setVisibility(View.VISIBLE); 
        tv_timer.setVisibility(View.VISIBLE); 
        btn_reset.setText("Change Password"); 
        isResetInitiated = true; 
        startCountdownTimer(); 
        // Snackbar.make(getView(), t.getLocalizedMessage(), Snackbar.LENGTH_LONG).show(); 


       } 
      }); 
     } 

     private void finishResetPasswordProcess(String email,String code, String password){ 
      HttpLoggingInterceptor interceptor = new HttpLoggingInterceptor(); 
      interceptor.setLevel(HttpLoggingInterceptor.Level.BODY); 
      OkHttpClient client = new OkHttpClient.Builder().addInterceptor(interceptor).build(); 
      Gson gson = new GsonBuilder() 
          .setLenient() 
          .create(); 
      Retrofit retrofit = new Retrofit.Builder() 
        .baseUrl(Constants.BASE_URL) 
        .client(client) 
        .addConverterFactory(GsonConverterFactory.create(gson)) 
        .build(); 

      RequestInterface requestInterface = retrofit.create(RequestInterface.class); 

      User user = new User(); 
      user.setEmail(email); 
      user.setCode(code); 
      user.setPassword(password); 
      ServerRequest request = new ServerRequest(); 
      request.setOperation(Constants.RESET_PASSWORD_FINISH); 
      request.setUser(user); 
      Call<ServerResponse> response = requestInterface.operation(request); 

      response.enqueue(new Callback<ServerResponse>() { 
       @Override 
       public void onResponse(Call<ServerResponse> call, retrofit2.Response<ServerResponse> response) { 

        ServerResponse resp = response.body(); 
        Snackbar.make(getView(), resp.getMessage(), Snackbar.LENGTH_LONG).show(); 

        if(resp.getResult().equals(Constants.SUCCESS)){ 

         Snackbar.make(getView(), resp.getMessage(), Snackbar.LENGTH_LONG).show(); 
         countDownTimer.cancel(); 
         isResetInitiated = false; 
         goToLogin(); 

        } else { 

         Snackbar.make(getView(), resp.getMessage(), Snackbar.LENGTH_LONG).show(); 

        } 
        progress.setVisibility(View.INVISIBLE); 
       } 

       @Override 
       public void onFailure(Call<ServerResponse> call, Throwable t) { 

        progress.setVisibility(View.INVISIBLE); 
        Log.d(Constants.TAG,"failed"); 
        // Snackbar.make(getView(), t.getLocalizedMessage(), Snackbar.LENGTH_LONG).show(); 
        countDownTimer.cancel(); 
        isResetInitiated = false; 
        goToLogin(); 

       } 
      }); 
     } 
+1

После редактирования я получил еще одну ошибку -> java.lang.IllegalStateException: ожидается BEGIN_OBJECT, но был STRING в строке 1 столбец 1 путь $ – Misty

+0

Дайте код класса ServerResponse также в вопросе. Теперь это ошибка json parsing. –

+0

У меня есть класс ServResponse. – Misty

0

Я столкнулся с этой проблемой, и, наконец, я решил.

Вы должны сделать все $ строку в вашем API как же именем в таблице в базе данных, как этот

"book_chalet_id" => $row['book_chalet_id'], 

поэтому в таблице должен имеет столбец book_chalet_id.

Смежные вопросы