我从API中获得了一个JSON响应,我已将其转换为字符串并尝试将其与真值或假值进行比较, 在日志猫我可以看到结果:
{
"message": "success",
"status": "Auth_Successful",
"response": "Authentication successful"
}
我正在尝试将其纳入if语句,如下所示
我尝试过大多数比较方法(==,。equals(),. compareTo())但没有得到任何结果
任何人都可以让我知道接触它的正确方法是什么,因为我还是Java和Android的新手。我看过很多类似的帖子,但无法弄明白。
非常感谢您在这件事上的时间和帮助。
package com.example.shiben.fabapp;
public class MainActivity extends AppCompatActivity {
private Request request;
private static final String Tag = MainActivity.class.getName();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button LoginButton = (Button) findViewById(R.id.loginButton);
EditText userName = (EditText) findViewById(R.id.userName);
EditText userPassword = (EditText) findViewById(R.id.userPassword);
final TextView displayTest = (TextView) findViewById(R.id.displayTest);
LoginButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
OkHttpClient client = new OkHttpClient();
MediaType mediaType = MediaType.parse("application/x-www-form-urlencoded");
RequestBody body = RequestBody.create(mediaType, "username=xxxxxxxxx&password=xxxxxxxxx");
Request request = new Request.Builder()
.url("http://9.xxx.xxx.xxx/test/xxxxx_api.aspx")
.post(body)
.addHeader("cache-control", "no-cache")
.addHeader("content-type", "application/json")
.build();
//execute the request
client.newCall(request).enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
Log.i(Tag, e.getMessage());
}
@Override
public void onResponse(Call call, Response response) throws IOException {
Log.i(Tag, response.body().string());
String result = response.body().toString();
//if (result==("{\"message\":\"success\",\"status\":\"Auth_Successful\",\"response\":\"Authentication successful\"}")){
if (result.compareTo("{\"message\":\"success\",\"status\":\"Auth_Successful\",\"response\":\"Authentication successful\"}")==0) {
//if (result.equals("{\"message\":\"success\",\"status\":\"Auth_Successful\",\"response\":\"Authentication successful\"}")) {
TastyToast.makeText(MainActivity.this, "String Comparison Success", TastyToast.LENGTH_LONG, TastyToast.SUCCESS);
}
}
});
}
});
}
}
答案 0 :(得分:0)
您应该解析JSON字符串并比较消息。
if (message.equals("success"))
如果您不想解析,可以尝试这个(不良做法):
if(response.contains("success"))
答案 1 :(得分:0)
在您的代码中尝试此操作。
String result = response.body().toString();
if(TextUtils.isEmpty(result)){
Toast.makeText(this, "result is null", Toast.LENGTH_SHORT).show();
return;
}
try {
JSONObject jsonObject = new JSONObject(result);
String message = jsonObject.optString("message");
String status = jsonObject.optString("status");
String response = jsonObject.optString("response");
if (TextUtils.equals("success", message)) {
TastyToast.makeText(MainActivity.this, "String Comparison Success", TastyToast.LENGTH_LONG, TastyToast.SUCCESS);
}
} catch (JSONException e) {
e.printStackTrace();
}
答案 2 :(得分:0)
String result = response.body().toString();
无效。请使用string()
方法代替toString()
@Override
public void onResponse(Response response) throws IOException {
if (response.isSuccessful()) {
doSomething(response.body().string());
}
}
private void doSomething(String response) {
}
答案 3 :(得分:0)
问题与OkHttp
有关这是因为当您调用以下内容时:
Log.i(Tag, response.body().string());
String result = response.body().toString();
字符串结果将为空,因为您已在Log中调用response.body()
。当你打电话时,它将被清空。
因此,您需要先将其保存到结果中,然后再从日志中调用它。像这样:
String result = response.body().toString();
Log.i(Tag, result);
此处来自documentation:
响应正文只能被使用一次。
此类可用于传输非常大的响应。例如,它 可以使用此类来读取大于的响应 分配给当前进程的整个内存。它甚至可以流动 响应大于当前设备上的总存储量 是视频流应用的常见要求。
因为这个类没有缓冲内存中的完整响应,所以 应用程序可能无法重新读取响应的字节。使用这个 使用bytes()或string()将整个响应读入内存。 或者使用source(),byteStream()或者传递响应 charStream()。
答案 4 :(得分:0)
我使用了排球而不是okhttp并将其排序, 以下是代码
public class MainActivity extends AppCompatActivity {
private static final String TAG = MainActivity.class.getName();
private Button btnSendRequest;
private RequestQueue mRequestQueue;
//creating a string request
private StringRequest stringRequest;
private String url = "http://9.xxx.xxx.xxx/test/xxxxxxx.aspx";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btnSendRequest = (Button) findViewById(R.id.loginBtn);
btnSendRequest.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//on click of the button send request and print the response
//initializing request queue and string request in sendRequestAndPrintResponse
sendRequestAndPrintResponse();
}
});
}
private void sendRequestAndPrintResponse() {
mRequestQueue = Volley.newRequestQueue(this);
stringRequest = new StringRequest(Request.Method.POST, url, new Response.Listener<String>() {
@Override
public void onResponse(String response) {
Log.i(TAG, "Success" + response.toString());
String result = response.toString();
TextView displayText = (TextView) findViewById(R.id.displayText);
displayText.setText(result);
if (result.equalsIgnoreCase("{\"message\":\"success\",\"status\":\"Auth_Successful\",\"response\":\"Authentication successful\"}")){
Toast.makeText(getApplicationContext(), "comparison successful", Toast.LENGTH_LONG).show();
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Log.i(TAG, error.toString());
}
}){
@Override
protected Map<String, String> getParams()
{
Map<String, String> params = new HashMap<String, String>();
params.put("username", "someone@example.com");
params.put("password", "myPassword");
return params;
}
};
mRequestQueue.add(stringRequest);
}
}
如果有人能让我知道okhttp出了什么问题,那将对今后的参考非常有帮助。