I find same problem this Android Retrofit - POST request doesn't work, but in Postman it works
But I could not solve it
this is 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' this is my code to post request in 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) { } }); } and this is interface
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 ); }
i use node js this is response code
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)} I requested using a postman and it worked
http://localhost:3000/api/auth/register { "email": "[email protected]", "password": "abc123@", "name": "user", "age": "18", "gender": "F"} POST /api/auth/register 409 13.393 ms - 26 or POST /api/auth/register 200 15.064 ms - 51 it responded in node
but its not work on my android app using retrofit and not responded in node