我收到两个针对api请求登录的响应。如果凭据正确,我会得到响应
{
"name": "Dheepak",
"email": "Email"
}
如果凭据无效,那么我
{
"status": "False"
}
我在任何一种情况下得到null poitner exception
。我想要的是我想检查我的回复中是否存在名为“status”的字段。我如何检查它?如果它是正常的json那里有使用.has()的规定;
我正在使用改造。请帮助1 !!
以下是回复
@Override
public void onResponse(Call<LoginResponse> call, Response<LoginResponse> response) {
if(response.body().getStatus().equals(null)){
Toast.makeText(mActivity,"No User Exist",Toast.LENGTH_SHORT).show();
}else {
String name = response.body().getName();
Toast.makeText(mActivity, name, Toast.LENGTH_SHORT).show();
}
答案 0 :(得分:2)
单程
在optString
中使用JSONObject
。在onResponse
方法中修改。
//在这里编辑,添加到Json
String jsonResponse = new Gson().toJson(result);
// String responseString = response.body().toString();
JSONObject jsonObject = new JSONObject(jsonResponse );
String status = jsonObject.optString("status");
if (TextUtils.isEmpty(status)) {
Toast.makeText(mActivity, "No User Exist", Toast.LENGTH_SHORT).show();
} else {
String name = jsonObject.getString("name");
Toast.makeText(mActivity, name, Toast.LENGTH_SHORT).show();
}
另一种方式
我将JSONObject
更改为Map
并获得了地图的大小。
然后根据大小,我们可以判断响应。
使用onResponse
方法进行编辑。
试试这个
try {
// edited here ,add toJson
String jsonResponse = new Gson().toJson(result);
// String responseString = response.body().toString();
JSONObject jsonObject = new JSONObject(jsonResponse );
Map<String, String> map = new HashMap<>();
Iterator<String> sIterator = jsonObject.keys();
while (sIterator.hasNext()) {
// get key
String key = sIterator.next();
// get value
String value = jsonObject.getString(key);
map.put(key, value);
System.out.println("key: " + key + ",value:" + value);
}
if (map.size() == 1) {
Toast.makeText(mActivity, "No User Exist", Toast.LENGTH_SHORT).show();
} else {
String name = jsonObject.getString("name");
Toast.makeText(mActivity, name, Toast.LENGTH_SHORT).show();
}
} catch (JSONException e) {
e.printStackTrace();
}
答案 1 :(得分:1)
您可以将响应转换为JsonObject,并使用 has()方法确定响应是否具有该特定字段。
String responseStg=response.body().toString();
try {
JSONObject responseObj= new JSONObject(responseStg);
if(responseObj.has("status")){
//Something
}else{
//Something else
}
}catch (Exception e){
}
答案 2 :(得分:1)
我知道可能是我迟到了但这里是Retrofit中动态响应的棘手解决方案
<强> 1。创建一个MODEL类或
{
"name": "Dheepak",
"email": "Email"
}
<强> 2。为错误创建第二个模型类,即LoginError
{
"status": "False"
}
第3。定义您的API调用方法,如:
@GET("your url")
Call<Object> getLogin();
最后
Call<Object> call = // call here your API and implement CallBack Method
call.enqueue(new Callback<Object>() {
@Override
public void onResponse(Call<Object> call, Response<Object> response) {
if(response instanceof FIRSTMODELCLASS){
// your response
}else{
// your error
}
}
@Override
public void onFailure(Call<Object> call, Throwable t) {
}
});