#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», вы можете увидеть ее через сообщения журнала или всплывающие сообщения. Спасибо за ваш ответ.