2014-02-19 84 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" 
    } 
] 

一切都很好。

但後來我試圖從我的ANDROID手機上運行的JAVA程序那樣做。它不起作用。以下是代碼段:

 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(); 
     } 

它確實檢索了一些數據。但這是WEIRD PART!它不是從我的數據庫表中檢索我的數據。相反,它從我不知道的地方檢索一些ODD文件!

這裏是什麼它是檢索示例:

<!-- 
    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"> 

到底是什麼呢?我不知道Cyber​​Tan是誰/什麼。爲什麼我沒有從我的數據庫中獲取數據?它似乎連接到它可以。它似乎在執行php文件,但它實際返回的是來自我從未見過的文件。

我完全困惑。 :)

+0

您是否嘗試過使用您的Java代碼也是JSON的不同端點? – Newbi3

回答

1

確定您在移動設備上沒有收到防火牆或數據包檢查問題? Cyber​​Tan似乎使無線/路由器產品。我會檢查您的家庭路由器的無線,並看看是否有一些保護措施阻止你。類似於某些電子郵件服務器將讀取附件和查找代碼的方式。

另外,如果您在訪問日誌中看到網絡服務器正在被擊中,那麼您對返回的響應感興趣。一些很好的舊tcpdump/wireshark會讓你的信息,因爲它沒有結束HTTPS

+0

這是一個有趣的區別。我剛通過一個不同的WiFi網絡連接,我確實得到了代碼200和OK響應(與其他WiFi網絡一樣),但返回的數據實際上是一個HTML頁面,提示我輸入密碼登錄網絡。 所以,似乎有什麼東西阻礙了我實際連接到我的PHP文件。 我有我的電腦本地WiFi網絡,但每次嘗試通過我的WiFi網絡連接,它表示連接失敗。這就是爲什麼我默許了其他一些本地(顯然是免費的)WiFi網絡。 –

+0

是的,這是一個防火牆問題。當我終於能夠通過我自己的本地WiFi進行連接時,我不再收到那些奇怪的文件,而是從我的數據庫中獲取實際數據。 謝謝你(或者我們在夏威夷說的「Mahalo」)爲你提供的所有幫助。 –

+0

沒問題,我有我的公平份額的攔截設備,病毒掃描儀,和其他即興表演。很高興你沒有必要花上幾天的時間,然後當你發現它時將你的路由器打成紙漿。哈哈。 :) – mhoglan

1

快速谷歌搜索告訴我,CyberTAN Inc.是一個網絡/無線設備的製造商。所以你看到的可能是你的WLAN路由器的響應。

而你所看到的也可能是某種奇怪的(緩存的)404錯誤響應。有一個在你的硬編碼URL一個小錯字在你的Java POST請求:

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

你一定要讀響應狀態代碼,並檢查它是否不應該以某種方式處理錯誤。您可能已經看到,它是一個404.此外,您應該更加具體地執行POST請求的catch-all-exceptions模塊。只捕獲這些方法顯式拋出的內容並記錄實際的異常。

+0

哇。感謝您發現錯字。 我檢查了返回的狀態,它返回「OK」code = 200,這應該意味着它執行的操作就好了。 但它仍然獲取該文件內容而不是數據庫數據。 –

+0

@RogerGarrett嗯......你的路由器很有趣。也許它不能解決用駱駝案例表示的域名。儘量寫成小寫。如果有的話,您也可以嘗試使用Android設備的手機網絡數據連接而不是WLAN。也許重置路由器有幫助,或者更好地嘗試訪問其管理頁面,並尋找一些緩存相關的功能,你可以清除或關閉 – tiguchi

+0

你指出我在我的URL中有一個錯字,促使我仔細查看一些其他潛在的錯別字。由於我的眼睛正在變老(與我一樣),結果證明我無法閱讀Belkin WiFi路由器底部密碼的小字母,並且嘗試嘗試使用錯誤的密碼連接到我自己的網絡。現在我擁有正確的密碼,一切正常。 謝謝你的幫助。非常感激。 –