Android 发送http请求

发送http请求是比较好耗时的操作,所以要把他们放在线程里面(我是这么理解的)

现在android版本越来越高,都在用HttpURLConnection这种方式发送链接(舍弃了原来的HtypClient)
发送请求大致分为如下几步
1.创建一个连接

URL url = new URL("http://192.168.0.105/login/login");

在这里要注意添加上http,否则可能会报不知协议的错误。
2.创建HttpURLConnection 实例

HttpURLConnection connection = (HttpURLConnection) url.openConnection();

3.选择提交的方式(这边我用post)

connection.setRequestMethod("POST");

4.设置超时时间

//连接超时
connection.setConnectTimeout(8000);
//读取超时
connection.setReadTimeout(8000);

5.发送是用的输入输出流

 //连接打开输出流
OutputStream os = connection.getOutputStream();
 //String str="str=123";
 //jsons数据拼接
 JSONObject json = new JSONObject();
 json.put("userPhone", phone);
  json.put("password", password);
 Log.i("json", json.toString());
 //把数据改为中文编码(接收时  接受dataStr)
String dataEncrypt = "dataStr=" + URLEncoder.encode(json.toString(), "UTF-8");
//数据写入输出流(发送)
os.write(dataEncrypt.getBytes());                    

6.Http 在请求之后会有返回的状态码
200-服务器成功的返回网页。404-请求的网页存在。503-服务不可用。

if (connection.getResponseCode() == 200) {
//接收服务器输入流信息
InputStream is = connection.getInputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(is));
  //拿到信息
 String  result = br.readLine();
 Log.i("返回数据:", result); 
 }

这样就拿到了返回的数据之后记得关闭创建的连接

 is.close();
 os.close();
 connection.disconnect();

总得代码

new Thread(new Runnable() {
            @Override
            public void run() {

                BufferedReader reader = null;
                try {
                     //new一个访问的url
                    URL url = new URL("http://192.168.0.105/login/login");
                    //创建HttpURLConnection 实例
                    HttpURLConnection connection = (HttpURLConnection) url.openConnection();
                    //提交数据的方式
                    connection.setRequestMethod("POST");
                    connection.setDoOutput(true);
                    //设置超时时间
                    connection.setConnectTimeout(8000);//连接超时
                    //读取超时
                    connection.setReadTimeout(8000);
                    //连接打开输出流
                    OutputStream os = connection.getOutputStream();
                    Log.i("userPhone", phone);
                    Log.i("psaaword", password);
                    //String str="str=123";
                    //jsons数据拼接
                    JSONObject json = new JSONObject();
                    json.put("userPhone", phone);
                    json.put("password", password);
                    Log.i("json", json.toString());
                    //把数据改为中文编码(接收时  接受dataStr)
                    String dataEncrypt = "dataStr=" + URLEncoder.encode(json.toString(), "UTF-8");
                    //数据写入输出流(发送)
                    os.write(dataEncrypt.getBytes());
                    if (connection.getResponseCode() == 200) {
                        //接收服务器输入流信息
                        InputStream is = connection.getInputStream();
                        BufferedReader br = new BufferedReader(new InputStreamReader(is));
                        //拿到信息
                        String  result = br.readLine();
                        Log.i("返回数据:", result); 
                        is.close();
                        os.close();
                        connection.disconnect();

                    }
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }).start();

你可能感兴趣的:(Android)