2013-09-25 69 views
0

我正在开发一个涉及调用RESTful API的Android应用程序。我有用Python编写的REST服务,在我的笔记本电脑上(192.168.156.1)在端口8080上运行。我用Connectify Wifi连接将我的手机连接到我的笔记本电脑。电话号码是192.168.156.112。现在,我可以通过手机的浏览器使用URL(例如http://192.168.156.1:8080/lighting/12345)访问该服务。但是,当我尝试从应用程序访问它时,我在LogCat中遇到了“拒绝连接”错误。以下是我用来建立连接的代码。连接到REST服务的Android应用程序 - 连接被拒绝

String sampleURL = "`http://192.168.156.1:8080/lighting/weert`"; 
     HttpClient Client = new DefaultHttpClient(); 
     try 
     { 
      HttpGet httpget = new HttpGet(sampleURL); 
      String serverString = ""; 
      HttpResponse response= Client.execute(httpget); 
      StatusLine statusLine = response.getStatusLine(); 
      if (statusLine.getStatusCode() == HttpStatus.SC_OK) { 
       ByteArrayOutputStream out = new ByteArrayOutputStream(); 
       response.getEntity().writeTo(out); 
       out.close(); 
       serverString = out.toString(); 
      } 
      threadMsg(SetServerString); 
      } 
     catch(Exception ex){ 
      Log.e("RESTCALL",ex.getMessage()); 
      threadMsg("Fail!"); 
     } 

threadMsg()是将响应字符串传递回UI线程的方法。

任何帮助解决这个问题将是伟大的!提前致谢!

更新:增加堆栈跟踪

I/ActivityManager( 246): START {act=android.intent.action.MAIN cat= [android.intent.category.LAUNCHER] flg=0x10200000 cmp=com.example.testreceiver/.MainActivity u=0} from pid 464 
    I/ActivityManager( 246): Displayed com.example.testreceiver/.MainActivity: +315ms 
    W/System.err(15799): org.apache.http.conn.HttpHostConnectException: Connection to http://192.168.156.1:8080 refused 
    D/AudioHardware( 89): AudioHardware pcm playback is going to standby. 
    D/AudioHardware( 89): closePcmOut_l() mPcmOpenCnt: 1 
    W/System.err(15799): at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:183) 
    W/System.err(15799): at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:164) 
    W/System.err(15799): at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:119) 
    W/System.err(15799): at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:360) 
    W/System.err(15799): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:555) 
    W/System.err(15799): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487) 
    W/System.err(15799): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:465) 
    W/System.err(15799): at com.example.testreceiver.MainActivity$1.run(MainActivity.java:47) 
    W/System.err(15799): at java.lang.Thread.run(Thread.java:856) 
    W/System.err(15799): Caused by: java.net.ConnectException: failed to connect to /192.168.156.1 (port 8080): connect failed: EHOSTUNREACH (No route to host) 
    W/System.err(15799): at libcore.io.IoBridge.connect(IoBridge.java:114) 
    W/System.err(15799): at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:192) 
    W/System.err(15799): at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:459) 
    W/System.err(15799): at java.net.Socket.connect(Socket.java:842) 
    W/System.err(15799): at org.apache.http.conn.scheme.PlainSocketFactory.connectSocket(PlainSocketFactory.java:119) 
    W/System.err(15799): at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:144) 
    W/System.err(15799): ... 8 more 
    W/System.err(15799): Caused by: libcore.io.ErrnoException: connect failed: EHOSTUNREACH (No route to host) 
    W/System.err(15799): at libcore.io.Posix.connect(Native Method) 
    W/System.err(15799): at libcore.io.BlockGuardOs.connect(BlockGuardOs.java:85) 
    W/System.err(15799): at libcore.io.IoBridge.connectErrno(IoBridge.java:127) 
    W/System.err(15799): at libcore.io.IoBridge.connect(IoBridge.java:112) 
    W/System.err(15799): ... 13 more 
    E/RESTCALL(15799): Connection to `http://192.168.156.1:8080` refused 

而且,这里是这样的服务器上运行的代码。

import socket 
    from bottle import route, [email protected]('/lighting/<name>', method='GET') 

    def hello(name="ABC"): 
    return name 

    run(host='192.168.156.1', port=8080, debug=True) 
+0

嗯......我不知道它是否是一个权限问题。你使用anroid.permission.INTERNET吗? –

+0

是的,我的清单里有这个。这可能与我没有添加的HTTP标头有关吗? –

+0

你是PC防火墙允许端口8080? –

回答

1

问题解决!我停止使用connectify热点并切换到我的手机和笔记本电脑现在连接的路由器。

相关问题