安卓网络通讯小结

1.GET和POST的区别

Post请求可以向服务器传送数据,数据对用户不可见。而get是把参数数据队列加到提交的URL中,例如(http://www.baidu.com/s?w=%C4&inputT=2710

get 传送的数据量较小。post传送的数据量较大。

get安全性非常低,post安全性较高。

2.HttpURLConnection请求网络数据实例

首先获取网络访问权限,在AndroidMainfest文件夹下在mainfast属性下添加一段代码:

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

在主函数中实现

package com.example.demo5;

import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Handler;
import android.os.Message;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;

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

public class Main4Activity extends AppCompatActivity {
    private Button main4_btn;
    private ImageView imageView;
    private Handler handler=new Handler(){
        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);
            Bitmap bi= (Bitmap) msg.obj;
            imageView.setImageBitmap(bi);
        }
    };
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main4);
        main4_btn=findViewById(R.id.main4_btn);
        imageView=findViewById(R.id.main_iv);
        main4_btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                new Thread(new Runnable() {
                    @Override
                    public void run() {
                        getWebInfo();

                    }

                }).start();
            }

        });


    }

        private void getWebInfo() {
        try {

            URL url=new URL("https://www.baidu.com.cn");
            HttpURLConnection connection= (HttpURLConnection) url.openConnection();
            InputStream inputStream=connection.getInputStream();
            InputStreamReader reader=new InputStreamReader(inputStream);
            BufferedReader bufferedReader=new BufferedReader(reader);
            String temp="";
            StringBuffer stringBuffer=new StringBuffer();
            while ((temp=bufferedReader.readLine())!=null){
                stringBuffer.append(temp);
            }
            Log.e("WEB", "getWebInfo:*****************************"+stringBuffer.toString() );
        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

    }

}
<?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:orientation="vertical"
    android:layout_height="match_parent"
    tools:context=".Main4Activity">
    <Button
        android:id="@+id/main4_btn"
        android:layout_width="match_parent"
        android:layout_height="40dp"
        android:text="点击上网"/>
    <ImageView
        android:id="@+id/main_iv"
        android:scaleType="centerCrop"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

</LinearLayout>

2.HttpURLConnection加载网络图片实例

图片url地址只需要在网络里随便找一张图片,右击它选择获取图片地址。

package com.example.demo5;

import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Handler;
import android.os.Message;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;

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

public class Main4Activity extends AppCompatActivity {
    private Button main4_btn;
    private ImageView imageView;
    private Handler handler=new Handler(){
        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);
            Bitmap bi= (Bitmap) msg.obj;
            imageView.setImageBitmap(bi);
        }
    };
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main4);
        main4_btn=findViewById(R.id.main4_btn);
        imageView=findViewById(R.id.main_iv);
        main4_btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                new Thread(new Runnable() {
                    @Override
                    public void run() {

                        getWebInfoImg();
                    }

                }).start();
            }

        });


    }
    private void getWebInfoImg() {
        try {
            URL url=new URL("https://timgsa.baidu.com/timg?image&quality=80&size=b10000_10000&sec=1528451090&di=5c8702bf9473c14aa7bf6e130d625dc5&src=http://img4.duitang.com/uploads/item/201407/12/20140712214636_QeyrJ.jpeg");
            HttpURLConnection connection= (HttpURLConnection) url.openConnection();
            InputStream inputStream=connection.getInputStream();
            Bitmap bitmap=BitmapFactory.decodeStream(inputStream);
            Message message=handler.obtainMessage();
            message.obj=bitmap;
            handler.sendMessage(message);
        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

    }




}

layout文件和2相同
4.String/StringBuffer/StringBuilder有什么区别
String 字符串常量
String 是不可变的对象, 因此在每次对 String 类型进行改变的时候其实都等同于生成了一个新的 String 对象
StringBuffer 字符串变量(线程安全)
每次结果都会对 StringBuffer 对象本身进行操作,而不是生成新的对象,再改变对象引用
StringBuilder 字符串变量(非线程安全)
一个类似于 String 的字符串缓冲区,但不能修改,可将字符串缓冲区安全地用于多个线程。可以在必要时对这些方法进行同步,因此任意特定实例上的所有操作就好像是以串行顺序发生的,该顺序与所涉及的每个线程进行的方法调用顺序一致。

猜你喜欢

转载自blog.csdn.net/xfscy/article/details/80638710