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等,小白之后学习后,就和大家分享~拜拜