Android开发,http网络请求网页基本操作

http网络请求基础操作

在安卓项目开发中,很多时候需要给客户端传送服务器提供的文字,图片,音频,视频,网页等,也需要将用户的操作反馈给服务器,这些就涉及了网络传输协议的知识。
http的常用简单请求方式为 GET和POST, 较为高级的可以传输大部分类型的数据,由Content-Type进行标记。
本文,介绍一个简单的,将百度网首页请求获取至客户端界面,本人也是个 萌新小白,如有错误,请指正,非常感谢。
url内容的获取一般由以下步骤:
1.实例化URL

URL url = new URL("http://www.baidu.com");

2.建立传输连接

HttpUrlConnection conn = (HttpUrlConnection)url.openConnection();

3.设置读取超时限制

conn.setReaderTimeOut(5000);

4.设置请求方式(网页请求一般用get)

conn.setRequestMethod("GET");

5.获取字节流

InputStream stream = conn.getInputStream();

6.将字节流转化为字符流

BufferReader reader = new BufferReader(new 
InputStreamReader(stream));

7.建立缓冲区,将字符流的内容全部读取进

String getStrFromReader = null;
StringBuffer stringBuffer = new StringBuffer();
//只要不为空,说明没有读取完
while((getStrFromReader=reader.readline())!=null){
    
    
    stringBuffer.append(getStrFromReader);
}

那么,从网页上获取的内容就暂存在StringBuffer中,要用就将其调用toString 方法;
————————————————————————————
具体操作如下:
1.打开项目的AndroidManifest.xml配置文件,添加标签,打开网络访问权限

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

2.建立 url类
httpurl.java

package com.ilikelxystill.fuxi;

import android.util.Log;

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 httpurl {
    
    
      public static String sendUrl(String sendurl){
    
    
          try {
    
    
              //实例化url
              URL url = new URL(sendurl);
              //建立并打开连接
              HttpURLConnection conn = (HttpURLConnection)url.openConnection();
              //设置读取超时时间
              conn.setReadTimeout(5000);
              conn.setRequestMethod("GET");//一般请求网页方式用get
              //获得连接的读入字节流
              InputStream stream  = conn.getInputStream();
              //转化为字符流
              BufferedReader reader = new BufferedReader(new InputStreamReader(stream));
              //创建缓冲区域buff,用于存放所有从reader中获取的信息
              StringBuffer stringBuffer = new StringBuffer();
              String get_from_reader = null;
              while ((get_from_reader=reader.readLine())!=null){
    
    //按行读取
                  stringBuffer.append(get_from_reader);
              }
              Log.i("nana",stringBuffer.toString());
              return stringBuffer.toString();
          } catch (MalformedURLException e) {
    
    
              e.printStackTrace();
          } catch (IOException e) {
    
    
              e.printStackTrace();
          }
          return "请求失败!!!";
      }
}

3.显示网页的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"
    tools:context=".InternetActivity">
     <WebView
         android:id="@+id/webview"
         android:layout_width="match_parent"
         android:layout_height="match_parent"></WebView>
</LinearLayout>

4.Activity.java
activity内,需要重写SendUrlTask类,并进行相关方法的改写调用。

package com.ilikelxystill.fuxi;

import android.os.AsyncTask;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.webkit.WebView;

public class InternetActivity extends AppCompatActivity {
    
    
    private WebView webview;
    private SendUrlTask sendUrlTask;//发送url任务
    @Override
    protected void onCreate(Bundle savedInstanceState) {
    
    
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_internet);
        init_web();
    }
    public void init_web(){
    
    
        webview = (WebView)findViewById(R.id.webview);
        sendUrlTask = new SendUrlTask("http://www.baidu.com");
        sendUrlTask.execute();//执行任务
    }
    //避免内存泄漏,重写 Destroy方法


    @Override
    protected void onDestroy() {
    
    
        super.onDestroy();
        if(sendUrlTask!=null){
    
    
            sendUrlTask.cancel(true);
        }
    }

    private class SendUrlTask extends AsyncTask<Void,Void,String>{
    
    
        public String Url;
        public SendUrlTask(String c_url){
    
    
            Url = c_url;
        }
        @Override
        protected String doInBackground(Void... voids) {
    
    
            //进行网络请求的操作
            return httpurl.sendUrl(Url);
        }

        @Override
        protected void onPostExecute(String s) {
    
    
            super.onPostExecute(s);
            webview.loadData(s,"text/html;charset=utf-8",null);//开始加载
        }
    }
}

运行程序,就可以获取到百度首页了,不过一般开发来说,都有便捷的开源框架,比如 volley, retrofit, Okhttp等,小白之后学习后,就和大家分享~拜拜

猜你喜欢

转载自blog.csdn.net/qq_41904106/article/details/108306472