Android基础之十七使用网络技术

Posted zhupengqq

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android基础之十七使用网络技术相关的知识,希望对你有一定的参考价值。

android基础之十七使用网络技术

本章主要会讲述如何在手机端使用HTTP协议和服务器端进行网络交互,并对服务器返回的数据进行解析,这也是Android中最常使用到的网络技术了,下面就让我们一起来学习一下吧。

1 WebView的用法

借助它我们就可以在自己的应用程序里嵌入一个浏览器,从而非常轻松地展示各种各样的网页

WebView的用法也是相当简单,下面我们就通过一个例子来学习一下吧。新建一个WebViewTest项目,然后修改activity_main.xml中的代码,如下所示

	<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <WebView
        android:id="@+id/web_view"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

</LinearLayout>

可以看到,我们在布局文件中使用到了一个新的控件,WebView。这个控件当然也就是用来显示网页的了,这里的写法很简单,给它设置了一个id,并让它充满整个屏幕。

然后修改MainActivity中的代码,如下所示:

package com.example.webview;

import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.webkit.WebView;
import android.webkit.WebViewClient;

public class MainActivity extends Activity {
	private WebView webview;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		webview=(WebView) findViewById(R.id.web_view);
		webview.getSettings().setjavascriptEnabled(true);
		webview.setWebViewClient(new WebViewClient() {
			@Override
			public boolean shouldOverrideUrlLoading(WebView view, String url) {    
				view.loadUrl(url); // 根据传入的参数再去加载新的网页
				return true; // 表示当前WebView可以处理打开新网页的请求,不用借助系统浏览器
			}
		});
		webview.loadUrl("http://www.baidu.com");
	}
	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		// Inflate the menu; this adds items to the action bar if it is present.
		getMenuInflater().inflate(R.menu.main, menu);
		return true;
	}
	

}

MainActivity中的代码也很短,首先使用findViewById()方法获取到了WebView的实例,然后调用WebView的getSettings()方法可以去设置一些浏览器的属性,这里我们并不去设置过多的属性,只是调用了setJavaScriptEnabled()方法来让WebView支持JavaScript脚本。

接下来是非常重要的一个部分,我们调用了WebView的setWebViewClient()方法,并传入了WebViewClient的匿名类作为参数,然后重写了shouldOverrideUrlLoading()方法。这就表明当需要从一个网页跳转到另一个网页时,我们希望目标网页仍然在当前WebView中显示,而不是打开系统浏览器。


最后一步就非常简单了,调用WebView的loadUrl()方法,并将网址传入


另外还需要注意,由于本程序使用到了网络功能,而访问网络是需要声明权限的,因此我们还得修改AndroidManifest.xml文件,并加入权限声明,如下所示:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.webviewtest"
    android:versionCode="1"
    android:versionName="1.0" >
    ……
    <uses-permission android:name="android.permission.INTERNET" />
    ……
</manifest>

2 使用HTTP协议访问网络

它的工作原理特别的简单,就是客户端向服务器发出一条HTTP请求,服务器收到请求之后会返回一些数据给客户端,然后客户端再对这些数据进行解析和处理就可以了。

2.1 使用HttpURLConnection

在Android上发送HTTP请求的方式一般有两种,HttpURLConnectionHttpClient,本小节我们先来学习一下HttpURLConnection的用法。

首先需要获取到HttpURLConnection的实例,一般只需new出一个URL对象,并传入目标的网络地址,然后调用一下openConnection()方法即可,如下所示:

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

HttpURLConnection connection = (HttpURLConnection) url.openConnection();

得到了HttpURLConnection的实例之后,我们可以设置一下HTTP请求所使用的方法。常用的方法主要有两个,GET和POST。GET表示希望从服务器那里获取数据,而POST则表示希望提交数据给服务器。写法如下:

connection.setRequestMethod("GET");

接下来就可以进行一些自由的定制了,比如设置连接超时、读取超时的毫秒数,以及服务器希望得到的一些消息头等。这部分内容根据自己的实际情况进行编写,示例写法如下:

connection.setConnectTimeout(8000);

connection.setReadTimeout(8000);

之后再调用getInputStream()方法就可以获取到服务器返回的输入流了,剩下的任务就是对输入流进行读取,如下所示:

InputStream in = connection.getInputStream();

最后可以调用disconnect()方法将这个HTTP连接关闭掉,如下所示:

connection.disconnect();

下面就让我们通过一个具体的例子来真正体验一下HttpURLConnection的用法。新建一个NetworkTest项目,首先修改activity_main.xml中的代码,如下所示


以上是关于Android基础之十七使用网络技术的主要内容,如果未能解决你的问题,请参考以下文章

PX4模块设计之十七:ModuleBase模块

BetaFlight模块设计之十七:pinioBox任务分析

LeetCode解题之十七:循环打印ABC

jenkins学习笔记之十七:使用插件及maven上传制品到nexus

实时音频编解码之十七 Opus解码 SILK解码

实时音频编解码之十七 Opus解码 SILK解码