1. 程式人生 > >獲取網路請求

獲取網路請求

package com.example.lvxinxin.androidzxdayone;

import android.annotation.SuppressLint;
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 android.widget.TextView;

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

/**

  • 今天的內容很重要

  • 1:JSON解析

  • 2:Handler Looper MessageQueue Message

  • HTTPURLConnection+URL(獲取網址裡面的資料)

  • 1:有網路就得加許可權 android.permission.INTERNET

  • 2:我們自己分析程式碼應該怎麼寫?

  • 1:有效網址 http://api.expoon.com/AppNews/getNewsList/type/1/p/1

  • 2:
    */
    public class MainActivity extends AppCompatActivity implements View.OnClickListener {
    private String mUrl = “

    http://api.expoon.com/AppNews/getNewsList/type/1/p/1”;
    private String mImageUrl = “http://img.my.csdn.net/uploads/201407/26/1406383265_8550.jpg”;
    private String mPostUrl = “http://tcc.taobao.com/cc/json/mobile_tel_segment.htm”;
    private Button mSendBtn,mSendImage,mPostBtn;
    private TextView mGetText;
    private ImageView mImage;
    @SuppressLint(“HandlerLeak”)
    private Handler mHandler = new Handler() {
    @Override
    public void handleMessage(Message msg) {
    int what = msg.what;
    switch (what) {
    case 1:
    String string = msg.obj.toString();
    mGetText.setText(string);
    break;
    case 2:
    Bitmap bt = (Bitmap) msg.obj;
    mImage.setImageBitmap(bt);
    break;
    case 3:
    String string1 = msg.obj.toString();
    mGetText.setText(string1);
    break;
    }
    }
    };

    @Override
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    initViews();
    }

    //初始化元件
    private void initViews() {
    mSendBtn = findViewById(R.id.Send_Btn);
    mSendBtn.setOnClickListener(this);
    mGetText = findViewById(R.id.Get_Text);
    mSendImage = findViewById(R.id.Send_Image_Btn);
    mSendImage.setOnClickListener(this);
    mImage = findViewById(R.id.Get_Image);
    mPostBtn = findViewById(R.id.Send_Post_Btn);
    mPostBtn.setOnClickListener(this);
    }

    private void getNetData() {
    new Thread(new Runnable() {
    @Override
    public void run() {
    try {
    //定位一個網址服務
    URL url = new URL(mUrl);
    //由一個有效的網址服務返回這個物件
    HttpURLConnection connection = (HttpURLConnection) url.openConnection();
    //設定請求方式
    connection.setRequestMethod(“GET”);
    connection.setConnectTimeout(5000);
    InputStream stream = connection.getInputStream();
    String inputStr = getInputStr(stream);
    Message msg = new Message();
    //這個what是標記的意思 Handler物件只能有一個 Message是有多個的
    msg.what = 1;
    msg.obj = inputStr;
    mHandler.sendMessage(msg);
    Log.e(“網路字串”, inputStr);
    } catch (Exception e) {
    e.printStackTrace();
    }
    }
    }).start();

    }

    //把流轉成字串
    private String getInputStr(InputStream stream) throws IOException {
    BufferedReader br = new BufferedReader(new InputStreamReader(stream));
    StringBuffer sb = new StringBuffer();
    String str = null;
    while ((str = br.readLine()) != null) {
    sb.append(str);
    }
    return sb.toString();
    }

    private void getImageData(){
    new Thread(new Runnable() {
    @Override
    public void run() {
    try {
    URL url = new URL(mImageUrl);
    HttpURLConnection connection = (HttpURLConnection) url.openConnection();
    if (connection.getResponseCode() ==200){
    InputStream stream = connection.getInputStream();
    Bitmap bitmap = BitmapFactory.decodeStream(stream);
    Message msg = new Message();
    msg.what = 2;
    msg.obj = bitmap;
    mHandler.sendMessage(msg);
    }

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

    }

    @Override
    public void onClick(View v) {
    switch (v.getId()) {
    case R.id.Send_Btn:
    getNetData();
    break;
    case R.id.Send_Image_Btn:
    getImageData();
    break;
    case R.id.Send_Post_Btn:
    getPostData();
    break;
    }
    }
    //Post請求方式
    private void getPostData(){
    new Thread(new Runnable() {
    @Override
    public void run() {
    try {
    URL url = new URL(mPostUrl);
    HttpURLConnection connection = (HttpURLConnection) url.openConnection();
    connection.setRequestMethod(“POST”);
    //開啟可以想外輸出的許可權
    connection.setDoOutput(true);
    OutputStream outputStream = connection.getOutputStream();
    String canshu = “tel=15850781443”;
    //把字串轉換成位元組
    outputStream.write(canshu.getBytes());
    if (connection.getResponseCode() ==200){
    InputStream stream = connection.getInputStream();
    String inputStr = getInputStr(stream);
    Message msg = new Message();
    //這個what是標記的意思 Handler物件只能有一個 Message是有多個的
    msg.what = 3;
    msg.obj = inputStr;
    mHandler.sendMessage(msg);
    }

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

    }

}