HttpURLConnection在Android上不起作用

时间:2017-05-17 10:27:53

标签: java android httpurlconnection bufferedinputstream

我遇到了问题而且真的不知道出了什么问题: - /

我点击按钮后调用了一个简单的函数

public void clickFunc(View view) {

        StringBuilder result = new StringBuilder();
        try {
            URL url = new URL("http://google.com");

            HttpURLConnection conn = (HttpURLConnection) url.openConnection();
            conn.setReadTimeout(15000 /* milliseconds */);
            conn.setConnectTimeout(15000 /* milliseconds */);
            conn.setRequestMethod("POST");
            conn.setDoInput(true);
            conn.setDoOutput(true);
            conn.connect();
            int responseCode=conn.getResponseCode();

            if (responseCode == HttpsURLConnection.HTTP_OK) {

                InputStream in = new BufferedInputStream(conn.getInputStream());
                BufferedReader reader = new BufferedReader(new InputStreamReader(in));

                String line;

                while ((line = reader.readLine()) != null) {

                    result.append(line);
                }
                in.close();
                httpTxt.setText(result.toString());

            }
            else {
                httpTxt.setText("false : "+responseCode);
            }
        }
        catch(Exception e){
            httpTxt.setText("Exception: " + e.getMessage());
        }


    }

但是点击后我的输出是Exception:null

在清单中我有<uses-permission android:name="android.permission.INTERNET" />

此代码与我在此处或互联网上提及的所有代码相同: - /

httptxt是我的texview,用于页面输出

谢谢

2 个答案:

答案 0 :(得分:2)

好的,我不知道我必须在后台做它...它现在正在工作,谢谢!

public void clickFunc(View view) {

        new SendPostRequest().execute();
    }
    private class SendPostRequest extends AsyncTask<Void, Void, String> {

    protected String doInBackground (Void... params) {

        StringBuilder result = new StringBuilder();
        HttpURLConnection conn = null;
        BufferedReader reader;

        try {
            URL url = new URL("http://stackoverflow.com"); 

            conn = (HttpURLConnection) url.openConnection();
            conn.setRequestMethod("GET");
            conn.setReadTimeout(15000);
            conn.setConnectTimeout(15000);
            conn.setDoInput(true);
            conn.setDoOutput(true);
            conn.connect();
            int responseCode=conn.getResponseCode();

            if (responseCode == HttpsURLConnection.HTTP_OK) {

                InputStream in = new BufferedInputStream(conn.getInputStream());
                reader = new BufferedReader(new InputStreamReader(in));

                String line;

                while ((line = reader.readLine()) != null) {

                    result.append(line);
                }
                in.close();
                return(result.toString());

            }
            else {
                return("false : "+responseCode);
            }
        }
        catch(Exception e){
            return("Exception: " + e.getMessage());
        }
    }
        protected void onPostExecute(String s) {
            super.onPostExecute(s);
            httpTxt.setText(s);
        }

    }

我不是一个Android程序员,所以即使它基本我也不知道,对不起家伙:)

关于我的应用程序如果你感兴趣我为什么想要它 - 我读了一个条形码,转到php脚本,如果有这个代码则查看数据库并返回true或false

答案 1 :(得分:0)

android上有很多线程,你什么时候点击http请求这意味着它可以与另一个线程一起工作,所以如果你想点击一个http请求你必须把它放在异步类下因为它&#39; sa长操作,最后如果你想通过http响应改变 你必须把你的更改放在UI线程中,这意味着它应该在HandlerRunOnUiThread下,因为异步任务不能直接访问UI线程 如果你不想使用Asynctask和runUiThred都不是处理程序  使用volley谷歌的API允许