2014-02-19 5 views
0

У меня есть простая база данных на моей учетной записи GoDaddy, и я пытаюсь извлечь данные из нее. Я установил простой php-файл в своей учетной записи и могу вызывать его непосредственно из браузера, и он показывает, что извлеченные данные просто прекрасны. Вы можете увидеть его/запустить его здесь:Извлечение данных из онлайн-базы данных

http://thunderbirdtechnology.com/SnapVest/php/SnapVestDatabaseRetrieveAvailableOptions.php 

Вы получите следующее: отображается

[ 
    { 
     "ID": "1", 
     "CompanyName": "Yahoo Inc.", 
     "DateInvestStart": "2014-02-19 14:35:56", 
     "DateInvestEnd": "2014-02-28 11:35:44", 
     "DatePurchase": "2014-03-11 11:35:51" 
    } 
] 

Все хорошо.

Но тогда я пытаюсь сделать это из своей программы JAVA, работающей на моем телефоне ANDROID. И это не сработает. Вот пара кодов:

 InputStream inputStream = null; 
    String result = ""; 
    try 
    { 
     HttpClient httpclient = new DefaultHttpClient(); 
     // Here is where we specify where our php file (see sample above) is that will do the actual 
     // gathering up of the data. 
     HttpPost httppost = new HttpPost("http://www.ThunderbirdTechnology.com/SnapVes/php/SnapVestDatabaseRetrieveAvailableOptions.php"); 
     HttpResponse httpresponse = httpclient.execute(httppost); 
     HttpEntity httpentity = httpresponse.getEntity(); 

     inputStream = httpentity.getContent(); 
    } 
    catch(Exception e) 
    { 
     // Report "Error in http connect to database" 
     Toast.makeText(getBaseContext(), 
       "Error in http connect to database", Toast.LENGTH_LONG).show(); 
    } 

    try 
     { 
      // Convert response to string 
      BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream, "iso-8859-1"),8); 
      StringBuilder stringBuilder = new StringBuilder(); 
      String line; 
      while ((line = bufferedReader.readLine()) != null) 
      { 
       stringBuilder.append(line + "\n"); 
      } 

      inputStream.close(); 
      result = stringBuilder.toString(); 
     } 
     catch(Exception e) 
     { 
      // Report "Error converting result" 
      Toast.makeText(getBaseContext(), 
        "Error converting result", Toast.LENGTH_LONG).show(); 
     } 

Он действительно извлекает некоторые данные. Но вот ЗНАЧИТЕЛЬНАЯ ЧАСТЬ! Он НЕ извлекает мои данные из моей таблицы базы данных. Вместо этого он извлекает какой-то файл ODD из I-don-t-know-where!

Вот пример того, что он ВОССТАНОВЛЕНИЕ:

<!-- 
    Copyright 2003, CyberTAN Inc. All Rights Reserved 
This is SOURCE CODE of CyberTAN Inc. 
the contents of this file may not be disclosed to third parties, 
copied or duplicated in any form without the prior written 
permission of CyberTAN Inc. 
This software should be used as a reference only, and it not 
intended for production use! 
THIS SOFTWARE IS OFFERED "AS IS", AND CYBERTAN GRANTS NO WARRANTIES OF ANY 
KIND, EXPRESS OR IMPLIED, BY STATUTE, COMMUNICATION OR OTHERWISE. CYBERTAN 
SPECIFICALLY DISCLAIMS ANY IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS 
FOR A SPECIFIC PURPOSE OR NONINFRINGEMENT CONCERNING THIS SOFTWARE 
--> 
<HTML><HEAD><TITLE></TITLE> 
<meta http-equiv="expires" content="0"> 
<meta http-equiv="cache-control" content="no-cache"> 

Что это такое? Я не знаю, кто и что такое CyberTan. Почему я не получаю данные из своей базы данных? Кажется, он подключается к нему нормально. Кажется, что он выполняет файл php ОК, но то, что он на самом деле возвращает, - это какой-то файл, который я никогда не видел.

Я полностью смущен. :)

+0

Вы пробовали другую конечную точку с вашим Javacode, который также является JSON? – Newbi3

ответ

1

Уверены, что вы не получаете проблемы с брандмауэром или пакетом проверки на вашем мобильном телефоне? CyberTan, похоже, делает wifi/router продукты. Я бы проверил ваш домашний маршрутизатор для беспроводной связи и посмотрел, есть ли какая-то защита, которая блокирует вас. Подобно тому, как некоторые серверы электронной почты будут читать ваши вложения и искать код.

Также, если вы видите в своих журналах доступа, что веб-сервер попадает, вы заинтересованы в возвращении ответа. Некоторые старые добрые tcpdump/wireshark предоставят вам эту информацию, так как ее не превышают HTTPS

+0

Вот интересная разница. Я просто подключился через другую сеть Wi-Fi, и я действительно получаю код 200 и ответ OK (как и в другой сети WiFi), но возвращаемые данные на самом деле представляют собой html-страницу, в которой мне предлагается ввести пароль для входа в сеть. Итак, похоже, что что-то мешает моему фактическому подключению к моему файлу php. У меня есть локальная сеть WiFi для моих компьютеров, но каждый раз, когда я пытаюсь подключиться через сеть MY WiFi, это указывает на сбой соединения. Вот почему я не выполнял ни одной другой локальной сети (видимо, свободный доступ) WiFi. –

+0

Да, это была проблема межсетевого экрана. Когда я наконец смог подключиться через свой собственный локальный WiFi, я больше не получал эти странные файлы, но вместо этого теперь получаю фактические данные из своей базы данных. СПАСИБО (или «Махало», как мы говорим здесь, на Гавайях) за вашу помощь. –

+0

не проблема, у меня была моя доля перехватывающего оборудования, антивирусных сканеров и других риффов. рад, что вам не пришлось тратить дни, а затем избили своего маршрутизатора в мякоть, когда обнаружили его. ха-ха. :) – mhoglan

1

Быстрый поиск в Google сообщает мне, что CyberTAN Inc. является производителем сетевого/беспроводного оборудования. Так что вы видите там, вероятно, ответ вашего маршрутизатора WLAN.

И то, что вы видите, также, вероятно, является своего рода нечетным (кэшированным) ответом на ошибку 404. Существует крошечная опечатка в жесткой кодировке URL в запросе Java POST:

http://www.ThunderbirdTechnology.com/SnapVes/php/SnapVestDatabaseRetrieveAvailableOptions.php 
             ^-- t missing 

Вы обязательно должны прочитать код состояния ответа и проверить, если это не ошибка, которая должна быть обработана какой-то образом. Вероятно, вы могли видеть, что это 404. Кроме того, вы должны быть более конкретным с блоком catch-all-exceptions, который выполняет запрос POST. Только поймите то, что явно выбрано этими методами, и запишите фактическое исключение.

+0

Ничего себе. Спасибо, что нашли эту опечатку. Я проверил возвращенное состояние и вернул код «ОК» = 200, что, предположительно, означает, что он выполнил операцию просто отлично. Тем не менее он по-прежнему получает содержимое этого файла вместо данных базы данных. –

+0

@RogerGarrett Hm ... ваш роутер смешной. Возможно, он не может разрешить имя домена, записанное в виде заметок на верблюдах. Попробуйте написать его во всех нижних регистрах. Вы также можете попробовать подключиться к сети сотового телефона на устройстве Android вместо WLAN, если таковая имеется. Возможно, сброс маршрутизатора помогает или лучше попытаться получить доступ к своей странице администратора и найти некоторые связанные с кешированием функции, которые вы могли бы очистить или выключить. – tiguchi

+0

. Вы указали, что у меня была опечатка в моем URL-адресе, и я попросил вас внимательно посмотреть на некоторые другие потенциальные опечатки. С тех пор, как мои глаза становятся старше (вместе со мной), оказалось, что у меня возникли проблемы с чтением крошечной надписи пароля на нижней части моего беспроводного маршрутизатора Belkin, и я неоднократно вводил неправильный пароль при попытке для подключения к моей собственной сети. Теперь, когда у меня есть правильный пароль, все работает отлично. Благодарим за помощь. Очень признателен. –

Смежные вопросы