0

I'm using retrofit authentication, and I have a timeoutexception. I saw many questions, but I can't solve this.

Here's the code

public class FragmentRegistration extends Fragment {
    View mainView;

    EditText username, email, password, name;
    Button button;

    ApiClient pentairAPIClient = ApiClient.getInstance();

    SupportopObj supportopObj = new SupportopObj();
    SupportopObjActivate supportopObjActivate = new SupportopObjActivate();

    @Override
    public View onCreateView(LayoutInflater inflater,
                             @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        mainView = inflater.inflate
                (R.layout.registration, container, false);

        username = mainView.findViewById(R.id.username);
        email = mainView.findViewById(R.id.email);
        password = mainView.findViewById(R.id.password);
        name = mainView.findViewById(R.id.name);
        button = mainView.findViewById(R.id.register);

        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                //String s = name.getText().toString();
                //String split[] = s.split(" ");

                supportopObj.setFirstName("Tester");
                supportopObj.setLastName("Testryan");
                supportopObj.setUsername(username.getText().toString());
                supportopObj.setEmail(email.getText().toString());
                supportopObj.setPassword(password.getText().toString());

                supportopObjActivate.setUsername(supportopObj.getUsername());
                supportopObjActivate.setEmail(supportopObj.getEmail());
                supportopObjActivate.setPassword(supportopObj.getPassword());
                supportopObjActivate.setType("generic");
                updateApp();               
            }
        });

        return mainView;
    }


    public void updateApp() {

        Call<ResponseBody> call = pentairAPIClient.registration(supportopObj);
        call.enqueue(new Callback<ResponseBody>() {
            @Override
            public void onResponse(Call<ResponseBody> call, Response<ResponseBody> response) {
                if (response.isSuccessful()) {
                    activationCall();

                } else {
                    Toast.makeText(getContext(), "Something went wrong",
                            Toast.LENGTH_SHORT).show();
                }
            }

            @Override
            public void onFailure(Call<ResponseBody> call, Throwable t) {
                Toast.makeText(getContext(), "Error...", Toast.LENGTH_SHORT).show();
            }
        });
    }


    public void activationCall() {
        Call<ResponseBody> callActive = pentairAPIClient.activation(supportopObjActivate);
        callActive.enqueue(new Callback<ResponseBody>() {
            @Override
            public void onResponse(Call<ResponseBody> call, Response<ResponseBody> response) {

                if (response.isSuccessful()) {

                    try {
                        String data = response.body().string();
                        JSONObject obj = new JSONObject(data);
                        String client_id = obj.getString("client_id");
                        String client_secret = obj.getString("client_secret");

                        tokenCall(client_id, client_secret);

                    } catch (JSONException | IOException e) {
                        e.printStackTrace();
                    }

                } else {
                    Toast.makeText(getContext(), "error", Toast.LENGTH_SHORT).show();
                }
            }

            @Override
            public void onFailure(Call<ResponseBody> call, Throwable t) {
                Toast.makeText(getContext(), "Error in activation",
                        Toast.LENGTH_SHORT).show();
            }
        });
    }


    public void tokenCall(String client_id, String client_secret) {
        Call<ResponseBody> token = pentairAPIClient.get_token("password", client_id, client_secret,
                supportopObj.getEmail(), supportopObj.getPassword());

        token.enqueue(new Callback<ResponseBody>() {
            @Override
            public void onResponse(Call<ResponseBody> call, Response<ResponseBody> response) {
                if (response.isSuccessful()) {
                    Toast.makeText(getContext(), String.valueOf(response.body()), Toast.LENGTH_SHORT).show();
                } else {
                    Toast.makeText(getContext(), "Something wrong.....", Toast.LENGTH_SHORT).show();
                }
            }

            @Override
            public void onFailure(Call<ResponseBody> call, Throwable t) {
                Toast.makeText(getContext(), "You're on failure", Toast.LENGTH_SHORT).show();
            }
        });
    }

I have no error in retrofit, I'm doing debugging and I see all the process, so I getting client id and secret successfully, then I'm getting a timeoutexception in the last onfailure(),

 @Override
    public void onFailure(Call<ResponseBody> call, Throwable t) 
{
    Toast.makeText(getContext(), "You're onfailure",Toast.LENGTH_SHORT).show();
} 

watch the code, that's the last line. How to fix it? The app not crashes, but in debug he drops timeoutexception like this.
t={SocketTimeoutException@830038722120}java.net.SocketTimeoutException: timeout

In OkHttpClient the .

readTimeout(10, TimeUnit.SECONDS).connectTimeout(10, TimeUnit.SECONDS).writeTimeout(10, TimeUnit.SECONDS); 

all are 10, i tried to set it 100, not helps. Help me. Thanks.

1 Answers1

0

@Hayk Mkrtchyan

just inside your

onFailure(Call<ResponseBody> call, Throwable t) {
     System.out.println(t.getMessage());  //you will get "timeout" as a string in case of actual timeout
}

App control mostly goes into timeout incase

1) Api is responding slowly

2) Check for net connection

Also connection timeout with 10 sec is very low try to set it atleast 60 sec

eLemEnt
  • 1,741
  • 14
  • 21
  • man that only says 'java.net.SocketTimeoutException: timeout' –  Jan 29 '18 at 18:29
  • buddy in case of time out you have to give dialog or something saying like "Error while connecting to server. Kindly try again" like that – eLemEnt Jan 30 '18 at 05:22