锁定老帖子 主题:第一个Android程序开发笔记
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2011-10-13
这几天在考虑做一个android程序,所以决定把这个android程序定义成一个商城商品浏览的手机版本。 手机端:版本采用的是android2.3.3 服务器端:用ssh2实现的一个商城系统。可支持多用户在同一个系统中发布商品。 想要实现的功能:用户通过手机客户端浏览商城系统的商品
服务器端只需要传输json格式的字符串到页面即可。 实现如下
/** * 查询所有商城数据 * @return * @throws IOException */ public void findAllJshopbasicInfoLogoforAndroid() throws IOException{ int currentPage=page; int lineSize=12; String state="1"; String url="http://192.168.1.105/Uploads/"; beanlist=this.getJshopbasicinfotserviceimpl().findAllJshopbasicInfoNoParam(currentPage, lineSize, state); if(beanlist!=null){ StringBuilder json=new StringBuilder(); for(Iterator it=beanlist.iterator();it.hasNext();){ JshopbasicInfoT jbi=(JshopbasicInfoT)it.next(); String []strs=jbi.getSitelogo().split(","); jbi.setSitelogo(url+strs[0]); json.append('{'); json.append("\"sitelogo\":\"").append(jbi.getSitelogo()).append("\","); json.append("\"creatorid\":\"").append(jbi.getCreatorid()).append("\""); json.append('}').append('-'); } json.deleteCharAt(json.length()-1); this.setJsonstr(json.toString()); response.setContentType("text/html"); response.setCharacterEncoding("utf-8"); PrintWriter out=response.getWriter(); out.write(this.getJsonstr()); out.flush(); out.close(); } } 说明:1,这里是action方法的实现。这里的action继承了ActionSupport类 实现了 2,方法通过分页获取了商家店铺集合,并把店铺logo的url地址和用户id输出。这是可以同时输出多个店铺。用了‘-’做了分割。 3,传输logo和用户id的目的是再android中我用了GirdView来显示logo。并需要通过点击logo进入店铺商品列表。 4,在struts.xml中得配置 <!-- android gor find jshop --> <action name="findAllJshopbasicInfoLogoforAndroid" class="AndroidJshopbasicInfoAction" method="findAllJshopbasicInfoLogoforAndroid"> </action>
手机端实现:实际上是手机端发送了一个http请求给服务器,方才执行了上面的代码片段中得方法。 手机端如何发送http请求就不说了。说下如何在GridView中显示图片和点击相应的事件吧 boutiquesjsonstr=this.queryBoutiquesForJshopbasicInfoList(); if(boutiquesjsonstr==null){ return; }else{ String []strs=boutiquesjsonstr.split("-"); try { for(int i=0;i<strs.length;i++){ JSONObject jo=new JSONObject(strs[i].toString()); String sitelogo=jo.getString("sitelogo"); String creatorid=jo.getString("creatorid"); if(sitelogo.indexOf(",")<0){ sitelogolist.add(sitelogo.toString()); creatoridlist.add(creatorid.toString()); } } } catch (JSONException e) { // TODO Auto-generated catch block e.printStackTrace(); } } gv.setAdapter(new ImageAdapter(this)); 以上代码是对服务器的json数据的处理,我把数据保存在了一个list中。并把数据传送给GridView的适配器用来显示。 public class ImageAdapter extends BaseAdapter{ private Context mContext; public ImageAdapter(Context mContext) { this.mContext = mContext; } @Override public int getCount() { // TODO Auto-generated method stub return sitelogolist.size(); } @Override public Object getItem(int position) { // TODO Auto-generated method stub return position; } @Override public long getItemId(int position) { // TODO Auto-generated method stub return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { LayoutInflater inflater=LayoutInflater.from(JshopActivityShopList.this); View v=null; ImageView imageView=new ImageView(this.mContext); if(convertView==null){ v=inflater.inflate(R.layout.jshop_activity_imageview, null); }else{ v=(View)convertView; } imageView=(ImageView)v.findViewById(R.id.imageViewForshoplist); try{ URL url=new URL(sitelogolist.get(position).toString()); HttpURLConnection conn=(HttpURLConnection)url.openConnection(); conn.setRequestMethod("GET"); conn.setConnectTimeout(5*1000); InputStream in=conn.getInputStream(); Bitmap bm=BitmapFactory.decodeStream(in); in.close(); imageView.setImageBitmap(bm); }catch(Exception e){ e.printStackTrace(); } imageView.setPadding(8, 8, 8, 8); imageView.setAdjustViewBounds(false); return v; } } 以上代码说了名:1,如何显示图片呢?手机端显示网络图片是先下载下来显示的。所以我们使用了URI建立连接并下载了图片。 2,imageAdapter继承了baseAdapter,其中的方法getCount是可以控制getView方法调用次数的。这里getCount是我保存图片url集合的list.size(),这样我有几个图片也就循环几次view并显示了。 3,position这个变量其实是gridview的下标,可以这么理解,当你点击gridview的时候,怎么知道是点击的第几个呢?这个position就是你点击的那个对象的标示。如果我点击了第一个logo其实就是position是等于0的。
那gridview的点击事件是什么呢? class ItemClickListener implements OnItemClickListener{ @Override public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) { //int a=(Integer) arg0.getItemAtPosition(arg2); String creatorid=creatoridlist.get(arg2).toString(); Bundle data=new Bundle(); data.putString("creatorid", creatorid); Intent intent = new Intent(JshopActivityShopList.this,JshopActivityGoodsList.class); intent.putExtras(data); startActivity(intent); } } 代码说明:1,必须使用的是OnItemClick()而不是一般的Click(); 2,这里我需要实现的是点击了logo后执行获取商品列表的方法,所以我必须知道这个商铺是谁的才能拿到正确的商品,所以这里我获取了creatorid即用户id,用户id也被我放在了list中,这里用户id的list的下标正好可以通过position这个变量来标示,也就能得到正确的用户id了。 3,android中传递变量可以用Bundle这个类,具体的这里不说了。 4,对了,这个点击事件的坚挺必须在onCreate的时候申明下: gv.setOnItemClickListener(new ItemClickListener()); 好了。基本思路是这样的。 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2011-10-20
直接在手机端用浏览器浏览不就可以了吗
|
|
返回顶楼 | |
发表时间:2011-10-21
wbsh583 写道 直接在手机端用浏览器浏览不就可以了吗
如何是pad获取用手机浏览器看起来会不错吧 |
|
返回顶楼 | |
浏览 3716 次