Проблемы при сравнении результата HttResponse в Android

#android #android-asynctask #httpresponse

#Android #android-asynctask #httpresponse

Вопрос:

У меня возникла проблема при попытке сравнить результат HttpResponse с простой строкой.

Приведенный ниже код просто получает ответ на Http-запрос. В этом случае результатом запроса является простое «ok», но когда я пытаюсь сравнить его с другой строкой, условие не работает.

Я могу показать ответ через toast message…to отладьте его и подтвердите, что это то, чего я ожидаю, но я не знаю, почему условие не работает.

Заранее благодарю.


imports go here...

public class HttpTest extends Activity {

 public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    DownloadWebPageTask task = new DownloadWebPageTask();
    task.execute(new String[] { "http://www.ecoeficiencia-ambiental.com/test/" });
}
private class DownloadWebPageTask extends AsyncTask<String, Void, String> {
    protected String doInBackground(String... urls) {
        String response = "";
        for (String url : urls) {
            DefaultHttpClient client = new DefaultHttpClient();
            HttpGet httpGet = new HttpGet(url);
            try {
                HttpResponse execute = client.execute(httpGet);
                InputStream content = execute.getEntity().getContent();
                BufferedReader buffer = new BufferedReader(new InputStreamReader(content));
                String s = "";
                while ((s = buffer.readLine()) != null) {
                    response  = s;
                }

            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        return response;
    }
    protected void onPostExecute(String result) {
        if(result == "ok"){
            Toast.makeText(HttpTest.this, result, Toast.LENGTH_LONG).show();
        }else{
            Toast.makeText(HttpTest.this, "the conditional fails, the result is: " result, Toast.LENGTH_LONG).show();
        }
    }
}
  

}

Примечание: у манифеста есть разрешение на использование Интернета. и код, и URL-адрес являются функциональными.

Ответ №1:

Вы не должны использовать оператор равенства для сравнения подобных строк

Попробуйте

 result.equals("ok");
  

Комментарии:

1. Почему я не должен? это обычная практика, использующая условное выражение для сравнения строк.

2. На самом деле я проверил ваше предложение, и оно работает, но у меня все еще есть сомнения, почему я не должен использовать «==» для сравнения строк. Я новичок в Android, ваша помощь будет оценена по достоинству.

3. Проведя небольшое исследование, я обнаружил следующее: используя == вместо equals() с объектами Когда вы хотите сравнить объекты, вам нужно знать, следует ли вам использовать ==, чтобы узнать, являются ли они одним и тем же объектом, или equals(), чтобы узнать, могут ли они быть разными объектами, но иметьто же значение. Такого рода ошибки может быть очень сложно найти. — Интересно… Я этого не знал. Большое вам спасибо за вашу помощь. 🙂

Ответ №2:

О, интересно! Я предполагаю, что строка, которую вы получаете от объекта reponse, также включает эти вещи:

 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
  

Не просто одна строка «ok», как вы думаете. Вот почему сравнение не удается.
Вы можете подтвердить ответ с помощью:

 string response = EntityUtils.toString(execute.getEntity()); 
  

Получайте удовольствие 🙂

Комментарии:

1. Я отладил строку, и она содержит только «ok», вы можете увидеть ее через сообщения журнала или всплывающие сообщения. Спасибо за ваш ответ.