2014-02-23 60 views
0

我在從我的xampp sql server檢索座標時遇到了一些麻煩。當我在我的手機上的URL(http://192.168.1.100/cwdb/get_all_coordinates.php)型,我得到JSON的這個座標列表:來自Android的JSON請求未執行

{"coordinates":[{"cid":"1","latitude":"36.544670","longitude":"36.544651"},{"cid":"2","latitude":"36.544270","longitude":"15.524650"},{"cid":"3","latitude":"37.544270","longitude":"16.524651"},{"cid":"4","latitude":"27.544270","longitude":"76.524651"},{"cid":"5","latitude":"27.523569","longitude":"31.146650"}],"success":1} 

然而,當我試圖通過我的Android應用程序獲取此我遇到下載JSON字符串的問題。

我已經在我的清單文件中包含了Internet權限。這是我的代碼,它調用http連接類。 system.out.print打印出「DATAnull」

private class JSONCoordinateTask extends AsyncTask<String, Void, ArrayList<Coordinate>> { 

@Override 
protected ArrayList<Coordinate> doInBackground(String... params) { 
    ArrayList<Coordinate> cList = new ArrayList<Coordinate>(); 
    String data = (new CoordinateHttpClient()).getCoordinateData(); 
    System.out.println("DATA"+data); 
    try { 
     cList = JSONParser.getCoordinate(data); 
    } catch (JSONException e) {    
     e.printStackTrace(); 
    } 
    return cList; 
} 

這裏是http客戶端類。這裏打印的系統根本不打印出來。所以我的猜測是,它由於某種原因完全不能執行?

public class CoordinateHttpClient { 

    private static String BASE_URL = "http://192.168.1.100/cwdb/get_all_coordinates.php"; 

    public String getCoordinateData() { 

     try { 
      URL oracle = new URL(BASE_URL); 
      BufferedReader in = new BufferedReader(new InputStreamReader(oracle.openStream())); 
      System.out.println("This doesn't print out"); 

      StringBuffer buffer = new StringBuffer(); 
      String line = null; 
      while ( (line = in.readLine()) != null) 
       buffer.append(line + "\r\n"); 

      in.close(); 
      return buffer.toString(); 
     } 
     catch(Throwable t) { 
      t.printStackTrace(); 
     } 
     return null; 
    } 
} 

任何幫助都會很好。

編輯:logcat的

02-23 15:35:47.105: E/TAG(29364): Error 
java.net.ConnectException: failed to connect to /192.168.1.100 (port 80): connect failed: ENETUNREACH (Network is unreachable) 
at libcore.io.IoBridge.connect(IoBridge.java:114) 
at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:192) 
at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:459) 
at java.net.Socket.connect(Socket.java:842) 
at libcore.net.http.HttpConnection.<init>(HttpConnection.java:76) 
at libcore.net.http.HttpConnection.<init>(HttpConnection.java:50) 
at libcore.net.http.HttpConnection$Address.connect(HttpConnection.java:340) 
at libcore.net.http.HttpConnectionPool.get(HttpConnectionPool.java:87) 
at libcore.net.http.HttpConnection.connect(HttpConnection.java:128) 
at libcore.net.http.HttpEngine.openSocketConnection(HttpEngine.java:315) 
at libcore.net.http.HttpEngine.connect(HttpEngine.java:310) 
at libcore.net.http.HttpEngine.sendSocketRequest(HttpEngine.java:289) 
at libcore.net.http.HttpEngine.sendRequest(HttpEngine.java:239) 
at libcore.net.http.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:273) 
at libcore.net.http.HttpURLConnectionImpl.getInputStream(HttpURLConnectionImpl.java:168) 
at java.net.URL.openStream(URL.java:462) 
at com.example.citywalks.CoordinateHttpClient.getCoordinateData(CoordinateHttpClient.java:17) 
at com.example.citywalks.MainActivity$JSONCoordinateTask.doInBackground(MainActivity.java:43) 
at com.example.citywalks.MainActivity$JSONCoordinateTask.doInBackground(MainActivity.java:1) 
at android.os.AsyncTask$2.call(AsyncTask.java:287) 
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305) 
at java.util.concurrent.FutureTask.run(FutureTask.java:137) 
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230) 
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076) 
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569) 
at java.lang.Thread.run(Thread.java:856) 
Caused by: libcore.io.ErrnoException: connect failed: ENETUNREACH (Network is unreachable) 
at libcore.io.Posix.connect(Native Method) 
at libcore.io.BlockGuardOs.connect(BlockGuardOs.java:85) 
at libcore.io.IoBridge.connectErrno(IoBridge.java:127) 
at libcore.io.IoBridge.connect(IoBridge.java:112) 
02-23 15:35:47.105: E/TAG(29364): ... 25 more 
+0

問題出在CoordinateHttpClient類中。我將返回null更改爲返回「aaa」,並返回該值。所以它只是不執行try語句。 – user2993328

+0

只是要確認這是我在我的清單中: <使用權限android:name =「android.permission.ACCESS_NETWORK_STATE」/> <使用權限android:name =「android.permission.INTERNET」/> – user2993328

+0

你的問題是在下載文件。嘗試將't.printStackTrace();'更改爲'Log.e(「TAG」,「Error」,t);'將異常寫入logcat。 – PaF

回答

2

假設你正確設置你的權限(請注意,uses-permission標籤必須manifest下,不根據application),那麼唯一的解釋就是你的手機沒有連接到您的服務器所在的同一網絡。由於它是本地網絡的IP,因此您的手機可以訪問它的唯一方式是連接到同一網絡,例如,通過wifi。

我建議您在打開手機上的瀏覽器並輸入地址(http://192.168.1.100/cwdb/get_all_coordinates.php)之前驗證地址是否可以通過手機到達。

+0

我是個白癡。我的IP改變了。謝謝你的幫助! – user2993328