【问题标题】:Retrofit, TimeoutException onFailure改造,TimeoutException onFailure
【发布时间】:2018-01-29 15:55:33
【问题描述】:

我正在使用改造身份验证,但我遇到了超时异常。我看到了很多问题,但我无法解决这个问题。

这是代码

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();
            }
        });
    }

我在改造中没有错误,我正在调试,我看到了所有的过程,所以我成功获取了客户端 ID 和密码,然后我在最后一个 onfailure() 中得到了一个超时异常,

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

看代码,这是最后一行。如何解决?应用程序不会崩溃,但在调试时他会像这样丢弃超时异常。
t={SocketTimeoutException@830038722120}java.net.SocketTimeoutException: timeout

在 OkHttpClient 中的 .

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

都是 10,我尝试将其设置为 100,但无济于事。帮我。谢谢。

【问题讨论】:

    标签: java android retrofit timeoutexception


    【解决方案1】:

    @Hayk Mkrtchyan

    就在你的里面

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

    应用程序控制大多进入超时以防万一

    1) Api 响应缓慢

    2) 检查网络连接

    10 秒的连接超时也非常低,尝试将其设置为至少 60 秒

    【讨论】:

    • 只说'java.net.SocketTimeoutException: timeout'的人
    • 哥们,如果超时,您必须提供对话框或类似“连接服务器时出错。请重试”之类的内容
    猜你喜欢
    • 2020-06-20
    • 1970-01-01
    • 2017-08-19
    • 1970-01-01
    • 1970-01-01
    • 2018-01-26
    • 2018-02-20
    • 2020-07-25
    • 2016-05-09
    相关资源
    最近更新 更多