您当前的位置: 首页 >  数据库

xiangzhihong8

暂无认证

  • 3浏览

    0关注

    1324博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

仿淘宝收货地址,本地数据库

xiangzhihong8 发布时间:2014-06-25 17:58:27 ,浏览量:3

谁说咱们攻城狮不能写出既幽默又能懂的博客呢,本人想推出一系列博文,可以给刚接触Android开发的做一个参考,也可以与接触Android已久的各路大神比较一下,本人喜欢交流,如果有写得不好的地方,欢迎大家指出.如果有更好的效果或者功能,希望大家多多指点,互相学习可以共同进步.

说了这么多,现在进入今天的猪蹄,推出,有网购经验的同学应该对这个很熟悉,在淘宝的Android客户端里面,有一个功能是设置收货地址,不清楚的同学可以自己下载个淘宝客户端,自己添加一下看看.

本人一向喜欢贴图,这样有图有真相,才能说服每个人,废话不多说先上自己程序启动画面,然后运行界面,最后一张是淘宝客户端对照图.

 图片震楼  启动界面 运行界面 淘宝界面

淘宝客户端无法录屏所以这里只能上静态的,大家可以自己打开淘宝客户端看看.

下面进行详细的代码讲解:

(一)本人在程序启动的时候开了一条后台服务landDivideServeice,目的是为了将全国的省市县总共4,189条数据插入到手机数据库里面去,原本的数据是保存在7个txt里面的,由于放在txt里面,读取操作很不方便,所以我把它放到数据库,在后面的地区筛选很快就出来,这个比淘宝还快哦,不信你们可以试一下.

这里要注意的一点是landDivideServeice是继承IntentService的,不是直接继承Service的.

IntentService是继承于Service并处理异步请求的一个类,在IntentService内有一个工作线程来处理耗时操作,启动IntentService的方式和启动传统Service一样,同时,当任务执行完后,IntentService会自动停止,而不需要我们去手动控制。

简单的说IntentService类似于一条后台线程,但操作完成时,我们不用手动去关闭Serveice,他会自动关闭.MyIntentService继承IntentService,之后必须实现一个无参数的构造方法MyIntentService(),然后还要重写onHandleIntent(Intent intent);此后所有的后台操作即可在onHandleIntent(Intent intent)执行;

[java] view plain copy 在CODE上查看代码片 派生到我的代码片
  1. public class MyIntentService extends IntentService {  
  2.   
  3.     //必须实现的  
  4.     public MyIntentService() {  
  5.         super("MyIntentService");  
  6.         // TODO Auto-generated constructor stub  
  7.     }  
  8.   
  9.     @Override  
  10.     protected void onHandleIntent(Intent arg0) {  
  11.         // TODO Auto-generated method stub  
  12.         //具体的操作  
  13.     }  
  14.   
  15. }  

 so ga...

IntentService详细解析:

http://blog.csdn.net/ryantang03/article/details/8146154

http://blog.csdn.net/flowingflying/article/details/7616333

(二)在程序启动的第一个activity里,我弄了一条倒计时线程,时间总共是20秒,目的是想为数据写入数据库争取多一些时间,如果你进入地址筛选界面,看到数据不全或者报错,是因为数据还没有写完.

实现倒计时功能主要是继承CountDownTimer类,重写onTick和onFinsh这两个方法,onFinish()中的代码是计时器结束的时候要做的事情;onTick(Long m)中的代码是你倒计时开始时要做的事情,构造方法TimeCount()中的两个参数中,前者是倒计的时间数,后者是倒计每秒中间 的间隔时间,都是以毫秒为单位.例如要倒计时30秒,每秒中间间隔时间是1秒,两个参数可以这样写TimeCount(20000,1000).

[java] view plain copy 在CODE上查看代码片 派生到我的代码片
  1. TimeCount time = new TimeCount(20000, 1000);  
  2. time.start();  

[java] view plain copy 在CODE上查看代码片 派生到我的代码片
  1. /* 定义一个倒计时的内部类 */  
  2.     class TimeCount extends CountDownTimer {  
  3.         public TimeCount(long millisInFuture, long countDownInterval) {  
  4.             super(millisInFuture, countDownInterval);  
  5.         }  
  6.   
  7.         @Override  
  8.         public void onFinish() {  //倒计时执行结束时操作  
  9.             next = 0;  
  10.         }  
  11.   
  12.         @Override  
  13.         public void onTick(long millisUntilFinished) {  //倒计执行时操作  
  14.         }  
  15.     }  

(三)剩下的主要是一些界面的切换跟数据的读取,只要思路正确是不会被搞混的.

[java] view plain copy 在CODE上查看代码片 派生到我的代码片
  1. landDivideDB = LandDivideDB.getInstance(getBaseContext());  
  2.         List landDivide = landDivideDB.queryAddress("superior=?", new String[]{"1"});  
  3.         Iterator iterator = null;  
  4.         if(landDivide!=null){  
  5.             iterator = landDivide.iterator();  
  6.   
  7.             while(iterator.hasNext()){  
  8.                 LandDivide l = iterator.next();  
  9.                 sheng.add(l.getName());  
  10.             }  
  11.         }else{  
  12.             return;  
  13.         }  

[java] view plain copy 在CODE上查看代码片 派生到我的代码片
  1. mListView1.setOnItemClickListener(new OnItemClickListener() {  
  2.   
  3.             @Override  
  4.             public void onItemClick(AdapterView arg0, View arg1, int position,  
  5.                     long arg3) {  
  6.                 // TODO Auto-generated method stub  
  7.                 mLinearLayout1.setVisibility(View.GONE);  
  8.                 mLinearLayout2.setVisibility(View.VISIBLE);  
  9.                 mLinearLayout3.setVisibility(View.GONE);  
  10.                   
  11.                 shi.clear();  
  12.                 String name = sheng.get(position);  
  13.                 String code = null;  
  14.                 shengStr = name;  
  15.                 shengTxt2.setText(name);  
  16.                   
  17.                 List landDivide = landDivideDB.queryAddress("name=?", new String[]{name});  
  18.                 Iterator iterator= landDivide.iterator();  
  19.                 while(iterator.hasNext()){  
  20.                     LandDivide l = iterator.next();  
  21.                     code = l.getCode();  
  22.                     break;  
  23.                 }  
  24.                   
  25.                 List landDivide_2 = landDivideDB.queryAddress("superior=?", new String[]{code});  
  26.                 Iterator iterator_2= landDivide_2.iterator();  
  27.                 while(iterator_2.hasNext()){  
  28.                     LandDivide l = iterator_2.next();  
  29.                     shi.add(l.getName());  
  30.                 }  
  31.                   
  32.                 shiAdapter.notifyDataSetChanged();  
  33.                 quAdapter.clear();  
  34.                 quAdapter.notifyDataSetChanged();  
  35.             }  
  36.         });  
  37.           
  38.         mListView2.setOnItemClickListener(new OnItemClickListener() {  
  39.   
  40.             @Override  
  41.             public void onItemClick(AdapterView arg0, View arg1, int position,  
  42.                     long arg3) {  
  43.                 // TODO Auto-generated method stub  
  44.                   
  45.                 qu.clear();  
  46.                  
  47.                 String name = shi.get(position);  
  48.                 String code = null;  
  49.                   
  50.                 shiStr = name;  
  51.                 shengTxt3.setText(shengStr);  
  52.                 shiTxt3.setText(name);  
  53.                   
  54.                 List landDivide = landDivideDB.queryAddress("name=?", new String[]{name});  
  55.                   
  56.                     Iterator iterator= landDivide.iterator();  
  57.                     while(iterator.hasNext()){  
  58.                         LandDivide l = iterator.next();  
  59.                         code = l.getCode();  
  60.                         break;  
  61.                     }  
  62.                       
  63.                       
  64.                 List landDivide_2 = landDivideDB.queryAddress("superior=?", new String[]{code});  
  65.                 if(landDivide_2!=null){  
  66.                     Iterator iterator_2= landDivide_2.iterator();  
  67.                     while(iterator_2.hasNext()){  
  68.                         LandDivide l = iterator_2.next();  
  69.                         qu.add(l.getName());  
  70.                     }  
  71.                 }  
  72.                   
  73.                   
  74.                   
  75.                  quAdapter.notifyDataSetChanged();  
  76.                    
  77.                  if(qu.size()
关注
打赏
1482932726
查看更多评论
立即登录/注册

微信扫码登录

0.0470s