Android里的网络以及XML,JSON文件的解析

本文介绍了Android中进行网络编程的基本操作,包括使用WebView打开网页,通过HttpURLConnection发送Http请求获取数据。同时,讲解了如何解析XML文件,使用Pull解析器,以及解析JSON数据的方法,如JSONObject和GSON库的应用,包括自定义对象映射JSON数据。

涉及到Android里的网络编程都需要添加权限

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

一、WebView:是应用程序打开web网页的UI控件

        前台:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    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" >

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

</RelativeLayout>

      后端: 

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<jsonArray.length();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<App> appList=gson.fromJson(json_data, new TypeToken<List<App>>() {}.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());
		}
	}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值