2017-05-24 74 views
0

我尝试连接我的电脑上的PHP,但Android代码将停止在con.connect() 我不知道它会发生什么。HttpURLConnection连接()将无法工作

public String doInBackground(Void... arg0){ 
    HttpURLConnection con = null; 
    String urlString = "http://localhost:8081/PHP/Android_SQL.php"; 
    System.out.println("before try"); 

    String res = ""; 
    try { 
     URL url = new URL(urlString); 
     con = (HttpURLConnection) url.openConnection(); 
     con.setReadTimeout(15000); 
     con.setConnectTimeout(10000); 
     con.setRequestMethod("GET"); 

     //set input and output descript 
     con.setDoInput(true); 

     con.setDoOutput(false); // in needed? 
     System.out.println("connecting"); 
     con.connect(); // won't work 
     System.out.println("connect "); 
     System.out.println(con.getURL()); 

     BufferedReader br = new BufferedReader(new InputStreamReader(con.getInputStream(), "UTF-8")); 
     StringBuilder sb = new StringBuilder(); 
     String line = null; 
     while ((line = br.readLine()) != null) { 
      System.out.println(line); 
      sb.append(line + "\n"); 
      System.out.println(line); 
     } 


     json = sb.toString(); 
     br.close(); 
     return json; 

    }catch (SocketTimeoutException a){ 
     a.getMessage(); 
    }catch (IOException b){ 
     b.getMessage(); 
    }catch (Exception e) { 
     e.getMessage(); 
    } 
    finally { 
     System.out.println("sueecssful"); 
    } 
    return null; 
} 

我发现其中一个问题是SSL认证?

的logcat的:

05-24 20:27:44.032 3089-3089/com.example.user.tophp I/System.out: click the button 
05-24 20:27:44.033 3089-3237/com.example.user.tophp I/System.out: before try 
05-24 20:27:44.033 1524-1595/system_process W/AudioTrack: AUDIO_OUTPUT_FLAG_FAST denied by client 
05-24 20:27:44.033 3089-3237/com.example.user.tophp I/System.out: connecting 
05-24 20:27:44.036 3089-3237/com.example.user.tophp I/System.out: sueecssful 
+0

什么是错误您收到? – Marc

+0

点击按钮后,logcat将只会在'connect()'之前和'finally {}'之前显示'tag',换句话说,没有错误响应 –

+0

您可以复制/粘贴相关的logcat吗? – Marc

回答

1

您正在尝试连接到localhost:8081这本身就是在Android设备。通过USB

使用adb到港口前进/后退到您的计算机,或者你可以简单地与您的计算机的IP localhost替换本地网络上。例如:192.168.0.2:8081

其他潜在的问题:

catch (SocketTimeoutException a){ 
     a.getMessage(); 
    }catch (IOException b){ 
     b.getMessage(); 
    }catch (Exception e) { 
     e.getMessage(); 
    } 

至少有a.printStackTrace()取代a.getMessage();打印错误。不过说真的,你应该使用Log.e("MyTag", "Error", a); * https://developer.android.com/reference/android/util/Log.html

catch (SocketTimeoutException a){ 
     Log.e("MyTag", "Timout Error", a); 
    }catch (IOException b){ 
     Log.e("MyTag", "IO Error", b); 
    }catch (Exception e) { 
     Log.e("MyTag", "Error", e); 
    } 

还要确保您有以下添加到您的清单<uses-permission android:name="android.permission.INTERNET"/>

+0

谢谢,我已添加'<使用权限android:name =“android.permission.INTERNET”/>'到清单,并通过我的主机名使用URL(从no-ip) 。我会改变'catch exception'语句。 –

+0

谢谢,我收到错误消息:IO错误java.net.ConnectException:10000ms后无法连接到本地/ 127.0.0.1(端口8081):isConnected失败:ECONNREFUSED(连接被拒绝)'我会尽力解决它,谢谢很多 –

+0

您无法连接到'localhost',因为您没有在Android设备上运行网络服务器。 – ejohansson