这里给出的是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 如果有问题大家可以留言。