HttpURLConnection connect() 将不起作用

HttpURLConnection connect() won't work

我尝试在我的 PC 上连接 php,但 Android 代码将停止在 con.connect() 我不知道这是怎么回事。

 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

您正在尝试连接到 localhost:8081,它本身就是 Android 设备。

使用 adb 通过 USB 将 forward/reverse 端口连接到您的计算机,或者您可以简单地将 localhost 替换为计算机在本地网络上的 IP 。示例:192.168.0.2:8081

其他潜在问题:

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

至少将 a.getMessage(); 替换为 a.printStackTrace() 以打印错误。但实际上你应该使用 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"/>