Loopj发布方法失败-尝试发送发布JSON时出错

时间:2018-10-03 20:22:45

标签: java android loopj

我正在使用必须通过post方法发送用户电子邮件的android应用程序。当我已经运行了一些测试并且能够从此处获取值时,api端点位于https://api-iddog.idwall.co/。我正在使用Loopj库。

但是,我的任务是使用此端点:

https://api-iddog.idwall.co/signup

文档指南显示我需要使用以下参数来构造POST方法:

使用Content-Type: application/json标头

,发布网址应类似于:

Api Post Doc

考虑到所有这些,我创建了一个名为attempPost()的方法。通过这种方法,我创建了AsyncHttpRequest对象,RequestParams对象并存储了用户键入的有效电子邮件。

private void attempPost() {

    AsyncHttpClient client = new AsyncHttpClient();
    RequestParams params = new RequestParams();

    String url = "https://api-iddog.idwall.co/signup";
    String userEmail = userEmailView.getText().toString();

    JSONObject jsonEmail = new JSONObject();
    try {
        jsonEmail.put("email", userEmail);

    } catch (JSONException e) {
        e.printStackTrace();
    }
    Log.d("Dog", " " + jsonEmail.toString());


    params.put("-d", jsonEmail);
    client.addHeader("Content-Type", "application/json");
    client.post(url, params, new AsyncHttpResponseHandler() {
        @Override
        public void onSuccess(int statusCode, Header[] headers, byte[] responseBody) {
            Log.d("Dog", "onSucess" + responseBody.toString());

        }

        @Override
        public void onFailure(int statusCode, Header[] headers, byte[] responseBody, Throwable error) {

            Log.e("Dog", "" + error.toString());

        }
    });



}

此方法在OnclickListener中被调用,并且日志返回一条称为BadRequest和状态代码400的消息。我已经尝试应用Loopj文档中的一些代码示例,但是我没有工作。有人可以让我了解我做错了什么吗?从我可以收集的内容来看,成功响应应该是String(Token),我需要此令牌来完成项目。

编辑。

我在Stack上的文档和其他示例中做了很多工作,发现了这一点:POSTing JSON/XML using android-async-http (loopj)

在接受的答案中,有一个有关如何发布JSON的示例。

然后,我对attempPost方法进行了一些更改。

private void attempPost() {

    AsyncHttpClient client = new AsyncHttpClient();
    RequestParams params = new RequestParams();


    String url = "https://api-iddog.idwall.co/signup";
    String userEmail = userEmailView.getText().toString();

    JSONObject jsonParams = new JSONObject();
    try {
        jsonParams.put("email", "your@email.com");
    } catch (JSONException e) {
        e.printStackTrace();


    }

    client.post(getApplicationContext(), url, jsonParams, "application/json", new AsyncHttpResponseHandler() {
        @Override
        public void onSuccess(int statusCode, Header[] headers, byte[] responseBody) {
            Log.d("Dog", "onSucess" + responseBody.toString());

        }

        @Override
        public void onFailure(int statusCode, Header[] headers, byte[] responseBody, Throwable error) {
            Log.e("Dog", "" + error.toString());
            Log.e("Dog", "status code " + String.valueOf(statusCode));
        }
    });

}

但是Android Studio告诉我将jsonParams转换为实体。在我从堆栈中获得的示例中,它使用以下代码来实现这一目标:

StringEntity entity = new StringEntity(jsonParams.toString());

但是我的android studio感到恐怖:

未处理的异常:java.io.UnsupportedEncodingException,

直到现在,我还没有找到解决这个问题的方法。

1 个答案:

答案 0 :(得分:0)

我设法使其正常工作,API现在返回了正确的响应和状态码200。由于StringEntity不是一个选项,因此我将JsonObject转换为ByteArrayEntity。

private void attempPost() {

    AsyncHttpClient client = new AsyncHttpClient();
    RequestParams params = new RequestParams();

    String userEmail = userEmailView.getText().toString();

    JSONObject jsonParams = new JSONObject();
    try {
        jsonParams.put("email", userEmail);
    } catch (JSONException e) {
        e.printStackTrace();


    }

    ByteArrayEntity be = new ByteArrayEntity(jsonParams.toString().getBytes());


    //TODO create a class to handle JSON post, getmethods and parse token value
    client.post(getApplicationContext(), API_URL, be, "application/json", new JsonHttpResponseHandler() {


        @Override
        public void onSuccess(int statusCode, Header[] headers, JSONObject response) {
            super.onSuccess(statusCode, headers, response);
            Log.d("Dog", "onSucess " + response.toString());
            Log.d("Dog", "status code " + String.valueOf(statusCode));
        }

        @Override
        public void onFailure(int statusCode, Header[] headers, Throwable throwable, JSONObject errorResponse) {
            super.onFailure(statusCode, headers, throwable, errorResponse);
            Log.e("Dog", "" + errorResponse.toString());
            Log.e("Dog", "status code " + String.valueOf(statusCode));
        }


    });

}