Ответ Android на проблему со скриптом

#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