gpt4 book ai didi

Android Retrofit POST 请求不起作用,但在 Postman 中它有效

转载 作者:搜寻专家 更新时间:2023-11-01 09:26:49 25 4
gpt4 key购买 nike

我发现同样的问题 Android Retrofit - POST request doesn't work, but in Postman it works

但是我解决不了

这是gradle

compile 'com.squareup.retrofit2:retrofit:2.3.0'
compile 'com.squareup.retrofit2:converter-gson:2.3.0'
compile 'com.squareup.okhttp3:okhttp:3.8.0'
compile 'com.google.code.gson:gson:2.8.0'

这是我在android中发布请求的代码

static final String URL = "http://localhost:3000/";

public void map(){
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(URL)
.addConverterFactory(GsonConverterFactory.create())
.build();
Map map = new HashMap();
map.put("gender", UserSex);
map.put("age", UserAge);
map.put("name", UserName);
map.put("password", UserPw);
map.put("email", UserEmail);

GitHubService gitHubService = retrofit.create(GitHubService.class);
Call<RetrofitRepo> call = gitHubService.getUserItem(map);
call.enqueue(new Callback<RetrofitRepo>() {
@Override
public void onResponse(Call<RetrofitRepo> call, Response<RetrofitRepo> response) {
try {
RetrofitRepo repoList = response.body();
String message = repoList.getmessage();
String token = repoList.gettoken();

if (message.equals("registered successfully")) {
Intent intent = new Intent(UserEnroll.this, LoginActivity.class);
startActivity(intent);
Toast.makeText(context, "register success.", Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(context, "register failed.", Toast.LENGTH_SHORT).show();
}
}catch (Exception e){
e.printStackTrace();
}
}

@Override
public void onFailure(Call<RetrofitRepo> call, Throwable t) {

}
});
}

这是界面

public interface GitHubService {

@FormUrlEncoded
@POST("api/auth/login")
Call<RetrofitRepo> getPost(
@Field("username") String username
);

@FormUrlEncoded
@POST("api/auth/placeSearch")
Call<RetrofitRepo> getPlaceID(
@Field("placeID") String placeID
);

@FormUrlEncoded
@POST("api/auth/login")
Call<RetrofitRepo> getItem(
@FieldMap Map<String, String> option
);

@FormUrlEncoded
@POST("api/auth/register")
Call<RetrofitRepo> getUserItem(
@FieldMap Map<String, String> option
);

我使用 node js 这是响应代码

exports.register = (req, res) => {
const { email, password, name, age, gender } = req.body
let newUser = null

const create = (user) => {
if(user) {
throw new Error('email exists')
} else {
return User.create(email, password, name, age, gender)
}
}

const count = (user) => {
newUser = user
return User.count({}).exec()
}

const assign = (count) => {
if(count === 1) {
return newUser.assignAdmin()
} else {
return Promise.resolve(false)
}
}

const respond = (isAdmin) => {
res.json({
message: 'registered successfully',
admin: isAdmin ? true : false
})
}

const onError = (error) => {
res.status(409).json({
message: error.message
})
}

User.findOneByEmail(email)
.then(create)
.then(count)
.then(assign)
.then(respond)
.catch(onError)}

我请求使用 postman 并且成功了

http://localhost:3000/api/auth/register
{
"email": "test6@google.com",
"password": "abc123@",
"name": "user",
"age": "18",
"gender": "F"}

POST/api/auth/register 409 13.393 毫秒 - 26 或POST/api/auth/register 200 15.064 ms - 51 它在 Node 中响应

但它不适用于我使用改造的 Android 应用程序并且在 Node 中没有响应

最佳答案

  1. 检查您是否已将您的服务器上线
  2. 验证您请求的URL正确
  3. 如果您使用的是模拟器,则使用 IP 作为 10.0.2.2,如果使用的是真实设备,请使用相同的网络并使用系统的 IP

static final String URL = "http://IPADRESSOFSERVER:3000/ ";

对于模拟器,使用static final String URL = "http://10.0.2.2:3000/ ";

使用同一网络连接到本地网络。并使用系统的 IP 地址关闭系统防火墙和防病毒

打开浏览器(推荐使用 Chrome)并输入“http://IPADRESSOFSERVER:3000/someWebpageHOstedOnline”。如果可以访问,请检查 retrofit 电话。否则设备无法创建与服务器的连接

添加

app.get('/test',function(req,res){
res.send(Hello This is a Test);
});

在你的js文件中尝试访问http://IPADRESSOFSERVER:3000/test

关于Android Retrofit POST 请求不起作用,但在 Postman 中它有效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49993920/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com