安卓Http请求(一)

1.什么是Http请求
Http请求是客户端和服务端之间,发送请求和返回应答的标准(TCP)。
客户端·发送一个Http请求后,就与服务器建立起了TCP连接,服务端接到请求并进行处理后返回给客户端响应数据。
2.什么是HttpUrlConnection
HttpURLconnection是基于http协议的,支持get,post,put,delete等各种请求方式,最常用的就是get和post。
3.如何使用HttpUrlConnection
创建URL对象;
通过URL对象调用openConnection()方法获得HttpUrlConnection对象;
HttpUrlConnection对象设置其他连接属性;
HttpUrlConnection对象调用getInputstream方法向服务器发送http请求;
读取输入流,转换成String字符串。
注意点:
在安卓中访问网络必须添加访问网络权限!
在安卓中访问网络必须放在子线程中进行!
4.使用HttpUrlConnection获取HTTP请求实例
首先加一下访问网络权限

<uses-permission android:name="android.permission.INTERNET"></uses-permission>

然后开始进行代码编写

public class MainActivity extends AppCompatActivity {
private Button button;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        bindId();
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
            //安卓异步操作
                new Thread(new Runnable() {
                    @Override
                    public void run() {
                        getWebinfo();
                    }
                }).start();
            }
        });
    }

    private void getWebinfo() {
        try {
            //1.找水源---创建URL(统一资源定位器)
            URL url=new URL("http://www.baibu.com/");
            //2.开水闸---openCOnnection
            HttpURLConnection httpURLConnection= (HttpURLConnection) url.openConnection();
            //3.建管道---InputStream
            InputStream inputStream=httpURLConnection.getInputStream();
            //4.建蓄水池---InputStreamReader
            InputStreamReader inputStreamReader=new InputStreamReader(inputStream,"UTF-8");
            //5.水桶盛水——BufferedReader
            BufferedReader bufferedReader=new BufferedReader(inputStreamReader);

            StringBuffer stringBuffer=new StringBuffer();
            String temp=null;

            //循环做盛水工作---while循环
            while ((temp=bufferedReader.readLine())!=null){
               stringBuffer.append(temp);
            }

            //关闭水池入口,从管道到水桶
            bufferedReader.close();
            inputStreamReader.close();
            inputStream.close();
        //打印日志
            Log.e("Main",stringBuffer.toString());


        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    //绑定Id
    private void bindId() {
        button=findViewById(R.id.cc);
    }
}

最后得到以下图片就成功了。
这里写图片描述
2)实例二加载图片
先写布局文件

<?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:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.example.ll.skt.CmsActivity">
<Button
    android:text="加载图片"
    android:id="@+id/jaizaitup"
    android:layout_width="match_parent"
    android:layout_height="50dp" />
    <ImageView
        android:scaleType="fitCenter"
        android:id="@+id/tupian"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />
</LinearLayout>

接着创一个class类继承AsyncTask抽象方法

package com.example.ll.skt;

import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.AsyncTask;
import android.widget.ImageView;

import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;

/**
 * Created by ll on 2018/3/13.
 */

public class Imgload extends AsyncTask<String,Integer,Bitmap> {
    private ImageView imageView;
//为什么要加一个构造方法-----因为有传值需求
    public  Imgload(ImageView imageView){
        this.imageView=imageView;
    }
    @Override
    protected Bitmap doInBackground(String... strings) {
        //加载图片,最后获得一个Bitma对象,返回Bitmap对象
        Bitmap bitmap=null;
        try {
            URL url=new URL(strings[0]);
            HttpURLConnection httpURLConnection= (HttpURLConnection) url.openConnection();
            InputStream inputStream=httpURLConnection.getInputStream();
          bitmap= BitmapFactory.decodeStream(inputStream);//把输入流转换成Bitmap类型对象
        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return bitmap;
    }

    @Override
    protected void onPostExecute(Bitmap s) {
        super.onPostExecute(s);
        imageView.setImageBitmap(s);
    }
}

最后在Activity进行图片地址填写

package com.example.ll.skt;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;

public class CmsActivity extends AppCompatActivity {
private Button btn;
private ImageView imageView;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_cms);

        BindId();

        btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Imgload task=new Imgload(imageView);
                task.execute("http://img31.mtime.cn/mg/2012/10/30/201631.37192876.jpg");
            }
        });
    }


    private void BindId() {
        btn=findViewById(R.id.jaizaitup);
        imageView=findViewById(R.id.tupian);
    }
}

产生效果图如下
这里写图片描述

  • 4
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值