#java #android #httpclient
#java #Android #httpclient
Вопрос:
Я использую HttpClient с использованием метода POST для отправки строки в скрипт. Скрипт работает нормально, он просто проверяет, существует ли таблица в базе данных. Если таблица существует, «1» возвращается эхом.
В следующем коде все работает нормально
HttpClient client = new DefaultHttpClient();
HttpPost post = new HttpPost("//remote//script.php");
List<NameValuePair> pairs = new ArrayList<NameValuePair>();
pairs.add(new BasicNameValuePair("tblname", concatenated));
try
{
post.setEntity(new UrlEncodedFormEntity(pairs));
}
catch (UnsupportedEncodingException e)
{
e.printStackTrace();
}
try
{
HttpResponse response = client.execute(post);
entity = response.getEntity();
res = EntityUtils.toString(entity); //this is now the echo back from the script, "1" means tbl already exists exists
}
catch (ClientProtocolException e)
{
e.printStackTrace();
}
catch (IOException e)
{
e.printStackTrace();
}
Toast msg1 = Toast.makeText(main.this, res, Toast.LENGTH_LONG);
msg1.setGravity(Gravity.CENTER, msg1.getXOffset() / 2, msg1.getYOffset() / 2);
msg1.show();
SavePreferences("prefs", concatenated);
//fire the authed intent
startauthedactivity();
}
Если таблица, предоставленная скрипту exists 1, отображается в тосте в конце, если она не существует, то тост пуст, это правильное поведение.
Когда я применяю -if- к ответу, он всегда вызывает истинное условие, даже если таблица существует. В следующем коде, если таблица существует, то res должно быть = 1, а условие неверно, поэтому блок else должен сработать, но этого никогда не происходит. Однако, как ни странно, если я передаю скрипту таблицу, которая существует, то в тосте действительно отображается 1…
if(res != "1")
{
Toast msg1 = Toast.makeText(main.this, res, Toast.LENGTH_LONG);
msg1.setGravity(Gravity.CENTER, msg1.getXOffset() / 2, msg1.getYOffset() / 2);
msg1.show();
SavePreferences("prefs", concatenated);
//fire the authed intent
startauthedactivity();
}
else
{
//do nothing
}
Ответ №1:
В Java вы должны использовать equals() для сравнения строк
if("1".equals(res)) {...
Обратите внимание, что вы должны использовать "1".equals(res)
вместо res.equals("1")
.
Если res имеет значение null
, то первый будет работать, поскольку equals
обрабатывает нулевые аргументы. Второй получит NullPointerException
, потому что res равно нулю 🙂
Комментарии:
1. 2 самых быстрых ответа за всю историю. просто проверяю: D
Ответ №2:
изменить
if(res != "1")
Для
if(res.equals("1"))
Почему?
==
сравнивает ссылку на объект (его положение в памяти). equals
сравнивает содержимое строки.
Комментарии:
1. 2 самых быстрых ответа за всю историю. просто проверяю: D