HTTP通信

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
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,128评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,316评论 3 388
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,737评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,283评论 1 287
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,384评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,458评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,467评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,251评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,688评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,980评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,155评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,818评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,492评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,142评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,382评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,020评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,044评论 2 352

推荐阅读更多精彩内容