2014-02-23 61 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