无法 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。但这就是答案。感谢大家的支持。
我正在做一些测试,使用数据将新用户注册到我的数据库中,通过 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。但这就是答案。感谢大家的支持。