android / java中的字符串比较

时间:2017-09-18 02:32:51

标签: java android

我从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);
                        }
                    }
                });
            }
        });
    }
}

5 个答案:

答案 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出了什么问题,那将对今后的参考非常有帮助。