美文网首页
HTTP通信

HTTP通信

作者: Summer_27d1 | 来源:发表于2018-07-11 16:12 被阅读0次
    image.png
    image.png
    GET与POST的区别
    image.png
    http:上传:
    image.png
    Http:下载
    image.png
    image.png
    HttpURLConnection使用详解:
    https://blog.csdn.net/fightingXia/article/details/71775516

    如何使用HTTPURLConnetion 访问接口:
    https://blog.csdn.net/huaduotongtong/article/details/51076253

    在Android开发中常常需要访问接口来获取数据,这个时候可以使用HttpURLConnection来连接服务器并获取返回字符串。
    这样,该函数返回回来的字符串就是接口返回的字符串,如果该字符串为json格式的,那么按照json去解析便可以了。
    GET请求:
    布局:
    xml
    ···
    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context="com.example.lenovo.test_01.MainActivity"
    >

    <Button
        android:id="@+id/button"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Get"
        />
    
    <Button
        android:id="@+id/button2"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="POST" />
    
    <Button
        android:id="@+id/button3"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Button" />
    
    <TextView
        android:id="@+id/textView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="TextView" />
    

    </LinearLayout>

    ···
    *****MainActivity:**********************
    ···
    package com.example.lenovo.test_01;

    import android.os.Environment;
    import android.os.Handler;
    import android.os.Message;
    import android.support.v7.app.AppCompatActivity;
    import android.os.Bundle;
    import android.view.View;
    import android.widget.Button;
    import android.widget.TextView;

    import java.io.ByteArrayOutputStream;
    import java.io.File;
    import java.io.FileOutputStream;
    import java.io.InputStream;
    import java.io.OutputStream;
    import java.net.HttpURLConnection;
    import java.net.MalformedURLException;
    import java.net.URL;
    import java.net.URLEncoder;

    public class MainActivity extends AppCompatActivity implements View.OnClickListener{
    Button btGet,btPost ,btDownLoad;
    TextView tx;
    //安卓4.0之后规定联网的操作必须在子线程中完成
    //主线程中联网报错:android.os.NetworkOnMainThreadException

    //创建Hander
    Handler handler =new Handler(){
        @Override
        public void handleMessage(Message msg) {
            if (msg.what==0x111){
                tx.setText(msg.obj.toString());
            }
            if(msg.what==0x112){
                tx.setText(msg.obj.toString());
            }
        }
    };
    //创建联网对象
    HttpURLConnection con;
    //地址对象
    URL url;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
         init();
    }
    void init() {
        btGet = (Button) findViewById(R.id.button);
        btGet.setOnClickListener(this);
        btPost = (Button) findViewById(R.id.button2);
        btPost.setOnClickListener(this);
        btDownLoad = (Button) findViewById(R.id.button3);
        btDownLoad.setOnClickListener(this);
        tx = (TextView) findViewById(R.id.textView);
    }
    

    void getMothed(){
    new Thread(){
    public void run(){
    //封装网络地址
    //网址跟数据之间应?关联
    try {

                url =new URL("http://op.juhe.cn/onebox/movie/video?" +
                        "dtype=&q="+"复仇者联盟3: 无限战争"+"&key=d6c3131e11deddfd0bef9deadfa05334");
                //创建连接对象
                con= (HttpURLConnection) url.openConnection();
    

    // 设置连接对象属性
    con.setDoOutput(true);//允许发送 接收数据
    con.setDoInput(true);
    //设置请求方式
    con.setRequestMethod("GET");
    //设置请求超时和接收超时
    con.setConnectTimeout(10000);
    con.setReadTimeout(10000);

                //开始连接
                con.connect();
                //读取数据 获取输入流对象接收数据
                InputStream is=con.getInputStream();
                if (con.getResponseCode()==200){//获得的请求码 200 代表请求成功
                    ByteArrayOutputStream bos=  new ByteArrayOutputStream();
                    int length=-1;//标记最后一次搬运的长度
                    byte buffer[] =new byte[1024];
                    while ((length=is.read(buffer))!=-1){
                        bos.write(buffer,0,length);
                        bos.flush();
                    }
                    is.close();
                    bos.close();
    
                              Message message=handler.obtainMessage();
                              message.obj=bos.toString();
                              message.what=0x111;
                              handler.sendMessage(message);
    
    
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }.start();
    

    }
    @Override
    public void onClick(View view) {
    switch (view.getId()){
    //联网 4.0以后不允许主线程联网
    case R.id.button:
    //get请求 将地址和请求数据绑在一起 安全系数低 请求数据不能大于2kb
    getMothed();

               break;
           case R.id.button2:
               //post请求 地址对象中不需要数据
               getPost();
    
               break;
           case R.id.button3:
               getDownLoad();  //从服务器下载文件
               break;
       }
    }
    //从服务器下载文件
    void  getDownLoad(){
        new Thread() {
            public void run() {
                try {
                    //1.通过URL对象封装网址
                    url = new URL("http://169.254.195.164:8080/a3.jpg");
                    //2.通过URL对象获取连接对象
                    con = (HttpURLConnection) url.openConnection();
    

    // 3. 设置连接对象属性
    con.setDoOutput(true);//允许上传
    con.setDoInput(true);//允许下载
    con.setRequestMethod("POST"); //设置请求方式
    //设置请求超时和读取超时
    con.setConnectTimeout(10000);
    con.setReadTimeout(10000);
    con.connect();
    //4.判断是否请求成功
    if (con.getResponseCode() == 200) {//获得的请求码 200 代表请求成功
    //读取数据 获取输入流对象接收数据
    InputStream is = con.getInputStream();
    //判断SD卡是否存在
    if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){
    File file =new File(Environment.getExternalStorageDirectory()+"/my1710.jpg");
    FileOutputStream fos=new FileOutputStream(file);
    byte buffer[]=new byte[1024];
    int length=-1;
    while ((length = is.read(buffer)) != -1) {
    fos.write(buffer, 0, length);
    fos.flush();

                            }
                            is.close();
                            fos.close();
                        }else {
    
                          handler.sendEmptyMessage(2);
    
                        }
                    }
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }.start();
    
    }
    //post获取
    

    void getPost(){
    new Thread() {
    public void run() {
    //封装网络地址
    //网址跟数据之间应?关联
    try {
    //1.通过URL对象封装网址
    url = new URL("http://op.juhe.cn/onebox/movie/video");
    //
    //2.创建连接对象
    con = (HttpURLConnection) url.openConnection();
    // 3. 设置连接对象属性
    con.setDoOutput(true);//允许上传
    con.setDoInput(true);//允许下载
    con.setRequestMethod("POST"); //设置请求方式
    //设置请求超时和读取超时
    con.setConnectTimeout(10000);
    con.setReadTimeout(10000);
    con.connect();
    //4.发送数据
    OutputStream os=con.getOutputStream();
    byte data[]=( "dtype=&q=" + "复仇者联盟3: 无限战争" + "&key=d6c3131e11deddfd0bef9deadfa05334").getBytes("UTF-8");
    os.write(data,0,data.length);
    os.flush();
    os.close();
    //5.判断是否请求成功
    if (con.getResponseCode() == 200) {//获得的请求码 200 代表请求成功
    //读取数据 获取输入流对象接收数据
    InputStream is = con.getInputStream();
    ByteArrayOutputStream bos = new ByteArrayOutputStream();
    int length = -1;//标记最后一次搬运的长度
    byte buffer[] = new byte[1024];
    while ((length = is.read(buffer)) != -1) {
    bos.write(buffer, 0, length);
    bos.flush();

                      }
                      is.close();
                      bos.close();
    
                              Message message=handler.obtainMessage();
                              message.obj=bos.toString();
                              message.what=0x112;
                              handler.sendMessage(message);
    
    
                  }
              } catch (Exception e) {
                  e.printStackTrace();
              }
          }
      }.start();
    

    }

    }

    ···
    效果图:

    QQ图片20180711161552.png

    相关文章

      网友评论

          本文标题:HTTP通信

          本文链接:https://www.haomeiwen.com/subject/wsjhpftx.html