Javascript 改进空响应onSuccess方法
我在YouTube上关注这一点,以改进post请求中发送对象的功能,但在emulator上遇到了一个错误,使用了null responseonResponse方法 问题: 主要活动:Javascript 改进空响应onSuccess方法,javascript,java,android,node.js,retrofit2,Javascript,Java,Android,Node.js,Retrofit2,我在YouTube上关注这一点,以改进post请求中发送对象的功能,但在emulator上遇到了一个错误,使用了null responseonResponse方法 问题: 主要活动: public class MainActivity extends AppCompatActivity { private EditText mName, mEmail, mAge, mTopics; private Button mButton; @Override protected void onCr
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();
}
});
}
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;
}
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;
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');
});
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;
Api.js:
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();
}
});
}
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;
}
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 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');
});
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;
我尝试过的:
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();
}
});
}
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;
}
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;
- 我已尝试在我的终端上使用“ipconfig”更改我机器的本地ip地址李>
- 在UserClient=@Headers(“内容类型:application/json”)|@FormURLEncoded中使用标题和FormURLEncoded
- 使用邮递员检查回复,成功完成
- 检查了Robomongo进行验证/
邮递员:
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();
}
});
}
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;
}
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;
获取请求
发布请求
机器人门戈
也许你的请求不好
尝试在onResponse()中添加null检查,并像下面这样访问原始响应。errorBody.string()BaseURL应该是:
BaseURL(“http://10.0.2.2:3000/“”
因为您的UserClient
接口具有以下路径:
@POST("api/users")
Call<User> createAccount(@Body User user);
为此:
private String topics;
添加了
if(response.body()==null){Log.e(“Error”,response.code()+”);Log.e(“Erro2”,response.errorBody().toString());return;}
并获得了e/Error:404e/Erro2:okhttp3.ResponseBody$1@35d2a64c
此更改触发了onFailure toast,不确定是否按预期的方式工作以将logcat放在问题上没有错误,它执行以下命令=@在失败时覆盖公共void(调用,可丢弃的t){Toast.makeText(MainActivity.this,“Failure”,Toast.LENGTH_SHORT)。show();}
将日志添加到问题2: