无法 Post JSON 在 Android 中使用 OkHttp3 到服务器 Express js

Can´t Post JSON to server Express js using OkHttp3 in Android

我正在做一些测试,使用数据将新用户注册到我的数据库中,通过 post 发送 json。服务器 returns 静态字符串仅用于测试。我正在使用控制台和 CURL

得到正确的响应
curl --data ''  http://127.0.0.1:3000/api/user/register

 <!DOCTYPE html><html><head><title>Express</title><link rel="stylesheet" href="/stylesheets/style.css"></head><body><h1>Express</h1><p>Welcome to Express</p></body></html>

甚至使用 POSTMAN 扩展程序向同一个 URL 发送 post 请求,我也得到了正确的响应。但是下面的代码没有得到服务器的任何响应。少了什么东西?。它没有抛出任何错误,并且 json 在检查调试器后是正确的(这无关紧要,但以防万一有人想知道),只是一个常规字符串。调试器在此行失败

Response response = client.newCall(request).execute();



private void createUser(String name, String email, String password){

        //create JSON

         final String userJson = formatUserAsJSON(name,email,password);

        //send JSON

        new AsyncTask<Void,Void,String>(){

            @Override
            protected String doInBackground(Void... voids) {

                try {
                  //1.create client Object
                OkHttpClient client = new OkHttpClient();
                 //2.Define request being sent to server
                RequestBody postData=new FormBody.Builder()
                        .add("json",userJson)
                        .build();

                Request request=new Request.Builder()
                        .url("http://127.0.0.1:3000/api/user/register")
                        .post(postData)
                        .build();

                //3.Transport the request and wait for response to process next

                    Response response = client.newCall(request).execute();
                    String result = response.body().string();
                    return result;
                } catch (Exception e) {
                    Log.d("error_connection","couldn't connect to the API");
                    return null;
                }


            }

       }.execute();



    }

我希望得到有关此问题的反馈。非常感谢

编辑:服务器没有给出任何响应,因为 android 应用程序未访问它。我在 ubuntu 控制台中看到,nodejs 没有打印任何请求的任何消息......

编辑 2:在 Android 清单中,我拥有访问网络的用户权限,所以不是......

<uses-permission android:name="android.permission.INTERNET" />
 <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

您正在 FormBody

内发送您的 JSON

试试这个:

RequestBody postData = RequestBody.create(MediaType.parse("application/json; charset=utf-8"), userJson);

我解决了放置服务器网络 IP 的问题(如果你放置 Public 互联网 IP,它也可以工作,我试过了)因为 127.0.0.1 指的是 Genymotion 模拟器本身,愚蠢的我:S。但这就是答案。感谢大家的支持。