改造没有获得 JSON 对象的 ID
retrofit is not getting the id of JSON object
正在获取名称、状态和登录成功。但是它将 0 分配给 u_id (user id) ,它应该是 4。也许它从 Json 中获取 Id 作为字符串?我不知道整数的正确 JSON 格式。
JSON:
{
"id": "4",
"name": "nuku",
"status": "1",
"login": "sucess"
}
POJO:
public class 登录模型 {
@Expose
public static int id;
@Expose
public String name;
@Expose
private String status;
@Expose
private String login;
...}
接口:
String url = "http://192.168.10.5/tourist/v1";
@FormUrlEncoded
@POST("/login")
void Login(@Field("email") String email,
@Field("pass") String pass, Callback<LoginModel> cb);
}
改装函数调用:
RestAdapter adapter = new RestAdapter.Builder().setEndpoint(RestInterface.url).build();
//Creating Rest Services
final RestInterface restInterface = adapter.create(RestInterface.class);
//Calling method to get check login
restInterface.Login(email.getText().toString(), pass.getText().toString(), new Callback<LoginModel>() {
@Override
public void success(LoginModel model, Response response) {
//finish();
//startActivity(getIntent());
email.setText("");
pass.setText("");
int id = model.getUserId();
if (model.getStatus().equals("1")) { //login Success
SharedPreferences sharedPreferences = getSharedPreferences("MyLogin.txt", Context.MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.putBoolean("FirstLogin", true);
editor.commit();
Toast.makeText(LoginActivity.this, "Login In SuccessFully"+model.getUserId(), Toast.LENGTH_SHORT).show();
manager.setPreferences(LoginActivity.this, "status", "1");
String status=manager.getPreferences(LoginActivity.this,"status");
Intent i = new Intent(LoginActivity.this,MainActivity.class);
String name = model.getUser_name();
i.putExtra("username", name);
// String image = p.getPlace_image();
// i.putExtra("Thumbnail", image);
i.putExtra(MainActivity.EXTRA_USER,"username");
startActivity(i);
// String nameStr = email.getText().toString();
// i.putExtra("text1", nameStr);
//startActivity(i);
} else if (model.getStatus().equals("0")) // login failure
{
Toast.makeText(LoginActivity.this, "Invalid UserName/Pass ", Toast.LENGTH_SHORT).show();
Intent i = new Intent(LoginActivity.this, LoginActivity.class);
startActivity(i);
}
}
@Override
public void failure(RetrofitError error) {
finish();
startActivity(getIntent());
String merror = error.getMessage();
Toast.makeText(LoginActivity.this, merror, Toast.LENGTH_LONG).show();
}
});
}
要么是您的 LoginModel 不正确,要么是发送 JSON 的人操作不正确。 JSON 中的 ID 是字符串,而不是整数(注意双引号)
您必须在登录模型中将 ID 类型更改为字符串,但是,IMO,更好的解决方案是将其作为整数接收。
这是一个包含整数的 JSON 示例:
{
"email":"some@email.com",
"age":25,
"man":true,
"password":"123456"
}
我尝试将 Id 作为字符串获取,但改造后为其分配了空值,所以我只是使用此 echo json_encode($output,JSON_NUMERIC_CHECK); 将我的 JSON 转换为整数;成功了!
正在获取名称、状态和登录成功。但是它将 0 分配给 u_id (user id) ,它应该是 4。也许它从 Json 中获取 Id 作为字符串?我不知道整数的正确 JSON 格式。
JSON:
{
"id": "4",
"name": "nuku",
"status": "1",
"login": "sucess"
}
POJO: public class 登录模型 {
@Expose
public static int id;
@Expose
public String name;
@Expose
private String status;
@Expose
private String login;
...}
接口:
String url = "http://192.168.10.5/tourist/v1";
@FormUrlEncoded
@POST("/login")
void Login(@Field("email") String email,
@Field("pass") String pass, Callback<LoginModel> cb);
}
改装函数调用:
RestAdapter adapter = new RestAdapter.Builder().setEndpoint(RestInterface.url).build();
//Creating Rest Services
final RestInterface restInterface = adapter.create(RestInterface.class);
//Calling method to get check login
restInterface.Login(email.getText().toString(), pass.getText().toString(), new Callback<LoginModel>() {
@Override
public void success(LoginModel model, Response response) {
//finish();
//startActivity(getIntent());
email.setText("");
pass.setText("");
int id = model.getUserId();
if (model.getStatus().equals("1")) { //login Success
SharedPreferences sharedPreferences = getSharedPreferences("MyLogin.txt", Context.MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.putBoolean("FirstLogin", true);
editor.commit();
Toast.makeText(LoginActivity.this, "Login In SuccessFully"+model.getUserId(), Toast.LENGTH_SHORT).show();
manager.setPreferences(LoginActivity.this, "status", "1");
String status=manager.getPreferences(LoginActivity.this,"status");
Intent i = new Intent(LoginActivity.this,MainActivity.class);
String name = model.getUser_name();
i.putExtra("username", name);
// String image = p.getPlace_image();
// i.putExtra("Thumbnail", image);
i.putExtra(MainActivity.EXTRA_USER,"username");
startActivity(i);
// String nameStr = email.getText().toString();
// i.putExtra("text1", nameStr);
//startActivity(i);
} else if (model.getStatus().equals("0")) // login failure
{
Toast.makeText(LoginActivity.this, "Invalid UserName/Pass ", Toast.LENGTH_SHORT).show();
Intent i = new Intent(LoginActivity.this, LoginActivity.class);
startActivity(i);
}
}
@Override
public void failure(RetrofitError error) {
finish();
startActivity(getIntent());
String merror = error.getMessage();
Toast.makeText(LoginActivity.this, merror, Toast.LENGTH_LONG).show();
}
});
}
要么是您的 LoginModel 不正确,要么是发送 JSON 的人操作不正确。 JSON 中的 ID 是字符串,而不是整数(注意双引号)
您必须在登录模型中将 ID 类型更改为字符串,但是,IMO,更好的解决方案是将其作为整数接收。
这是一个包含整数的 JSON 示例:
{
"email":"some@email.com",
"age":25,
"man":true,
"password":"123456"
}
我尝试将 Id 作为字符串获取,但改造后为其分配了空值,所以我只是使用此 echo json_encode($output,JSON_NUMERIC_CHECK); 将我的 JSON 转换为整数;成功了!