• 体温登记APP总结


    要求:开发一个手机端上报体温的手机APP,上报内容包括姓名、日期(自动生成)、时间(自动生成)和体温。

    一、设计思路

    首先需要写一个应用的界面用来上报信息,至于自动生成日期和时间可以利用Calendar来获取系统时间,其次在自动生成位置了利用百度地图SDK来获取位置,最后还需要连接Sqlite数据库来进行数据的登记。


    二、代码

    1、界面

    首先做了APP的页面,包括编辑框、文本框、按钮及背景图片等,xml文件如下:

      1 <?xml version="1.0" encoding="utf-8"?>
      2 <TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
      3     xmlns:app="http://schemas.android.com/apk/res-auto"
      4     xmlns:tools="http://schemas.android.com/tools"
      5     android:layout_width="match_parent"
      6     android:layout_height="match_parent"
      7     android:background="@mipmap/bj3"
      8     android:stretchColumns="2"
      9     tools:context=".MainActivity">
     10 
     11     <TableRow
     12         android:layout_width="match_parent"
     13         android:layout_height="match_parent">
     14         <TextView
     15             android:layout_width="wrap_content"
     16             android:layout_height="wrap_content"
     17             android:text="  姓  名:"
     18             android:textSize="18sp" />
     19         <EditText
     20             android:id="@+id/edit_text1"
     21             android:layout_width="280sp"
     22             android:layout_height="wrap_content"
     23             android:hint="请填写姓名"
     24             android:maxLines="1"
     25             android:scrollbars="vertical"
     26             />
     27         <TextView />
     28     </TableRow>
     29     <TableRow>
     30         <TextView
     31             android:layout_width="wrap_content"
     32             android:layout_height="wrap_content"
     33             android:text="  日  期:"
     34             android:layout_marginTop="15dp"
     35             android:textSize="18sp"/>
     36         <TextView
     37             android:id="@+id/textView1"
     38             android:layout_width="match_parent"
     39             android:layout_height="wrap_content"
     40             android:layout_marginTop="15dp"
     41             android:textSize="18sp"/>
     42         <TextView />
     43     </TableRow>
     44     <TableRow>
     45         <TextView
     46             android:layout_width="wrap_content"
     47             android:layout_height="wrap_content"
     48             android:text="  时  间:"
     49             android:layout_marginTop="15dp"
     50             android:textSize="18sp"/>
     51         <TextView
     52             android:id="@+id/textView2"
     53             android:layout_width="match_parent"
     54             android:layout_height="wrap_content"
     55             android:layout_marginTop="15dp"
     56             android:textSize="18sp"/>
     57         <TextView />
     58     </TableRow>
     59 
     60     <TableRow>
     61         <TextView
     62             android:layout_width="wrap_content"
     63             android:layout_height="wrap_content"
     64             android:text="  体  温:"
     65             android:textSize="18sp"/>
     66 
     67         <EditText
     68             android:id="@+id/edit_text3"
     69             android:layout_width="match_parent"
     70             android:layout_height="wrap_content"
     71             android:drawableRight="@mipmap/wd1"
     72             android:hint="请填写体温"
     73             android:maxLines="1"
     74             android:scrollbars="vertical"/>
     75         <TextView />
     76     </TableRow>
     77 
     78     <TableRow>
     79         <TextView
     80             android:layout_width="wrap_content"
     81             android:layout_height="wrap_content"
     82             android:text="  地  点:"
     83             android:textSize="18sp"/>
     84         <EditText
     85             android:id="@+id/edit_text2"
     86             android:layout_width="280sp"
     87             android:layout_height="wrap_content"
     88             android:scrollbars="vertical"
     89             android:onClick="getAddress"
     90             android:hint="点击获取您的位置"
     91             android:minLines="2"
     92             />
     93         <TextView />
     94     </TableRow>
     95         <Button
     96             android:id="@+id/add_data"
     97             android:layout_width="wrap_content"
     98             android:layout_height="wrap_content"
     99             android:background="#328359"
    100             android:onClick="insertData"
    101             android:text="登  记"
    102             android:textColor="#F2F2F2"
    103             android:layout_marginTop="20dp"
    104             android:textSize="18sp" />
    105 
    106 </TableLayout>

    页面效果如下:

    2、 自动生成日期和时间

    利用了Calendar来获取系统时间。首先用Calendar.getInstance()函数获取一个实例,再使用Calendar.get()函数来获取时间的具体信息,如年、月、日、小时、分、秒等。需要注意的是获取hour时可以利用Calendar.AM_PM来判断上下午。

    protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            tv_date = (TextView) findViewById(R.id.textView1);
            tv_time = (TextView) findViewById(R.id.textView2);
    
            cal = Calendar.getInstance();
            year = String.valueOf(cal.get(Calendar.YEAR));
            month = String.valueOf(cal.get(Calendar.MONTH)) + 1;
            day = String.valueOf(cal.get(Calendar.DATE));
            if (cal.get(Calendar.AM_PM) == 0) {
                if (cal.get(Calendar.HOUR) < 10) {
                    hour = "0" + cal.get(Calendar.HOUR);
                } else {
                    hour = String.valueOf(cal.get(Calendar.HOUR));
                }
            }
            else {
                hour = String.valueOf(cal.get(Calendar.HOUR) + 12);
            }
            if (cal.get(Calendar.MINUTE) < 10) {
                minute = "0" + cal.get(Calendar.MINUTE);
            } else {
                minute = String.valueOf(cal.get(Calendar.MINUTE));
            }
            if (cal.get(Calendar.SECOND) < 10) {
                second = "0" + cal.get(Calendar.SECOND);
            } else {
                second = String.valueOf(cal.get(Calendar.SECOND));
            }
            my_time_1 = year + "-" + month + "-" + day;
            my_time_2 = hour + ":" + minute + ":" + second;
            tv_date.setText(my_time_1);
            tv_time.setText(my_time_2);
    
        }

    3、利用百度地图API来获取定位信息

    首先需要申请密钥(API Key)

    登录百度地图官网http://lbsyun.baidu.com找到申请密钥,如果没有百度账号需要进行注册,并且进行开发者激活。创建应用并且填写应用名称、选择应用类型(我们这里是Android SDK)、填写发布版SHA1和创建的应用所在包名。

     至于发布版SHA1的值可以打开Android studio的Terminal选项卡,并且切换到.android目录中,并且输入keytool -list -v -keystore debug.keystore,密钥库口令直接回车,即可找到SHA1.

     

     填写信息成功提交以后就可以得到一个密钥

     

     其次需要下载百度地图SDK开发包

     将lib中的文件全部复制到AS项目中的libs文件夹中,并进入File->Project Structure,添加Jar Dependency,选择Jar包,进行配置。

     在build.gradle里面添加对应语句

     在AndroidManifest.xml中增加权限,修改配置内容

     

        public LocationClient mLocationClient = null;
        private MyLocationListener myListener = new MyLocationListener();
    
        public class MyLocationListener extends BDAbstractLocationListener {
            @Override
            public void onReceiveLocation(BDLocation location){
                //此处的BDLocation为定位结果信息类,通过它的各种get方法可获取定位相关的全部结果
                String addr = location.getAddrStr();    //获取详细地址信息
                String country = location.getCountry();    //获取国家
                String province = location.getProvince();    //获取省份
                String city = location.getCity();    //获取城市
                String district = location.getDistrict();    //获取区县
                String street = location.getStreet();    //获取街道信息
                String town = location.getTown();       //获取乡镇信息
                et_location=(EditText)findViewById(R.id.edit_text2);
                et_location.setText(country+province+city+district+town+street);
            }
        }
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            SDKInitializer.initialize(getApplicationContext());
            setContentView(R.layout.activity_main);
        }
        public void getAddress(View view)
        {
            mLocationClient = new LocationClient(getApplicationContext());
            mLocationClient.registerLocationListener(myListener);
            LocationClientOption option = new LocationClientOption();
            option.setIsNeedAddress(true);
            option.setNeedNewVersionRgc(true);
            mLocationClient.setLocOption(option);
            mLocationClient.start();
        }

    4、创建Sqlite数据库

    先创建一个类继承SQLiteOpenHelper类,再实现里面的方法,创建构造方法然后创建子类对象,再调用getReadableDatabase()/getWritableDatabase()方法。

     1 package com.example.application;
     2 
     3 import android.content.Context;
     4 import android.database.sqlite.SQLiteDatabase;
     5 import android.database.sqlite.SQLiteOpenHelper;
     6 import android.util.Log;
     7 
     8 import androidx.annotation.Nullable;
     9 
    10 public class DatabaseHelper extends SQLiteOpenHelper {
    11     private static final String TAG="DatabaseHelper";
    12     public DatabaseHelper(@Nullable Context context) {
    13         super(context, Constants.DATABASE_NAME, null, Constants.VERSION_CODE);
    14     }
    15 
    16     @Override
    17     public void onCreate(SQLiteDatabase db) {
    18         //创建时的回调
    19         Log.d(TAG,"创建数据库...");
    20         String sql="create table "+Constants.TABLE_NAME+" (id integer primary key autoincrement, name varchar,date varchar,time varchar,location varchar,temperature varchar)";
    21         db.execSQL(sql);
    22     }
    23 
    24     @Override
    25     public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    26         //升级时的回调
    27         Log.d(TAG,"升级数据库...");
    28     }
    29 }
    protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            //创建数据库
            DatabaseHelper helper=new DatabaseHelper(this);
            helper.getWritableDatabase();
            bt_add=(Button)findViewById(R.id.add_data);
            tv_date = (TextView) findViewById(R.id.textView1);
            tv_time = (TextView) findViewById(R.id.textView2);
            et_name=(EditText)findViewById(R.id.edit_text1) ;
            et_temperature=(EditText)findViewById(R.id.edit_text3) ;
        }
        public void insertData(View view)
        {
            DatabaseHelper helper=new DatabaseHelper(this);
            SQLiteDatabase sqldb=helper.getWritableDatabase();
            ContentValues contentvalues=new ContentValues();
            contentvalues.put("name",et_name.getText().toString());
            contentvalues.put("date",tv_date.getText().toString());
            contentvalues.put("time",tv_time.getText().toString());
            contentvalues.put("location",et_location.getText().toString());
            contentvalues.put("temperature",et_temperature.getText().toString());
            if(et_name.getText().toString().equals("")|| et_location.getText().toString().equals("")||et_temperature.getText().toString().equals("")){
                Toast.makeText(this,"请将信息填写完整",Toast.LENGTH_SHORT).show();
            }else {
                long flag = sqldb.insert(TABLE_NAME, null, contentvalues);
                Toast.makeText(this, "登记成功", Toast.LENGTH_LONG).show();
    
            }
            sqldb.close();
        }


     三、遇到问题

    从数据库的创建到利用百度地图API来进行定位遇到了各种各样的问题,在这里就不一一列举了。目前的APP还有很多待完善的地方,比如数据的查询、用户登录、页面跳转等,还需要不断学习。

  • 相关阅读:
    反射学习(二)
    反射学习(一)
    web项目问题总结
    MyEclipse使用过程中的问题及对应设置的总结
    JSP的四个作用域
    bootstrap 点击模态框上的提交按钮后,模态框不能关闭的解决办法
    xgboost 参数
    CART树
    GridSearchCV
    xgboost使用
  • 原文地址:https://www.cnblogs.com/znjy/p/14413083.html
Copyright © 2020-2023  润新知