对成功方法改造空值响应

我正在按照YouTube中的这个教程进行Retrofit,用于在发布请求中发送对象,但在模拟器上遇到onResponse方法为空响应的错误

问题: 零响应

主要活动:

public class MainActivity extends AppCompatActivity { private EditText mName, mEmail, mAge, mTopics; private Button mButton; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mName = findViewById(R.id.editText); mEmail = findViewById(R.id.editText2); mAge = findViewById(R.id.editText3); mTopics = findViewById(R.id.editText4); mButton = findViewById(R.id.button); mButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { User user = new User( mName.getText().toString(), mEmail.getText().toString(), Integer.parseInt(mAge.getText().toString()), mTopics.getText().toString().split(",") ); //Added proof its not a NPE!!!!!!!!!!!!!!!!!!!!!!!!!!!!! Log.d("Main", mName.getText().toString() + mName.getText().toString()+ Integer.parseInt(mAge.getText().toString()) + Integer.parseInt(mAge.getText().toString()) +mTopics.getText().toString().split(",")); sendNetworkRequest(user); } }); } private void sendNetworkRequest(User user) { Retrofit.Builder builder = new Retrofit.Builder() .baseUrl("http://10.0.2.2:3000/api/users/") .addConverterFactory(GsonConverterFactory.create()); Retrofit retrofit = builder.build(); UserClient client = retrofit.create(UserClient.class); Call<User> call = client.createAccount(user); call.enqueue(new Callback<User>() { @Override public void onResponse(Call<User> call, Response<User> response) { Toast.makeText(MainActivity.this, "Success UserID = "+ response.body(), Toast.LENGTH_SHORT).show(); } @Override public void onFailure(Call<User> call, Throwable t) { Toast.makeText(MainActivity.this, "Failure", Toast.LENGTH_SHORT).show(); } }); } 

}

非NPEcertificate:

不是NPE

UserClient:

 public interface UserClient { @POST("api/users") Call<User> createAccount(@Body User user); } 

用户:

 public class User { private Integer id; private int age; private String name, email; private String [] topics; public Integer getId() { return id; } public User(String name, String email, int age, String[] topics) { this.age = age; this.name = name; this.email = email; this.topics = topics; } 

Node.js的

App.js

 const express = require('express'); const bodyParser = require('body-parser'); const routes = require('./routes/api'); const mongoose = require('mongoose'); const app = express(); mongoose.connect('mongodb://localhost/user1', { useMongoClient: true }); mongoose.Promise = global.Promise; app.use(bodyParser.json()); app.use('/api', routes); app.listen(process.env.port || 3000, function(){ console.log('Using PORT 3000'); }); 

Api.js:

 const express = require('express'); const router = express.Router(); const User = require('../models/user'); router.get('/users', function(req, res, next){ res.send({type: "GET"}); }); router.post('/users', function(req, res, err){ User.create(req.body).then(function(user){ res.send(user); }); }); module.exports = router; 

user.js的

 const mongoose = require('mongoose'); const Schema = mongoose.Schema; const UserSchema = new Schema({ name: { type: String }, email: { type: String }, age: { type: Number }, topics: { type: String } }); const User = mongoose.model('user', UserSchema); module.exports = User; 

我曾尝试过:

  • 我已经尝试使用我的terminal上的'ipconfig'更改我的机器的本地IP地址的BASE_URL 。 =' http://192.168.XX:3000 / api / users / '
  • UserClient中使用Headers和FormURLEncoded = @Headers(“Content-Type:application / json”)| @FormUrlEncoded。
  • 使用邮递员检查成功发生的答复。
  • 检查Robomongo进行validation/

邮差:

获取请求 获取请求

发布请求 发布请求

Robomongo Robomongo

BaseURL应该是:baseUrl baseUrl("http://10.0.2.2:3000/")因为你的UserClient接口有path:

 @POST("api/users") Call<User> createAccount(@Body User user); 

UPDATE

您的主题字段应该是String不是String[]

改变这个:

 private String [] topics; 

对此:

 private String topics; 

也许你正在做一个不好的要求?

尝试在onResponse()中添加一个空的检查,并像这个response.errorBody.string()一样访问原始响应。