如何修复Twitter响应码= 400,消息=错误请求?

时间:2020-07-21 13:49:56

标签: android androidx android-twitter

我将witter登录集成到了android中。但是在响应时,它总是让我回到logcat中:

code=400, message=Bad Request

"data":"{\"+clicked_branch_link\":false,\"+is_first_session\":false}",

如果要打印令牌,我将在logcat中看到令牌和秘密值。但是响应始终返回400。我在这里使用分支IO进行深度链接。

 public void attachTwitter(String token, String secret) {
        apiService.attachTwitterAccount(PreferenceHandler.readString(EditProfileActivity.this, SIGNIN_ID, ""),
                token, secret, "twitter").enqueue(new Callback<Object>() {

            @Override
            public void onResponse(Call<Object> call, Response<Object> response) {
                Log.i("accessToken", "onResponse");
                if (!response.isSuccessful()) {
                    try {
                        JSONObject object = new JSONObject(response.errorBody().string());
                        JSONObject error = object.optJSONObject("error");
                        String code = error.optString("code");
                        String description = error.optString("description");

                        if (code.equalsIgnoreCase("338")) {
                            showCustomDialog(EditProfileActivity.this, string(R.string.server_error_description_338));
                            switchTwitter.setChecked(false);
                        }

                    } catch (Exception e) {

                    }
                }
            }

            @Override
            public void onFailure(Call<Object> call, Throwable t) {
                Log.i("accessToken", "onFailure");
                switchTwitter.setChecked(false);
            }
        });
    } 

attachTwitterAccount方法的代码为:

@FormUrlEncoded
    fun attachTwitterAccount(@Field("id") id: String,
                             @Field("authToken") token: String,
                             @Field("authSecret") authSecret: String,
                             @Field("typeAttach") typeAttach: String): Call<Any>

有人可以建议我如何解决此问题吗?

1 个答案:

答案 0 :(得分:1)

错误的请求意味着您发送到服务器的请求与期望的方式或形式不符。文档对该请求说了什么?是邮政吗?得到?。如果是POST,则应发送一个正文。

要发送正文和POST,您首先需要为正文创建一个类。在Kotlin中,应该是这样的:

class Body(var id: String,
                        var authToken: String,
                        var authSecret: String,
                        var accomplished: Double,
                        var typeAttach: String
                        )

然后您在请求中称呼身体:

@POST("post value which")
fun attachTwitterAccount(@Body body:Body): Call<Any>

最后,从附加的Twitter功能中调用它。创建您的Body实例,然后将其作为参数传递。

如果仍然遇到相同的错误,请检查Twitter文档,您可能缺少某些内容。

在其他环境(例如Postman)中尝试对服务器的相同调用始终是个好主意,看看它是否在那里工作?这是确定问题是在服务器端还是在应用程序端的好方法。

让我知道它是否有效