【问题标题】:Android Okhttp Request Not RespondingAndroid Okhttp 请求无响应
【发布时间】:2019-04-12 18:19:51
【问题描述】:

我正在尝试在我的应用程序的登录页面中发布 JSON 对象。我搜索了许多示例并尝试了它们。但只有我的 android 4.3 设备运行良好,其他上层 api 级别的设备甚至没有响应回来。我的代码如下:

@Override
public void onClick(View v) {

    switch (v.getId()) {

        case R.id.LoginBtn:
            loading.show();

            try {
                login();
            } catch (JSONException e) {
                e.printStackTrace();
            }
            break;



    }
}

public void login(){
    okhttp3.OkHttpClient client = new okhttp3.OkHttpClient.Builder()
            .connectTimeout(10, TimeUnit.SECONDS)
            .writeTimeout(10,TimeUnit.SECONDS)
            .readTimeout(10,TimeUnit.SECONDS)
            .build();

    final JSONObject JObje = new JSONObject();
    try {

        JObje.put("Username", String.valueOf(Username.getText()));
        JObje.put("Password", String.valueOf(Password.getText()));
    } catch (JSONException e) {
        e.printStackTrace();
    }

    okhttp3.Request request = null;
    okhttp3.RequestBody body = null;

    body = new FormBody.Builder()
            .addEncoded("JSONVALUE", String.valueOf(JObje))
            .build();

    request = new okhttp3.Request.Builder()
            .url(context.getString(R.string.rutKontrolServis))
            .addHeader("Content-Type", "application/x-www-form-urlencoded")
            .post(body)
            .build();


    client.newCall(request).enqueue(new okhttp3.Callback() {
            @Override
            public void onFailure(Call call, IOException e) {

            }

            @Override
            public void onResponse(Call call, okhttp3.Response response) throws IOException {
                Log.d("TAG","responded");
            }
        });
}

R.string.rutKontrolServis 网址是这样的:https://ourwebsite.com/folder/package_name.mywebservice

在我的 gradle 文件中,我添加了依赖项: 编译'com.squareup.okhttp3:okhttp:3.11.0'

对于较新的 api 级别设备的 tls 或 ssl 证书是否有任何不同的请求语法或任何限制?有人能指出一点吗

【问题讨论】:

  • 尝试在onFailure() 中打印IOException。它说什么?

标签: android json network-programming okhttp3


【解决方案1】:

您是否尝试增加连接超时和读取超时?我觉得 10 秒太短了:

okhttp3.OkHttpClient client = new okhttp3.OkHttpClient.Builder()
        .connectTimeout(10, TimeUnit.SECONDS)
        .writeTimeout(10,TimeUnit.SECONDS)
        .readTimeout(10,TimeUnit.SECONDS)
        .build();

增加到 30 秒,然后重试。

【讨论】:

  • 您可以打印log onFailure,我们可能会收到一些错误信息。
  • 没有响应正负,所以没有进入onFailure方法
  • 好奇怪。其他设置怎么样(向清单文件添加权限,检查网络连接......)。如果一切正常,您可以尝试使用一些公共 API,例如:jsonplaceholder.typicode.com/posts
  • 这些设置对于我的 android 4.3 设备是正常的。但其他设备没有响应或给出任何错误。我怀疑安全部分,但不确定。
【解决方案2】:

有时 OkHTTP 突然停止响应 - 没有 onFailure 结果,没有 onResponse 结果,即使在增加超时之后也是如此。没有。 将您的 wifi / 网络提供商切换到另一个提供商对我有用。

【讨论】:

    猜你喜欢
    • 2020-03-31
    • 2019-08-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多