欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

挂号系统 改进

程序员文章站 2022-04-30 08:38:14
...

系统的一点点改进

由于当时时间比较急,就写得很粗糙,现在改善一点点。
系统上篇
系统下篇

  • ListView的缓存头像

当时使用ImageLoader突然间短路了,现在又想起来了,所以当时就体验了一下Bmob的下载文件的方法,还挺不错的

挂号系统 改进

配置全局ImageLoader

public class MyApplication extends Application {
    @Override
    public void onCreate() {
        // TODO Auto-generated method stub
        super.onCreate();

        initImageLoader(getApplicationContext());
    }

    private void initImageLoader(Context context) {
        // TODO Auto-generated method stub

        DisplayImageOptions defaulOptions = new DisplayImageOptions.Builder()
                .cacheInMemory(true).cacheOnDisk(true).build();

        ImageLoaderConfiguration configuration = new ImageLoaderConfiguration.Builder(
                context).defaultDisplayImageOptions(defaulOptions)
                .threadPriority(Thread.NORM_PRIORITY - 2)
                .denyCacheImageMultipleSizesInMemory()
                .diskCacheFileNameGenerator(new Md5FileNameGenerator())
                .tasksProcessingOrder(QueueProcessingType.LIFO).build();

        ImageLoader.getInstance().init(configuration);
    }
}

现在只要传递url参数给DoctorDetailActivity,在DDAdapter缓存每个item的头像就可以了

String d_url = doctor.getD_photo().getFileUrl();
                        //创建DisplayImageOptions对象并进行相关选项配置
                        DisplayImageOptions options = new DisplayImageOptions.Builder()
                                .showImageOnLoading(R.drawable.icon_stub)// 设置图片下载期间显示的图片
                                .showImageForEmptyUri(R.drawable.icon_empty)// 设置图片Uri为空或是错误的时候显示的图片
                                .showImageOnFail(R.drawable.icon_x)// 设置图片加载或解码过程中发生错误显示的图片
                                .cacheInMemory(true)// 设置下载的图片是否缓存在内存中
                                .cacheOnDisk(true)// 设置下载的图片是否缓存在SD卡中
                                .build();// 创建DisplayImageOptions对象
                        //利用ImageView加载图片
                        imageLoader.displayImage(d_url,head,options);
String url = intent.getStringExtra("url");
  • 实现实时时间器,如上图的时间
    第一:写一个线程类
/**
     * 实时线程
     */
    public class TimeThread extends  Thread{
        @Override
        public void run() {
            super.run();
            do{
                try {
                    Thread.sleep(1000);
                    Message msg = new Message();
                    msg.what = msgKey;
                    mHandler.sendMessage(msg);

                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }while (true);
        }
    }

第二:在handler中接收到Message,每隔一秒更新界面

//实时线程
    private static final int msgKey = 2;
    private TextView time02;
 private Handler mHandler =  new Handler(){
        @Override
        public void handleMessage(Message msg) {
            switch (msg.what){

                case msgKey:
                    long time = System.currentTimeMillis();
                    Date date = new Date(time);
                    SimpleDateFormat format = new SimpleDateFormat("yyyy年MM月dd日 \nHH时mm分ss秒 \nEEE");
                    time02.setText(format.format(date));
                    break;
            }

        }
    };

第三:开启线程

new TimeThread().start();
  • 设置挂号挂满显示一张“满”的图片,并设置不可点击去挂号

挂号系统 改进

m和a分别为上下午剩余的号数

//设置满号不可点击
        if(m == 0){
            mman.setVisibility(View.VISIBLE);
            dmcountClick.setEnabled(false);
        }
        if(a == 0){
            aman.setVisibility(View.VISIBLE);
            dacountClick.setEnabled(false);
        }

加号操作后又可以挂号,把“满”的图片去掉

case R.id.madd:
                addMorning();
                findDoctor();
                dmcountClick.setEnabled(true);
                mman.setVisibility(View.GONE);
                break;
            case R.id.aadd:
                addAfternoon();
                findDoctor();
                dacountClick.setEnabled(true);
                aman.setVisibility(View.GONE);
                break;
  • 添加查询教授

比如病人要去心血管科,但是他又需要一位教授,就可以用这个功能
所以只需要在查询科室的Activity中添加对应的复合查询即可

//在这里查医生
                        BmobQuery<Doctor> query = new BmobQuery<Doctor>();
                        //用此方式可以构造一个BmobPointer对象。只需要设置objectId就行
                        department.setObjectId(DepartmentId);
                        query.addWhereEqualTo("d_dcode", new BmobPointer(department));
                        query.include("d_dcode");

                        BmobQuery<Doctor> query2 = new BmobQuery<Doctor>();
                        query2.addWhereEqualTo("d_isprofess", true);
                        List<BmobQuery<Doctor>> queries = new ArrayList<BmobQuery<Doctor>>();
                        queries.add(query);
                        queries.add(query2);
                        BmobQuery<Doctor> mainQuery = new BmobQuery<Doctor>();
                        mainQuery.and(queries);

设置选中的是教授

SharedPreferences sp02 =  getSharedPreferences("patient",MODE_PRIVATE);
                                                sp02.edit().putBoolean("pisp",true).commit();

判断为教授,将级别设为教授,其余不可点击

SharedPreferences pref = getSharedPreferences("patient",MODE_PRIVATE);
        boolean pisp= pref.getBoolean("pisp",false);
        if(pisp){
            rb23.setChecked(true);
            rb21.setEnabled(false);
            rb22.setEnabled(false);
            rb24.setEnabled(false);
        }

还有之前的DoctorDetailActivity最先都是用intent传参数,导致参数有点多,后面使用了intent传递序列化对象,这样会使传的参数减少。
有时间再写个网上预约的系统,排班表是关键,挺复杂的。

传送门

相关标签: 应用