android ——网络编程

人生难得几回搏,此时不搏待何时。这篇文章主要讲述android ——网络编程相关的知识,希望能为你提供帮助。
一、WebView
这个View就是一个浏览器,用于展示网页的。
布局文件:

1 < LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 2android:layout_width="match_parent" 3android:layout_height="match_parent" 4android:orientation="vertical"> 5 6< WebView 7android:id="@+id/web_view" 8android:layout_width="match_parent" 9android:layout_height="match_parent"> 10< /WebView> 11 12 < /LinearLayout>

java代码:
1 public class MainActivity extends AppCompatActivity{ 2@Override 3protected void onCreate(Bundle savedInstanceState) { 4super.onCreate(savedInstanceState); 5setContentView(R.layout.activity_main); 6 7WebView webView = (WebView) findViewById(R.id.web_view); 8webView.getSettings().setjavascriptEnabled(true); 9webView.setWebViewClient(new WebViewClient()); 10webView.loadUrl("http://www.baidu.com"); 11} 12 }

webView.getSettings().setJavaScriptEnabled(true)这个方法传入true,让WebView支持JavaScript脚本
webView.setWebViewClient(new WebViewClient()),实现了当需要从一个网页跳到另一个网页的时候,希望也在这个WebView中显示
 
AndroidManifest文件权限添加:
< uses-permission android:name="android.permission.INTERNET"/>

效果:
android ——网络编程

文章图片

 
二、HTTP协议访问数据
工作原理:客户端向服务器发出一条HTTP请求,服务器收到请求后会返回一些数据给客户端,然后客户端再对数据进行解析和处理。
1、使用HttpURLConnection
基本用法:
* 首先获取到HttpURLConnection的实例
URL url = new URL("https://www.baidu.com"); HttpURLConnection connection = (HttpURLConnection) url.openConnection();

*设置HTTP请求是希望从服务器获取数据(GET),还是希望提交数服务器(POST)
connection.setRequestMethod("GET");

*设置连接超时的时间,读取超时的时间:
connection.setConnectTimeout(8000); connection.setReadTimeout(8000);

*调用getInputStream()方法获取到服务器的输入流:
InputStream in = connection.getInputStream();

【android ——网络编程】*最后调用disconnect()把这个HTTP连接关掉:
connection.disconnect();

实例应用程序:
布局代码:
1 < LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 2android:layout_width="match_parent" 3android:layout_height="match_parent" 4android:orientation="vertical"> 5 6< Button 7android:id="@+id/send_request" 8android:layout_width="match_parent" 9android:layout_height="wrap_content" 10android:text="发送" /> 11 12< ScrollView 13android:layout_width="match_parent" 14android:layout_height="match_parent"> 15 16< TextView 17android:id="@+id/response_text" 18android:layout_width="match_parent" 19android:layout_height="wrap_content" /> 20< /ScrollView> 21 22 < /LinearLayout>

java代码:
1 public class MainActivity extends AppCompatActivity{ 2 3TextView responseText; //用于展示从服务器获取到的文本的控件 4@Override 5protected void onCreate(Bundle savedInstanceState) { 6super.onCreate(savedInstanceState); 7setContentView(R.layout.activity_main); 8 9//控件注册 10final Button sendRequest = (Button) findViewById(R.id.send_request); 11responseText = (TextView) findViewById(R.id.response_text); 12 13//按钮相应 14sendRequest.setOnClickListener(new View.OnClickListener() { 15@Override 16public void onClick(View view) { 17sendRequestWithHttpURLConnection(); 18} 19}); 20} 21 22private void sendRequestWithHttpURLConnection(){ 23 24//开启线程来发起网络请求 25new Thread(new Runnable() { 26@Override 27public void run() { 28HttpURLConnection connection = null; 29BufferedReader reader = null; 30try{ 31URL url = new URL("https://www.baidu.com"); 32connection = (HttpURLConnection) url.openConnection(); 33connection.setRequestMethod("GET"); 34connection.setConnectTimeout(8000); 35connection.setReadTimeout(8000); 36InputStream in = connection.getInputStream(); 37 38//对获取到的输入流进行读取 39reader = new BufferedReader(new InputStreamReader(in)); 40StringBuilder response = new StringBuilder(); 41String line; 42while ((line = reader.readLine()) != null){ 43response.append(line); 44} 45showResponse(response.toString()); 46}catch (Exception e){ 47e.printStackTrace(); 48}finally { 49if(reader !=null){ 50try{ 51reader.close(); 52}catch (IOException e){ 53e.printStackTrace(); 54} 55} 56if(connection != null){ 57connection.disconnect(); 58} 59} 60} 61}).start(); 62} 63 64private void showResponse(final String response){ 65runOnUiThread(new Runnable() { 66@Override 67public void run() { 68//UI操作 69responseText.setText(response); 70} 71}); 72} 73 }

效果:
android ——网络编程

文章图片

  2、使用OkHttp
这是一个用来代替HttpURLConnection的开源库
基本用法:
*添加OkHttp库的依赖
compile \'com.squareup.okhttp3:okhttp:3.9.0\'

*创建一个OkHttpClient的实例
OkHttpClient client = new OkHttpClient();

*创建一个Request实例,并连缀其他方法丰富这个对象
Request request = new Request.Builder() .url("http://www.baidu.com") .build();

*获取返回的数据
Response response = client.newCall(request).execute();

修改上面的程序:
1 public class MainActivity extends AppCompatActivity{ 2 3TextView responseText; //用于展示从服务器获取到的文本的控件 4@Override 5protected void onCreate(Bundle savedInstanceState) { 6super.onCreate(savedInstanceState); 7setContentView(R.layout.activity_main); 8 9//控件注册 10final Button sendRequest = (Button) findViewById(R.id.send_request); 11responseText = (TextView) findViewById(R.id.response_text); 12 13//按钮相应 14sendRequest.setOnClickListener(new View.OnClickListener() { 15@Override 16public void onClick(View view) { 17sendRequestWithHttpURLConnection(); 18} 19}); 20} 21 22private void sendRequestWithHttpURLConnection(){ 23 24//开启线程来发起网络请求 25new Thread(new Runnable() { 26@Override 27public void run() { 28try{ 29OkHttpClient client = new OkHttpClient(); 30Request request = new Request.Builder() 31.url("http://www.baidu.com") 32.build(); 33Response response = client.newCall(request).execute(); 34String responseData = https://www.songbingjia.com/android/response.body().string(); 35showResponse(responseData); 36}catch (Exception e){ 37e.printStackTrace(); 38} 39} 40}).start(); 41} 42 43private void showResponse(final String response){ 44runOnUiThread(new Runnable() { 45@Override 46public void run() { 47//UI操作 48responseText.setText(response); 49} 50}); 51} 52 }

效果同样。。
 

    推荐阅读