android解析json和xml文件的简单应用(二)

  这里给出的是android客户端的代码:首先需要访问网络,所以你要添加访问网络的权限。还要声明一个异步任务的类,来执行访问网络并更新数据控件。在解析xml和json我写在一起了。xml是后写的所以要是想运行json还需要自己修改一下。

 

package com.example.android_asynctask_json;

import java.util.ArrayList;
import java.util.List;

import com.example.android_asynctask_json.domain.City;
import com.example.android_asynctask_json.http.HttpUtil;
import com.example.android_asynctask_json.jsonTools.jsonTools;
import com.example.android_asynctask_json.xmlTools.xmlUtil;

import android.R.integer;
import android.app.Activity;
import android.app.Dialog;
import android.app.ProgressDialog;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ListView;
import android.widget.Spinner;

public class MainActivity extends Activity {
	private final String TAG="tag";
	private Spinner spinner;
	//private final String CITY_PAYH="http://10.0.2.2:8080/xmljson/servlet/CityAction?type=json"; 
	private final String CITY_PAYH="http://10.0.2.2:8080/xmljson/servlet/CityAction?type=xml";
	private ArrayAdapter<String> adapter;
	private ProgressDialog dialog;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		spinner=(Spinner)findViewById(R.id.spinner1);
		dialog=new ProgressDialog(this);
		dialog.setTitle("提示。。。");
		dialog.setMessage("loading...");
		//spinner.setAdapter(adapter);
		new MyTask().execute(CITY_PAYH);
	}
	class MyTask extends AsyncTask<String, Void, List<City>>{
		@Override
		protected void onPreExecute() {
			// TODO Auto-generated method stub
			super.onPreExecute();
			dialog.show();
		}
		@Override
		protected List<City> doInBackground(String... params) {
			// TODO Auto-generated method stub
			List<City> list=null; 
			String xmlString=HttpUtil.sendPostMethod(params[0], "utf-8");
			//Log.i(TAG, "----->>"+xmlString);
			//System.out.println("------->>"+xmlString);
			//解析json数据
//			list=jsonTools.parseList(jsonString);
			list=xmlUtil.parseXML(xmlString);//<pre name="code" class="java">解析json数据
return list;}@Overrideprotected void onPostExecute(List<City> result) {// 更新UIsuper.onPostExecute(result);List<String> list=new ArrayList<String>();for(int i=0;i<result.size();i++){list.add(result.get(i).getName());}adapter=new ArrayAdapter<String>(MainActivity.this, android.R.layout.simple_spinner_dropdown_item,list);spinner.setAdapter(adapter);dialog.dismiss();}}@Overridepublic 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;}@Overridepublic boolean onOptionsItemSelected(MenuItem item) {// Handle action bar item clicks here. The action bar will// automatically handle clicks on the Home/Up button, so long// as you specify a parent activity in AndroidManifest.xml.int id = item.getItemId();if (id == R.id.action_settings) {return true;}return super.onOptionsItemSelected(item);}}

 运行json时候要把list<city>改成list<string> 

下面是解析xml文件的类

package com.example.android_asynctask_json.xmlTools;

import java.io.StringReader;
import java.util.ArrayList;
import java.util.List;

import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserFactory;

import com.example.android_asynctask_json.domain.City;

public class xmlUtil {
	public static List<City> parseXML(String xmlString){
		List<City> list=null;
		City city=null;
		try {
			XmlPullParserFactory factory=XmlPullParserFactory.newInstance();
			XmlPullParser Parser=factory.newPullParser();
			Parser.setInput(new StringReader(xmlString));
			int evenType=Parser.getEventType();
			while(evenType!=XmlPullParser.END_DOCUMENT){
				switch (evenType) {
				case XmlPullParser.START_DOCUMENT:
					list=new ArrayList<City>();
					break;
				case XmlPullParser.START_TAG:
					if("city".equals(Parser.getName())){
						city=new City();
					}
					else if("name".equals(Parser.getName())){
						String value=Parser.nextText();
						city.setName(value);
					}
					break;
				case XmlPullParser.END_TAG:
					if("city".equals(Parser.getName())){
						list.add(city);
						city=null;
					}
					break;
				}
				evenType=Parser.next();
			}
		} catch (Exception e) {
			// TODO: handle exception
			e.printStackTrace();
		}
		return list;
	}
}

解析json的工具类

package com.example.android_asynctask_json.jsonTools;

import java.util.ArrayList;
import java.util.List;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import android.R.integer;

public class jsonTools {
	public static List<String> parseList(String jsonString){
		List<String> list=new ArrayList<String>();
		try {
			JSONObject jsonObject = new JSONObject(jsonString);
			JSONArray jsonArray=jsonObject.getJSONArray("citys");
			for(int i=0;i<jsonArray.length();i++){
				list.add(jsonArray.getString(i));
			}
		} catch (JSONException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return list;
	}
}

访问网络的工具类

package com.example.android_asynctask_json.http;

import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.util.EntityUtils;

public class HttpUtil {
	public static String sendPostMethod(String path,String encoding){
		String result="";
		HttpClient httpClient=new DefaultHttpClient();
		try {
			HttpPost httpPost=new HttpPost(path);
			HttpResponse httpResponse=httpClient.execute(httpPost);
			if(httpResponse.getStatusLine().getStatusCode()==200){
				//获得返回的表单信息,转化成string格式
				result=EntityUtils.toString(httpResponse.getEntity(),encoding);
			}
		} catch (Exception e) {
			// TODO: handle exception
			e.printStackTrace();
		}finally{
			//记得关闭连接
			httpClient.getConnectionManager().shutdown();
		}
		return result;
	}
}

实例化一个city因为在解析xml的时候要用

package com.example.android_asynctask_json.domain;

public class City {
	private String name;

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}
	
}

ok 如果有问题大家可以留言。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值