这里主要是介绍一个异步加载网络数据的例子:
public class MainActivity1 extends Activity {
private Spinner spinner;
private ProgressDialog progress;
private ArrayAdapter adapter;
private final String PATH = "http://192.168.0.104:8080/GsonJieXi/servlet/ServletPost";
private final String code = "utf-8";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
spinner = (Spinner) findViewById(R.id.spinner);
progress = new ProgressDialog(this);
progress.setTitle("提示");
progress.setMessage("正在下载。。。");
progress.setCancelable(false);
new AsnTask().execute(PATH);
}
public class AsnTask extends AsyncTask<String, Integer, List<String>> {
@Override
protected void onPreExecute() {
// TODO Auto-generated method stub
super.onPreExecute();
progress.show();
}
@Override
protected List<String> doInBackground(String... params) {
List<String> result = null;
// 调用工具方法获取web端的数据
String jsonString = HttpClientTool1.getpost(params[0], code);
// 调用工具方法解析数据
result = ListTool1.sentList(jsonString);
return result;
}
@Override
protected void onPostExecute(List<String> result) {
super.onPostExecute(result);
// 加载参数
adapter = new ArrayAdapter(MainActivity1.this,
android.R.layout.simple_spinner_item, result);
spinner.setAdapter(adapter);
// 取消ProgressDialog
progress.dismiss();
}
}
}
下面说下工具类:
public class HttpClientTool1 {
public static String getpost(String path,String encode){
String jsonString="";
HttpClient httpClient=new DefaultHttpClient();
HttpPost post=new HttpPost(path);
try {
HttpResponse response=httpClient.execute(post);
if(response.getStatusLine().getStatusCode()==200){
//EntityUtils静态的助手处理实体
//这里主要是响应内容
jsonString=EntityUtils.toString(response.getEntity(), encode);
Log.e("jsonString", jsonString);
}
} catch (ClientProtocolException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
httpClient.getConnectionManager().shutdown();
}
return jsonString;
}
}
public class ListTool1 {
public static List<String> sentList(String jsonString){
List<String> list=new ArrayList<String>();
try {
//JSONObject是一个无序的名称/值对的集合。
//它的外形是一个字符串用花括号名称和值之间用冒号,和逗号之间的价值观和名称
JSONObject object=new JSONObject(jsonString);
//jsonarray是一个有序序列的值。其外部文本形式是一个字符串用逗号分隔的值用方括号。
//内部形式是一个对象获得,通过索引访问的值选择方法,并将方法添加或替换值
JSONArray jsonArray = object.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;
}
}
下面我介绍一下web端的代码
先介绍一下Servlet:
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=utf-8");
request.setCharacterEncoding("utf-8");
PrintWriter out = response.getWriter();
//调用DateSource类的 方法
List<String> list = DateSource.getCityList();
Map<String, List<String>> map = new HashMap<String, List<String>>();
map.put("citys", list);
//调用GsonTools工具类
String jsonString = GsonTools.createJsonString(map);
out.print(jsonString);
out.flush();
out.close();
}
下面介绍一下工具类及其一些其他类 :
public class DateSource {
public static List<String> getCityList(){
List<String> list=new ArrayList<String>();
list.add("苹果");
list.add("香蕉");
list.add("梨子");
list.add("西瓜");
return list;
}
}
下面的工具类需要导入Gson的包
public class GsonTools {
// 灏咼SON杞琒tring--------------------------------------------------
public static String createJsonString(Object value) {
Gson gson = new Gson();
String gString = gson.toJson(value);
return gString;
}
// 灏哠tring杞琂SON--------------------------------------------------
public static <T> T getPerson(String jsonString, Class<T> cls) {
T t = null;
try {
Gson gson = new Gson();
t = gson.fromJson(jsonString, cls);
} catch (Exception e) {
}
return t;
}
/**
* 浣跨敤Gson杩涜瑙f瀽 List<Person>
*/
public static <T> List<T> getPersons(String jsonString, Class<T> cls) {
List<T> list = new ArrayList<T>();
try {
Gson gson = new Gson();
list = gson.fromJson(jsonString, new TypeToken<List<T>>() {
}.getType());
} catch (Exception e) {
}
return list;
}
/**
* @param jsonString
* @return
*/
public static List<String> getList(String jsonString) {
List<String> list = new ArrayList<String>();
try {
Gson gson = new Gson();
list = gson.fromJson(jsonString, new TypeToken<List<String>>() {
}.getType());
} catch (Exception e) {
// TODO: handle exception
}
return list;
}
public static List<Map<String, Object>> listKeyMaps(String jsonString) {
List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
try {
Gson gson = new Gson();
list = gson.fromJson(jsonString,
new TypeToken<List<Map<String, Object>>>() {
}.getType());
} catch (Exception e) {
// TODO: handle exception
}
return list;
}
}
无图无真相 最后展示一下结果.
首先是web端运行结果: