涉及到Android里的网络编程都需要添加权限
一、WebView:是应用程序打开web网页的UI控件
前台:
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.example.webtest.WebViewActivity" >
android:id="@+id/webView"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
后端:public class WebViewActivity extends Activity {
private WebView webView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.webview);
webView=(WebView)findViewById(R.id.webView);
//getSettings():设置浏览器一些属性
//setJavascriptEnabled():设置WebView支持Javascript脚本
webView.getSettings().setJavascriptEnabled(true);
//setWebViewClient(new WebViewClient()):让从一个网页跳转到另一个网页时仍在当前WebView显示
webView.setWebViewClient(new WebViewClient());
//loadUrl(String):设置打开的网址
webView.loadUrl("http://www.baidu.com");
}
}
二、Http协议:客户端提交数据给服务端和从服务端获得数据,像WebView也是向百度的服务端发出一条Http请求,服务端返回HTML页面,客户端(浏览器)解析后展示出页面。
提交数据和获得数据的方式有很多,这里介绍一种,使用HttpURLConnection来向服务器提交数据或者获得数据。
获得数据://传入网址,获得请求网页数据(XML文件数据或JSON文件数据)
public static String sendHttpRequest(String address) {
HttpURLConnection connection=null;
try {
URL url=new URL(address);
connection=(HttpURLConnection)url.openConnection();
//设置请求方式:GET为从服务器获得数据,POST为提交数据
connection.setRequestMethod("GET");
//设置连接最长超时时间(单位毫秒)
connection.setConnectTimeout(8000);
//设置读取最长超时时间(单位毫秒)
connection.setReadTimeout(8000);
connection.setDoInput(true);
connection.setDoOutput(true);
//获取到的数据输入流(InputStream为抽象类)
InputStream in=connection.getInputStream();
//对输入流进行读取
BufferedReader reader=new BufferedReader(new InputStreamReader(in));
StringBuffer response = new StringBuffer();
String line;
while((line=reader.readLine()) != null) {
response.append(line);
}
return response.toString();
} catch (Exception e) {
e.printStackTrace();
return e.getMessage();
}finally {
if(connection!=null) {
connection.disconnect();
}
}
}
提交数据:public static void submit(String address) {
HttpURLConnection connection=null;
try {
//设置为提交模式
connection.setRequestMethod("POST");
DataOutputStream out=new DataOutputStream(connection.getOutputStream());
out.writeBytes("username=admin&password=123456");//数据与数据之间用&分割
}catch (Exception e) {
e.printStackTrace();
}finally {
if(connection!=null) {
connection.disconnect();
}
}
}
三、解析获得的网页数据(XML文件或JSON文件)
1、解析XML:使用Pull方式。需要导入jar包:xmlpull-xpp3-1.1.4c.jar
//Pull解析XML文件
private void parseXMLWithPull(String xml_data) {
try {
XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
XmlPullParser xmlPullParser = factory.newPullParser();
xmlPullParser.setInput(new StringReader(xml_data));
int eventType=xmlPullParser.getEventType();
String id = "";
String name = "";
String version = "";
while (XmlPullParser.END_DOCUMENT != eventType) {
String nodeName = xmlPullParser.getName();
switch (eventType) {
//解析时的判断逻辑
case XmlPullParser.START_TAG:
if ("id".equals(nodeName)) {
id = xmlPullParser.nextText();
} else if ("name".equals(nodeName)) {
name = xmlPullParser.nextText();
} else if ("version".equals(nodeName)) {
version = xmlPullParser.nextText();
}
break;
//完成解析某个结点
case XmlPullParser.END_TAG:
if ("app".equals(nodeName)) {
Log.d("id is ",id);
Log.d(" name is ",name);
Log.d(" version is ",version);
}
break;
default:
break;
}
eventType = xmlPullParser.next();
}
} catch (Exception e) {
e.printStackTrace();
}
}
2、解析JSON有俩种方式:JSONObject和GSON
JSONObject://JSONObject解析JSON文件
private void parseJSONWithJSONObject(String json_data) {
try {
JSONArray jsonArray=new JSONArray(json_data);
for(int i=0;i
JSONObject jsonObject=jsonArray.getJSONObject(i);
String id=jsonObject.getString("id");
String name=jsonObject.getString("name");
String version=jsonObject.getString("version");
Log.d("MainActivity", "id is"+id);
Log.d("MainActivity", "name is"+name);
Log.d("MainActivity", "version is"+version);
}
}catch(Exception e) {
e.printStackTrace();
}
}
GSON :需要导入jar包:gson-2.0.jar,log4j-1.2.17.jar,slf4j-api-1.7.10.jar,slf4j-log4j12-1.7.10.jar
还需要自定义与JSON文件相对应的对象class App{
private String id;
private String name;
private String version;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getVersion() {
return version;
}
public void setVersion(String version) {
this.version = version;
}
}
最后对传入JSON数据(String形式)进行解析//GSON解析JSON文件方法
private void parseJSONWithGSON(String json_data) {
Gson gson=new Gson();
List appList=gson.fromJson(json_data, new TypeToken>() {}.getType());
for(App app:appList) {
Log.d("MainActivity", "id is"+app.getId());
Log.d("MainActivity", "name is"+app.getName());
Log.d("MainActivity", "version is"+app.getVersion());
}
}