您的位置:首页 > 其它

挂号系统 V1.0(下)

2017-11-05 16:50 246 查看

我的医院挂号系统下篇

接下来写查询科室的挂号流程,上一篇链接 挂号系统上篇

输入科室显示医生列表

adapter : 设置ViewHolder,下载每个item的医生头像,这里下载方式不太完美,以后可以进行改进

public class DDAdapter extends BaseAdapter{
private List<Doctor> doctors;
private Context context;
private Activity activity;
private static LayoutInflater inflater=null;
private ImageLoader imageLoader;
Handler handler = new Handler();

public DDAdapter(Activity a,List<Doctor> doctors){
this.activity = a;
this.doctors = doctors;
inflater = (LayoutInflater)activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
imageLoader=ImageLoader.getInstance();
}

@Override
public  View getView(final int position, View convertView, ViewGroup parent) {
final ViewHolder viewHolder;
if (convertView == null){

//            先去inflater一个布局加载控件
convertView = inflater.inflate(R.layout.item_adapter, null);//实例化一个布局文件
viewHolder = new ViewHolder();
viewHolder.d_photo = (ImageView)convertView.findViewById(R.id.iv_head);
viewHolder.d_name = (TextView)convertView.findViewById(R.id.tv_dname);
viewHolder.d_titles = (TextView)convertView.findViewById(R.id.tv_dtitle);
convertView.setTag(viewHolder);

}else {
viewHolder = (ViewHolder) convertView.getTag();
}

final Doctor doctor = doctors.get(position);
viewHolder.d_name.setText(doctor.getD_name());
viewHolder.d_titles.setText(doctor.getD_titles());

//下载医生的头像,以医生的名字命名的文件
BmobFile bmobfile = doctor.getD_photo();
//允许设置下载文件的存储路径,默认下载文件的目录为:context.getApplicationContext().getCacheDir()+"/bmob/"
final File saveFile = new File(Environment.getExternalStorageDirectory(), doctor.getD_name() +".jpg");
if(!saveFile.exists()){
bmobfile.download(saveFile, new DownloadFileListener() {
@Override
public void onStart() {
}

@Override
public void done(String savePath,BmobException e) {
if(e==null){
Log.i("bmob","下载进度cg");
}else{
Log.i("bmob","下载进度sb");
}
}
@Override
public void onProgress(Integer value, long newworkSpeed) {
Log.i("bmob","下载进度:"+value+","+newworkSpeed);
}
});

handler.post(new Runnable() {
@Override
public void run() {
if(saveFile.exists()){
String path = Environment.getExternalStorageDirectory() + "/"+doctor.getD_name() +".jpg";
Bitmap bitmap = BitmapFactory.decodeFile(path);
viewHolder.d_photo.setImageBitmap(bitmap);
}
}
});

}
return convertView;
}

/**
* 组件集合,对应list.xml中的控件
* @author Administrator
*/
public final class ViewHolder{
public ImageView d_photo;
public TextView d_titles;
public TextView d_name;

}

@Override
public int getCount() {
// TODO Auto-generated method stub
return doctors.size();
}

@Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return doctors.get(position);
}

@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return position;
}
}


DepartmentActivity :在handler获取发过来的Message后,在这里查询科室的所有医生,设置适配器,处理item的点击事件,传递参数给DoctorDetailActivity

public class DepartmentActivity extends AppCompatActivity implements View.OnClickListener{

private EditText etDepartment;
private TextView tvDepartment;
private ListView mListVi
4000
ew;
private String DepartmentId;
private Handler mHandler =  new Handler();
private LinearLayout none;

private Handler handler=new Handler(){
@Override
public void handleMessage(Message msg) {
switch (msg.what){
case 0:
List<Department> list= (List<Department>) msg.obj;
for (Department department : list) {
//获得数据的objectId信息
DepartmentId = department.getObjectId();
Log.i("我的科室ID。。。。。",""+DepartmentId);

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

@Override
public void done(final List<Doctor> objects, BmobException e) {
Log.i("医生",""+objects);
final DDAdapter ddAdapter = new DDAdapter(DepartmentActivity.this, objects);
ddAdapter.notifyDataSetChanged();
mHandler.post(new Runnable() {
@Override
public void run() {
mListView.setAdapter(ddAdapter);
mListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
String pid = objects.get(position).getObjectId();
String name = objects.get(position).getD_name();

String specialty = objects.get(position).getD_specialty();
String titles = objects.get(position).getD_titles();
Department department = objects.get(position).getD_dcode();
String departmentname = department.getD_departmentname();
String d_num = objects.get(position).getD_num();
int d_acount = objects.get(position).getD_acount();
int d_mcount = objects.get(position).getD_mcount();
int d_nowacount = objects.get(position).getD_nowacount();
int d_nowmcount = objects.get(position).getD_nowmcount();
SharedPreferences sp =  getSharedPreferences("patient",MODE_PRIVATE);
sp.edit().putString("pdid",pid).commit();
Intent intent = new Intent(DepartmentActivity.this,DoctorDetailActivity.class);

intent.putExtra("dname",name);
intent.putExtra("dspecialty",specialty);
intent.putExtra("dtitles",titles);
intent.putExtra("ddepartmentname",departmentname);
intent.putExtra("dnum",d_num);
intent.putExtra("dacount",d_acount);
intent.putExtra("dmcount",d_mcount);
intent.putExtra("dnowacount",d_nowacount);
intent.putExtra("dnowmcount",d_nowmcount);
startActivity(intent);
}
});
}
});
}
});
}
break;
}

}
};

@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_department);
initView();
}

private void initView() {

etDepartment = (EditText)findViewById(R.id.search_et_department);
tvDepartment = (TextView) findViewById(R.id.search_department);
mListView = (ListView) findViewById(R.id.lv);
none = (LinearLayout)findViewById(R.id.department_none);
none.setVisibility(View.VISIBLE);
tvDepartment.setOnClickListener(this);

}

@Override
public void onClick(View v) {
switch (v.getId()){
case R.id.search_department:
String dDepartment = etDepartment.getText().toString();
loaddoctorslist(dDepartment);
none.setVisibility(View.GONE);
break;
}
}

/**
* 加载list列表
*/
private void loaddoctorslist(String d_departmentname) {

//这里拿到objectId传给全局变量,使用handler
BmobQuery<Department> query01=new BmobQuery<Department>();
query01.addWhereEqualTo("d_departmentname", d_departmentname);
//        query01.setCachePolicy(BmobQuery.CachePolicy.CACHE_ELSE_NETWORK);
query01.findObjects(new FindListener<Department>() {
@Override
public void done(List<Department> list, BmobException e) {
if (e == null) {
Message message = handler.obtainMessage();
message.what = 0;
//以消息为载体
message.obj = list;//这里的list就是查询出list
//向handler发送消息
handler.sendMessage(message);

} else {
Log.e("bmob", ""+e);
}
}
});
}
}


是不是很简单就完成了科室查询呢

格式转化器

转化为十位数,前面补0

%010d 第一个0表示前面补0 ,10d表示转化为十位整数

int mycard = patient.getP_card();
final String card = String.format("%010d",mycard);


正则表达式很实用

/**
* 根据正则表达式获取0000000222 后面的222,只有这个才是写入数据库的
* @param pidcard
* @return
*/
public String getTrueCardNum(String pidcard){
String regex = "[0]+";
String[] str = pidcard.split(regex);

if(!pidcard.matches("\\d*")){
System.out.println(pidcard);
return pidcard;
}else{
System.out.println(str[str.length-1]);
return str[str.length-1];
}

}


日期转化,去掉后面的时分秒,用的是网上某位兄台的工具类,链接不知在哪了

import java.text.SimpleDateFormat;
import java.util.Date;

public class DateUtil {

public static final String PATTERN_STANDARD08W = "yyyyMMdd";
public static final String PATTERN_STANDARD12W = "yyyyMMddHHmm";
public static final String PATTERN_STANDARD14W = "yyyyMMddHHmmss";
public static final String PATTERN_STANDARD17W = "yyyyMMddHHmmssSSS";

public static final String PATTERN_STANDARD10H = "yyyy-MM-dd";
public static final String PATTERN_STANDARD16H = "yyyy-MM-dd HH:mm";
public static final String PATTERN_STANDARD19H = "yyyy-MM-dd HH:mm:ss";

public static final String PATTERN_STANDARD10X = "yyyy/MM/dd";
public static final String PATTERN_STANDARD16X = "yyyy/MM/dd HH:mm";
public static final String PATTERN_STANDARD19X = "yyyy/MM/dd HH:mm:ss";

/**
* @Title: date2String
* @Description: 日期格式的时间转化成字符串格式的时间
* @author YFB
* @param date
* @param pattern
* @return
*/
public static String date2String(Date date, String pattern) {
if (date == null) {
throw new IllegalArgumentException("timestamp null illegal");
}
pattern = (pattern == null || pattern.equals(""))?PATTERN_STANDARD19H:pattern;
SimpleDateFormat sdf = new SimpleDateFormat(pattern);
return sdf.format(date);
}

/**
* @Title: string2Date
* @Description: 字符串格式的时间转化成日期格式的时间
* @author YFB
* @param strDate
* @param pattern
* @return
*/
public static Date string2Date(String strDate, String pattern) {
if (strDate == null || strDate.equals("")) {
throw new RuntimeException("strDate is null");
}
p
cbdd
attern = (pattern == null || pattern.equals(""))?PATTERN_STANDARD19H:pattern;
SimpleDateFormat sdf = new SimpleDateFormat(pattern);
Date date = null;
try {
date = sdf.parse(strDate);
} catch (Exception e) {
throw new RuntimeException(e);
}
return date;
}

/**
* @Title: getCurrentTime
* @Description: 取得当前系统时间
* @author YFB
* @param format 格式 17位(yyyyMMddHHmmssSSS) (14位:yyyyMMddHHmmss) (12位:yyyyMMddHHmm) (8位:yyyyMMdd)
* @return
*/
public static String getCurrentTime(String format) {
SimpleDateFormat formatDate = new SimpleDateFormat(format);
String date = formatDate.format(new Date());
return date;
}

/**
* @Title: getWantDate
* @Description: 获取想要的时间格式
* @author YFB
* @param dateStr
* @param wantFormat
* @return
*/
public static String getWantDate(String dateStr,String wantFormat){
if(!"".equals(dateStr)&&dateStr!=null){
String pattern = PATTERN_STANDARD14W;
int len = dateStr.length();
switch(len){
case 8:pattern = PATTERN_STANDARD08W;break;
case 12:pattern = PATTERN_STANDARD12W;break;
case 14:pattern = PATTERN_STANDARD14W;break;
case 17:pattern = PATTERN_STANDARD17W;break;
case 10:pattern = (dateStr.contains("-"))?PATTERN_STANDARD10H:PATTERN_STANDARD10X;break;
case 16:pattern = (dateStr.contains("-"))?PATTERN_STANDARD16H:PATTERN_STANDARD16X;break;
case 19:pattern = (dateStr.contains("-"))?PATTERN_STANDARD19H:PATTERN_STANDARD19X;break;
default:pattern = PATTERN_STANDARD14W;break;
}
SimpleDateFormat sdf = new SimpleDateFormat(wantFormat);
try {
SimpleDateFormat sdfStr = new SimpleDateFormat(pattern);
Date date = sdfStr.parse(dateStr);
dateStr = sdf.format(date);
} catch (Exception e) {
e.printStackTrace();
}
}
return dateStr;
}

/**
* @Title: getAfterTime
* @Description: 获取该时间的几分钟之后的时间
* @author YFB
* @param dateStr
* @param minute
* @return
*/
public static String getAfterTime(String dateStr,int minute){
String returnStr = "";
try {
String pattern = PATTERN_STANDARD14W;
int len = dateStr.length();
switch(len){
case 8:pattern = PATTERN_STANDARD08W;break;
case 10:pattern = PATTERN_STANDARD10H;break;
case 12:pattern = PATTERN_STANDARD12W;break;
case 14:pattern = PATTERN_STANDARD14W;break;
case 16:pattern = PATTERN_STANDARD16H;break;
case 17:pattern = PATTERN_STANDARD17W;break;
case 19:pattern = PATTERN_STANDARD19H;break;
default:pattern = PATTERN_STANDARD14W;break;
}
SimpleDateFormat formatDate = new SimpleDateFormat(pattern);
Date date = null;
date = formatDate.parse(dateStr);
Date afterDate = new Date(date.getTime()+(60000*minute));
returnStr = formatDate.format(afterDate);
} catch (Exception e) {
returnStr = dateStr;
e.printStackTrace();
}
return returnStr;
}

/**
* @Title: getBeforeTime
* @Description: 获取该时间的几分钟之前的时间
* @author YFB
* @param dateStr
* @param minute
* @return
*/
public static String getBeforeTime(String dateStr,int minute){
String returnStr = "";
try {
String pattern = PATTERN_STANDARD14W;
int len = dateStr.length();
switch(len){
case 8:pattern = PATTERN_STANDARD08W;break;
case 10:pattern = PATTERN_STANDARD10H;break;
case 12:pattern = PATTERN_STANDARD12W;break;
case 14:pattern = PATTERN_STANDARD14W;break;
case 16:pattern = PATTERN_STANDARD16H;break;
case 17:pattern = PATTERN_STANDARD17W;break;
case 19:pattern = PATTERN_STANDARD19H;break;
default:pattern = PATTERN_STANDARD14W;break;
}
SimpleDateFormat formatDate = new SimpleDateFormat(pattern);
Date date = null;
date = formatDate.parse(dateStr);
Date afterDate = new Date(date.getTime()-(60000*minute));
returnStr = formatDate.format(afterDate);
} catch (Exception e) {
returnStr = dateStr;
e.printStackTrace();
}
return returnStr;
}
}


调用即可

create = appointment.getCreatedAt();
final String date = DateUtil.getWantDate(create, "yyyyMMdd");


总结

(a)学会了Bmob各种查询方法,外键查询,复合查询等等

(b)学会了Bmob的原子计时器,更新某个Interger的值

(c)学会了如何下载文件(图片)

(d)复习了intent传递序列化对象,字段值,handler更新UI以及Handler发送Message获取异步任务中的值、适配器知识

(e)复习了轻量级的SharedPreferences 保存信息(非常实用)

最后是学会了如何建表,这才是最关键的,很遗憾没有用到多对多关系的查询

收工了
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  挂号系统 bmob