源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

android客户端从服务器端获取json数据并解析的实现代码

  • 时间:2022-05-25 17:21 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:android客户端从服务器端获取json数据并解析的实现代码
首先客户端从服务器端获取json数据 1、利用HttpUrlConnection
[u]复制代码[/u] 代码如下:
/**       * 从指定的URL中获取数组       * @param urlPath       * @return       * @throws Exception       */      public static String readParse(String urlPath) throws Exception {                  ByteArrayOutputStream outStream = new ByteArrayOutputStream();                  byte[] data = new byte[1024];                   int len = 0;                   URL url = new URL(urlPath);                   HttpURLConnection conn = (HttpURLConnection) url.openConnection();                   InputStream inStream = conn.getInputStream();                   while ((len = inStream.read(data)) != -1) {                       outStream.write(data, 0, len);                   }                   inStream.close();                   return new String(outStream.toByteArray());//通过out.Stream.toByteArray获取到写的数据               }
2、利用HttpClient
[u]复制代码[/u] 代码如下:
/**       * 访问数据库并返回JSON数据字符串       *       * @param params 向服务器端传的参数       * @param url       * @return       * @throws Exception       */      public static String doPost(List<NameValuePair> params, String url)              throws Exception {          String result = null;          // 获取HttpClient对象          HttpClient httpClient = new DefaultHttpClient();          // 新建HttpPost对象          HttpPost httpPost = new HttpPost(url);          if (params != null) {              // 设置字符集              HttpEntity entity = new UrlEncodedFormEntity(params, HTTP.UTF_8);              // 设置参数实体              httpPost.setEntity(entity);          }          /*// 连接超时          httpClient.getParams().setParameter(                  CoreConnectionPNames.CONNECTION_TIMEOUT, 3000);          // 请求超时          httpClient.getParams().setParameter(CoreConnectionPNames.SO_TIMEOUT,                  3000);*/          // 获取HttpResponse实例          HttpResponse httpResp = httpClient.execute(httpPost);          // 判断是够请求成功          if (httpResp.getStatusLine().getStatusCode() == 200) {              // 获取返回的数据              result = EntityUtils.toString(httpResp.getEntity(), "UTF-8");          } else {              Log.i("HttpPost", "HttpPost方式请求失败");          }          return result;      }
其次Json数据解析: json数据:[{"id":"67","biaoTi":"G","logo":"http://www.nuoter.com/wtserver/resources/upload/13508741845270.png","logoLunbo":"http://www.nuoter.com/wtserver/resources/upload/13509015004480.jpg","yuanJia":"0","xianJia":"0"},{"id":"64","biaoTi":"444","logo":"http://www.nuoter.com/wtserver/resources/upload/13508741704400.png","logoLunbo":"http://172.16.1.75:8080/wtserver/resources/upload/13508741738500.png","yuanJia":"0","xianJia":"0"},{"id":"62","biaoTi":"jhadasd","logo":"http://www.nuoter.com/wtserver/resources/upload/13508741500450.png","logoLunbo":"http://172.16.1.75:8080/wtserver/resources/upload/13508741557450.png","yuanJia":"1","xianJia":"0"}]
[u]复制代码[/u] 代码如下:
/**       * 解析       *       * @throws JSONException       */      private static ArrayList<HashMap<String, Object>> Analysis(String jsonStr)              throws JSONException {          /******************* 解析 ***********************/          JSONArray jsonArray = null;          // 初始化list数组对象          ArrayList<HashMap<String, Object>> list = new ArrayList<HashMap<String, Object>>();          jsonArray = new JSONArray(jsonStr);          for (int i = 0; i < jsonArray.length(); i++) {              JSONObject jsonObject = jsonArray.getJSONObject(i);              // 初始化map数组对象              HashMap<String, Object> map = new HashMap<String, Object>();              map.put("logo", jsonObject.getString("logo"));              map.put("logoLunbo", jsonObject.getString("logoLunbo"));              map.put("biaoTi", jsonObject.getString("biaoTi"));              map.put("yuanJia", jsonObject.getString("yuanJia"));              map.put("xianJia", jsonObject.getString("xianJia"));              map.put("id", jsonObject.getInt("id"));              list.add(map);          }          return list;      }
最后数据适配: 1、TextView
[u]复制代码[/u] 代码如下:
/**   * readParse(String)从服务器端获取数据   * Analysis(String)解析json数据   */      private void resultJson() {          try {              allData = Analysis(readParse(url));              Iterator<HashMap<String, Object>> it = allData.iterator();              while (it.hasNext()) {                  Map<String, Object> ma = it.next();                  if ((Integer) ma.get("id") == id) {                      biaoTi.setText((String) ma.get("biaoTi"));                      yuanJia.setText((String) ma.get("yuanJia"));                      xianJia.setText((String) ma.get("xianJia"));                  }              }          } catch (JSONException e) {              e.printStackTrace();          } catch (Exception e) {              e.printStackTrace();          }      }
2、ListView:
[u]复制代码[/u] 代码如下:
/**       * ListView 数据适配       */      private void product_data(){          List<HashMap<String, Object>> lists = null;          try {              lists = Analysis(readParse(url));//解析出json数据          } catch (Exception e) {              // TODO Auto-generated catch block              e.printStackTrace();          }          List<HashMap<String, Object>> data = new ArrayList<HashMap<String,Object>>();          for(HashMap<String, Object> news : lists){              HashMap<String, Object> item = new HashMap<String, Object>();              item.put("chuXingTianShu", news.get("chuXingTianShu"));              item.put("biaoTi", news.get("biaoTi"));              item.put("yuanJia", news.get("yuanJia"));              item.put("xianJia", news.get("xianJia"));              item.put("id", news.get("id"));              try {                  bitmap = ImageService.getImage(news.get("logo").toString());//图片从服务器上获取              } catch (Exception e) {                  // TODO Auto-generated catch block                  e.printStackTrace();              }              if(bitmap==null){                  Log.i("bitmap", ""+bitmap);                  Toast.makeText(TravelLine.this, "图片加载错误", Toast.LENGTH_SHORT)                  .show();                                         // 显示图片编号              }              item.put("logo",bitmap);              data.add(item);          }               listItemAdapter = new MySimpleAdapter1(TravelLine.this,data,R.layout.a_travelline_item,                          // 动态数组与ImageItem对应的子项                          new String[] { "logo", "biaoTi",                                  "xianJia", "yuanJia", "chuXingTianShu"},                          // ImageItem的XML文件里面的一个ImageView,两个TextView ID                          new int[] { R.id.trl_ItemImage, R.id.trl_ItemTitle,                                  R.id.trl_ItemContent, R.id.trl_ItemMoney,                                  R.id.trl_Itemtoday});                  listview.setAdapter(listItemAdapter);                  //添加点击                    listview.setOnItemClickListener(new OnItemClickListener() {                         public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,                                long arg3) {                            login_publicchannel_trl_sub(arg2);                      }                    });      }
对于有图片的要重写适配器
[u]复制代码[/u] 代码如下:
package com.nuoter.adapterUntil;    import java.util.HashMap;  import java.util.List;    import android.content.Context;  import android.graphics.Bitmap;  import android.graphics.BitmapFactory;  import android.graphics.Paint;  import android.net.Uri;  import android.view.LayoutInflater;  import android.view.View;  import android.view.ViewGroup;  import android.widget.BaseAdapter;  import android.widget.ImageView;  import android.widget.LinearLayout;  import android.widget.TextView;    public class MySimpleAdapter1 extends BaseAdapter {       private LayoutInflater mInflater;       private List<HashMap<String, Object>> list;       private int layoutID;       private String flag[];       private int ItemIDs[];       public MySimpleAdapter1(Context context, List<HashMap<String, Object>> list,               int layoutID, String flag[], int ItemIDs[]) {           this.mInflater = LayoutInflater.from(context);           this.list = list;           this.layoutID = layoutID;           this.flag = flag;           this.ItemIDs = ItemIDs;       }       @Override       public int getCount() {           // TODO Auto-generated method stub           return list.size();       }       @Override       public Object getItem(int arg0) {           // TODO Auto-generated method stub           return 0;       }       @Override       public long getItemId(int arg0) {           // TODO Auto-generated method stub           return 0;       }       @Override       public View getView(int position, View convertView, ViewGroup parent) {           convertView = mInflater.inflate(layoutID, null);          // convertView = mInflater.inflate(layoutID, null);           for (int i = 0; i < flag.length; i++) {//备注1               if (convertView.findViewById(ItemIDs[i]) instanceof ImageView) {                   ImageView imgView = (ImageView) convertView.findViewById(ItemIDs[i]);                   imgView.setImageBitmap((Bitmap) list.get(position).get(flag[i]));///////////关键是这句!!!!!!!!!!!!!!!              }else if (convertView.findViewById(ItemIDs[i]) instanceof TextView) {                   TextView tv = (TextView) convertView.findViewById(ItemIDs[i]);                   tv.setText((String) list.get(position).get(flag[i]));               }else{                  //...备注2              }           }           //addListener(convertView);          return convertView;       }   /*    public void addListener(final View convertView) {          ImageView imgView = (ImageView)convertView.findViewById(R.id.lxs_item_image);               } */  }
对于图片的获取,json解析出来的是字符串url:"logoLunbo":http://www.nuoter.com/wtserver/resources/upload/13509015004480.jpg 从url获取 图片 ImageService工具类
[u]复制代码[/u] 代码如下:
package com.nuoter.adapterUntil;  import java.io.ByteArrayOutputStream;  import java.io.InputStream;  import java.net.HttpURLConnection;  import java.net.URL;  import android.graphics.Bitmap;  import android.graphics.BitmapFactory;    public class ImageService {      /**       * 获取网络图片的数据       * @param path 网络图片路径       * @return       */      public static Bitmap getImage(String path) throws Exception{          /*URL url = new URL(imageUrl);            HttpURLConnection conn = (HttpURLConnection) url.openConnection();            InputStream is = conn.getInputStream();            mBitmap = BitmapFactory.decodeStream(is);*/          Bitmap bitmap= null;          URL url = new URL(path);          HttpURLConnection conn = (HttpURLConnection) url.openConnection();//基于HTTP协议连接对象          conn.setConnectTimeout(5000);          conn.setRequestMethod("GET");          if(conn.getResponseCode() == 200){              InputStream inStream = conn.getInputStream();              bitmap = BitmapFactory.decodeStream(inStream);          }          return bitmap;      }      /**       * 读取流中的数据 从url获取json数据       * @param inStream       * @return       * @throws Exception       */      public static byte[] read(InputStream inStream) throws Exception{          ByteArrayOutputStream outStream = new ByteArrayOutputStream();          byte[] buffer = new byte[1024];          int len = 0;          while( (len = inStream.read(buffer)) != -1){              outStream.write(buffer, 0, len);          }          inStream.close();          return outStream.toByteArray();      }   }
上面也将从url处获取网络数据写在了工具类ImageService中方面调用,因为都是一样的。 当然也可以在Activity类中写一个获取服务器图片的函数(当用处不多时)
[u]复制代码[/u] 代码如下:
/*       * 从服务器取图片       * 参数:String类型       * 返回:Bitmap类型       */      public static Bitmap getHttpBitmap(String urlpath) {          Bitmap bitmap = null;          try {              //生成一个URL对象              URL url = new URL(urlpath);              //打开连接              HttpURLConnection conn = (HttpURLConnection)url.openConnection();  //            conn.setConnectTimeout(6*1000);  //            conn.setDoInput(true);              conn.connect();              //得到数据流              InputStream inputstream = conn.getInputStream();              bitmap = BitmapFactory.decodeStream(inputstream);              //关闭输入流              inputstream.close();              //关闭连接              conn.disconnect();          } catch (Exception e) {              Log.i("MyTag", "error:"+e.toString());          }          return bitmap;      }
调用:
[u]复制代码[/u] 代码如下:
public ImageView pic;  .....  .....  allData=Analysis(readParse(url));  Iterator<HashMap<String, Object>> it=allData.iterator();  while(it.hasNext()){  Map<String, Object> ma=it.next();  if((Integer)ma.get("id")==id)  {  logo=(String) ma.get("logo");  bigpic=getHttpBitmap(logo);  }  }  pic.setImageBitmap(bigpic);
另附 下载数据很慢时建立子线程并传参:
[u]复制代码[/u] 代码如下:
new Thread() {              @Override              public void run() {                  // 参数列表                  List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();                  nameValuePairs.add(new BasicNameValuePair("currPage", Integer                          .toString(1)));                  nameValuePairs.add(new BasicNameValuePair("pageSize", Integer                          .toString(5)));                  try {                      String result = doPost(nameValuePairs, POST_URL);                                         Message msg = handler.obtainMessage(1, 1, 1, result);                      handler.sendMessage(msg);                     // 发送消息                  } catch (Exception e) {                      // TODO Auto-generated catch block                      e.printStackTrace();                  }              }          }.start();          // 定义Handler对象          handler = new Handler() {              public void handleMessage(Message msg) {                  switch (msg.what) {                  case 1:{                      // 处理UI                      StringBuffer strbuf = new StringBuffer();                      List<HashMap<String, Object>> lists = null;                      try {                          lists = MainActivity.this                                  .parseJson(msg.obj.toString());                      } catch (Exception e) {                          // TODO Auto-generated catch block                          e.printStackTrace();                      }                      List<HashMap<String, Object>> data = new ArrayList<HashMap<String,Object>>();                      for(HashMap<String, Object> news : lists){                          HashMap<String, Object> item = new HashMap<String, Object>();                          item.put("id", news.get("id"));                          item.put("ItemText0", news.get("name"));                          try {                              bitmap = ImageService.getImage(news.get("logo").toString());                          } catch (Exception e) {                              // TODO Auto-generated catch block                              e.printStackTrace();                          }                          if(bitmap==null){                              Log.i("bitmap", ""+bitmap);                              Toast.makeText(MainActivity.this, "图片加载错误", Toast.LENGTH_SHORT)                              .show();                                         // 显示图片编号                          }                          item.put("ItemImage",bitmap);                          data.add(item);                      }                      //生成适配器的ImageItem <====> 动态数组的元素,两者一一对应                      MySimpleAdapter saImageItems = new MySimpleAdapter(MainActivity.this, data,                              R.layout.d_travelagence_item,                              new String[] {"ItemImage", "ItemText0", "ItemText1"},                              new int[] {R.id.lxs_item_image, R.id.lxs_item_text0, R.id.lxs_item_text1});                      //添加并且显示                      gridview.setAdapter(saImageItems);                  }                      break;                  default:                      break;                  }                              }          };
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部