源码上传至https://github.com/durtime/myproject下的temperature

实际效果:

 

开发过程

1.首先进行布局文件的编写,布局前台页面

2.布置两个按钮,一个是填写页面的跳转,一个是查询页面的跳转。进行按钮事件的添加,onclick,重载父类方法,进行页面的跳转。利用intent开启活动activity。

填写页面:输入框(姓名,体温),时间利用android自带的系统函数获取设备的时间

地点获取:采用高德地图SDK

第 1 步,配置AndroidManifest.xml

首先,声明Service组件

在application标签中声明service组件,每个app拥有自己单独的定位service。

<service android:name="com.amap.api.location.APSService"></service>

然后,声明权限


<!--用于进行网络定位-->
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"></uses-permission>
<!--用于访问GPS定位-->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"></uses-permission>
<!--用于获取运营商信息,用于支持提供运营商信息相关的接口-->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission>
<!--用于访问wifi网络信息,wifi信息会用于进行网络定位-->
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"></uses-permission>
<!--用于获取wifi的获取权限,wifi信息会用来进行网络定位-->
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"></uses-permission>
<!--用于访问网络,网络定位需要上网-->
<uses-permission android:name="android.permission.INTERNET"></uses-permission>
<!--用于读取手机当前的状态-->
<uses-permission android:name="android.permission.READ_PHONE_STATE"></uses-permission>
<!--用于写入缓存数据到扩展存储卡-->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>
<!--用于申请调用A-GPS模块-->
<uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS"></uses-permission>

最后,设置高德Key

在application标签中加入:

<meta-data android:name="com.amap.api.v2.apikey" android:value="key">//开发者申请的key       

</meta-data>

第 2 步,初始化定位

在主线程中声明AMapLocationClient类对象,需要传Context类型的参数。推荐用getApplicationContext()方法获取全进程有效的context。


//声明AMapLocationClient类对象
public AMapLocationClient mLocationClient = null;
//声明定位回调监听器
public AMapLocationListener mLocationListener = new AMapLocationListener();
//初始化定位
mLocationClient = new AMapLocationClient(getApplicationContext());
//设置定位回调监听
mLocationClient.setLocationListener(mLocationListener);

第 3 步,配置参数并启动定位

创建AMapLocationClientOption对象

AMapLocationClientOption对象用来设置发起定位的模式和相关参数。


//声明AMapLocationClientOption对象
public AMapLocationClientOption mLocationOption = null;
//初始化AMapLocationClientOption对象
mLocationOption = new AMapLocationClientOption();

启动定位

//给定位客户端对象设置定位参数
mLocationClient.setLocationOption(mLocationOption);
//启动定位
mLocationClient.startLocation();

根据回调函数mylisener设置textview部件,设置参数得到地址。

数据提交保存

将所有的数据保存到android的数据库中

第一步: 创建一个类继承 SQLiteOpenHelper  并实现父类的构造
            
  1. public class MySQLOpenHelper extends SQLiteOpenHelper {
  2. public MySQLOpenHelper(Context context) {
  3. /**第一个参数 上下文
  4. 第二个参数 创建的数据库文件名字
  5. 第三个参数 游标工厂 通过游标工厂可以获得执行查询语句的返回值 Curor
  6. 可以传 null 采用默认的游标工厂
  7. 第四个参数 数据库的版本号 从1开始
  8. **/
  9. super(context, "info.db", null, 1);
  10. }
                第二步  重写onCreate 方法 和onUpgrade 方法
                第三步  在Activity中 创建MySQLOpenHelper对象( 至此并没有创建数据库)
                第四部  调用 MySQLOpenHelper的getReadableDatabase或getWriteableDatabase方法获取SQLiteDataBase对象
 
  1. public class MainActivity extends Activity {
  2. private SQLiteDatabase db;
  3. @Override
  4. protected void onCreate(Bundle savedInstanceState) {
  5. super.onCreate(savedInstanceState);
  6. setContentView(R.layout.activity_main);
  7. MySQLOpenHelper openHelper = new MySQLOpenHelper(this);
  8. //获取SQLiteDatabase对象 如果数据库不存在则创建 如果存在则打开 如果磁盘空间满则出错
  9. db = openHelper.getWritableDatabase();
  10. //与getWritableDatabase功能类似 但如果磁盘空间满则会返回一个只读的数据库
  11. db = openHelper.getReadableDatabase();
  12. }

onCreate方法(必须实现的方法)

        当调用getReadableDatabase或getWriteableDatabase方法 第一次创建数据库的时候会执行这个方法
        作用: 在这个方法中做创建表 和初始化数据的操作
  1. @Override
  2. public void onCreate(SQLiteDatabase db) {
  3. //适合做创建表 初始化数据的操作
  4. db.execSQL("create table info (_id integer primary key autoincrement, name varchar(20),phone varchar(20))");
  5. }
 

onUpgrade方法(必须实现的方法)

         当调用getReadableDatabase或getWriteableDatabase方法时 如果数据库版本号变大 则会调用这个方法
         作用: 在这个方法中做数据库或表结构修改的操作 比如给表添加字段 或给数据库增加新的表
    1. @Override
    2. public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    3. //通过oldVersion 和newVersion 可以判断当前版本号和最新的版本号
    4. //真实开发环境可能会针对不同的数据库版本做不同的操作
    5. db.execSQL("alter table info add age integer");
    6. }
  1. public void insert(View v) {
  2. SQLiteDatabase db = openHelper.getReadableDatabase();
  3. db.execSQL("insert into info(name,phone) values('赵四','13888888888')");
  4. db.execSQL("insert into info(name,phone) values('王五','13888888888')");
  5. db.close();
  6. }
  7. public void update(View v) {
  8. SQLiteDatabase db = openHelper.getReadableDatabase();
  9. db.execSQL("update info set phone = '12345678' where name='赵四' ");
  10. db.close();
  11. }
  12. public void delete(View v) {
  13. SQLiteDatabase db = openHelper.getReadableDatabase();
  14. db.execSQL("delete from info where name = '赵四'");
  15. db.close();
  16. }
  17. public void query(View v) {
  18. SQLiteDatabase db = openHelper.getReadableDatabase();
  19. Cursor cursor = db.rawQuery("select * from info where name = ? ; ", new String[]{"王五"});
  20. while(cursor.moveToNext()){
  21. for (int i = 0; i < cursor.getColumnCount(); i++) {
  22. String result = cursor.getString(i);
  23. Log.d("MainActivity", result+"");
  24. }
  25. }
  26. db.close();
  27. }

进行数据库的操作存入数据

查询数据

将查到的数据利用listview展示,用listview的子方法onclicklistview点击查看详细信息。

遇到的问题

在获取地址时,调用外部的api,导入SDK遇到较多问题。

最开始用的是百度地图SDK,根据开发文档,编写好相关的方法,在测试时出现了版本不适的问题。Android百度地图定位API onReceiveLocation没有调用,无法进行定位。于是换了

最新的版本,又出现了问题,百度地图的jar包中有文件编译版本高于我的jdk版本,无法解析相关的class问价,编译不能通过。问题一直未解决。于是换高德地图,成功根据相关文档获取的位置信息。

源码

AndroidManifest

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.study.temperature"
android:versionCode="1"
android:versionName="1.0" > <!-- 用于进行网络定位 -->
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" >
</uses-permission>
<!-- 用于访问GPS定位 -->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" >
</uses-permission>
<!-- 获取运营商信息,用于支持提供运营商信息相关的接口 -->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" >
</uses-permission>
<!-- 用于访问wifi网络信息,wifi信息会用于进行网络定位 -->
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" >
</uses-permission>
<!-- 这个权限用于获取wifi的获取权限,wifi信息会用来进行网络定位 -->
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" >
</uses-permission>
<!-- 用于访问网络,网络定位需要上网 -->
<uses-permission android:name="android.permission.INTERNET" >
</uses-permission>
<!-- 用于读取手机当前的状态 -->
<uses-permission android:name="android.permission.READ_PHONE_STATE" >
</uses-permission>
<!-- 写入扩展存储,向扩展卡写入数据,用于写入缓存定位数据 -->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" >
</uses-permission>
<!-- 用于申请调用A-GPS模块 -->
<uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS" >
</uses-permission>
<!-- 用于申请获取蓝牙信息进行室内定位 -->
<uses-permission android:name="android.permission.BLUETOOTH" >
</uses-permission>
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" >
</uses-permission> <uses-sdk
android:minSdkVersion="17"
android:targetSdkVersion="29" /> <application
android:allowBackup="true"
android:icon="@drawable/preferences_desktop_icons_72px_572043_easyicon"
android:label="@string/app_name"
android:requestLegacyExternalStorage="true"
android:theme="@style/AppTheme" >
<activity
android:name=".MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name=".InActivity"
android:label="@string/title_activity_in" >
</activity>
<activity
android:name=".OutActivity"
android:label="@string/title_activity_out" >
</activity> <service android:name="com.amap.api.location.APSService" >
</service> <meta-data
android:name="com.amap.api.v2.apikey"
android:value="cda85f6569f758ce27c1e616ecbb390c" /> <activity
android:name=".SmallitemActivity"
android:label="@string/title_activity_smallitem" >
</activity>
</application> </manifest>

mainactivity

package com.study.temperature;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button; public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button bt_in = (Button)findViewById(R.id.bt_in);
//数据填写跳转
//绑定监听事件
bt_in.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) { //点击跳转
Intent intent =new Intent(MainActivity.this,InActivity.class);
//启动填写页面
startActivity(intent);
}
}); //数据查询------------------------------------------------------------------------------------------
Button bt_out = (Button)findViewById(R.id.bt_out);
bt_out.setOnClickListener(new OnClickListener() { @Override
public void onClick(View v) {
//点击跳转
Intent intent =new Intent(MainActivity.this,OutActivity.class);
//启动填写页面
startActivity(intent);
} });
} }

main_xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.study.temperature.MainActivity" > <TextView
android:id="@+id/tx_outline"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_above="@+id/bt_in"
android:layout_centerHorizontal="true"
android:layout_marginBottom="62dp"
android:text="体温填报查看SYSTEM"
android:textColor="#771133"
android:textSize="25sp" /> <Button
android:id="@+id/bt_in"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_above="@+id/bt_out"
android:layout_centerHorizontal="true"
android:layout_marginBottom="20dp"
android:text="填写信息" /> <Button
android:id="@+id/bt_out"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/bt_in"
android:layout_centerVertical="true"
android:text="查询信息" /> </RelativeLayout>

inactivity

package com.study.temperature;

import android.app.Activity;
import android.content.Intent;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.text.TextUtils;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast; import java.util.Calendar; import com.amap.api.location.AMapLocation;
import com.amap.api.location.AMapLocationClient;
import com.amap.api.location.AMapLocationClientOption;
import com.amap.api.location.AMapLocationClientOption.AMapLocationMode;
import com.amap.api.location.AMapLocationListener; public class InActivity extends Activity {
//地址
private Button bt_start;
private TextView tv_locat; private MyopenHelper helper;
private EditText et_name;
private EditText et_temon;
private EditText et_temunder;
private TextView tv_time; private AMapLocationClient mLocationClient = null;
private AMapLocationListener mLocationListener = null; /**
* 接受百度地图定位的回调类,该类是派生于百度地图的一个地图定位的监听类,用于定位后信息的返回。
*/
/**
* 自定义的定位回调接口监听器,该接口是自定义的一个接口,用于在使用该对象时,把定位信息进行回调;
*/
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_in);
bt_start = (Button)findViewById(R.id.bt_start);
tv_locat = (TextView)findViewById(R.id.tv_locat);
bt_start.setOnClickListener(new OnClickListener() { @Override
public void onClick(View v) {
if(bt_start.getText().equals("开始定位")) {
bt_start.setText("stop");
//声明AMapLocationClient类对象
//初始化定位
mLocationClient = new AMapLocationClient(getApplicationContext());
mLocationListener = new AMapLocationListener(){
@Override
public void onLocationChanged(AMapLocation location) {
if (location != null) {
if (location.getErrorCode() == 0) {
//解析定位结果 String province = location.getProvince(); //获取省份
String city = location.getCity(); //获取城市
String district = location.getDistrict(); //获取区县
String street = location.getStreet(); //获取街道信息
StringBuilder myPosition=new StringBuilder();
myPosition.append("纬度:").append(location.getLatitude()).append("\n");
myPosition.append("经度:").append(location.getLongitude()).append("\n");
myPosition.append("省份:").append(province).append("\n");
myPosition.append("城市:").append(city).append("\n");
myPosition.append("区:").append(district).append("\n");
myPosition.append("街道:").append(street).append("\n");
myPosition.append("门牌号:").append(location.getStreetNum());//街道门牌号信息
tv_locat.setText(myPosition);
}
}
}
};
//设置定位回调监听
mLocationClient.setLocationListener(mLocationListener); //异步获取定位结果 initLocation(); //启动定位
mLocationClient.startLocation();
}else if(bt_start.getText().equals("stop")) {
bt_start.setText("开始定位");
close(); }
}
}); //------------------------
et_name = (EditText)findViewById(R.id.et_name);
et_temon = (EditText)findViewById(R.id.et_temon);
et_temunder = (EditText)findViewById(R.id.et_temunder); Calendar calendar = Calendar.getInstance();
//年
int year = calendar.get(Calendar.YEAR);
//月
int month = calendar.get(Calendar.MONTH)+1;
//日
int day = calendar.get(Calendar.DAY_OF_MONTH);
//获取系统时间
//小时
int hour = calendar.get(Calendar.HOUR_OF_DAY);
//分钟
int minute = calendar.get(Calendar.MINUTE);
//秒
int second = calendar.get(Calendar.SECOND); tv_time = findViewById(R.id.tv_time);
tv_time.setText(year+"年"+month+"月"+day+"日"+hour+":"+minute+":"+second); helper = new MyopenHelper(this,1);
Button bt_tijiao = (Button)findViewById(R.id.bt_tijiao);
bt_tijiao.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
//打开数据库
SQLiteDatabase readableDatabase = helper.getReadableDatabase();
//获取edittext数据
String text = et_name.getText().toString().trim();
String text2 = et_temon.getText().toString().trim();
String text3 = et_temunder.getText().toString().trim();
String text4 = tv_time.getText().toString().trim();
String text5 = tv_locat.getText().toString().trim();
if (TextUtils.isEmpty(text)||TextUtils.isEmpty(text2)||TextUtils.isEmpty(text3)) {
Toast.makeText(InActivity.this, "输入不能为空", Toast.LENGTH_SHORT).show();
}else { String sql = "insert into info (name,temon,temunder,time,locat) values('"+text+"','"+text2+"','"+text3+"','"+text4+"','"+text5+"')";
readableDatabase.execSQL(sql);
readableDatabase.close();
Toast.makeText(InActivity.this, "提交成功!", Toast.LENGTH_SHORT).show();
Intent intent =new Intent(InActivity.this,MainActivity.class);
finish();//结束当前活动
startActivity(intent);
}
}
});
} private void initLocation() {
AMapLocationClientOption option = new AMapLocationClientOption();
option.setGpsFirst(true); // 打开gps;
//可选,是否需要地址信息,默认为不需要,即参数为false
//设置定位模式为AMapLocationMode.Hight_Accuracy,高精度模式。
option.setLocationMode(AMapLocationMode.Hight_Accuracy); //可选,设置是否需要最新版本的地址信息。默认需要,即参数为true
mLocationClient.setLocationOption(option);
//mLocationClient为第二步初始化过的LocationClient对象
//需将配置好的LocationClientOption对象,通过setLocOption方法传递给LocationClient对象使用
//更多LocationClientOption的配置,请参照类参考中LocationClientOption类的详细说明
}
private void close() {
mLocationClient.stopLocation();
mLocationClient.unRegisterLocationListener(mLocationListener);
mLocationClient.onDestroy();
} }

in_xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.study.temperature.InActivity" > <LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal" > <TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="姓名:" /> <EditText
android:id="@+id/et_name"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ems="10"
android:hint="请输入" />
</LinearLayout> <LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal" > <TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="上午体温:" /> <EditText
android:id="@+id/et_temon"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ems="10"
android:hint="请输入" />
</LinearLayout> <LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal" > <TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="下午体温:" /> <EditText
android:id="@+id/et_temunder"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ems="10"
android:hint="请输入" />
</LinearLayout> <TextView
android:id="@+id/tv_time"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="时间" /> <Button
android:id="@+id/bt_start"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="开始定位" /> <TextView
android:id="@+id/tv_locat"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="地址"/> <Button
android:id="@+id/bt_tijiao"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="210dp"
android:onClick="insert"
android:text="提交" /> </LinearLayout>

outactivity

package com.study.temperature;

import java.util.ArrayList;
import android.app.Activity;
import android.content.Intent;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.BaseAdapter;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast; public class OutActivity extends Activity { private ListView lv_list;
private ArrayList<Person> persons = new ArrayList<Person>(); @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_out); lv_list = (ListView)findViewById(R.id.lv_list);
MyopenHelper helper = new MyopenHelper(this,1);
SQLiteDatabase readableDatabase = helper.getReadableDatabase();
String sql = "select * from info";
Cursor curor = readableDatabase.rawQuery(sql , null);
//遍历查询到的结果
int count=0;
while(curor.moveToNext()){
//创建person对象
Person person = new Person();
//根据列名 name 获取数据库中对应的值
String name = curor.getString(curor.getColumnIndex("name"));
//根据列名 phone 获取数据库中对应的值
String temon = curor.getString(curor.getColumnIndex("temon"));
String temunder = curor.getString(curor.getColumnIndex("temunder"));
String time = curor.getString(4);
String locat = curor.getString(5);
//设置相应数据
person.setName(name);
person.setTemon(temon);
person.setTemunder(temunder);
person.setTime(time);
person.setLocat(locat);
//把数据添加到集合
persons.add(person);
count++;
}
//list显示
//把数据适配器和listview绑定
lv_list.setAdapter(new MyAdapter());
//关闭游标
curor.close();
helper.close();
if(count!=0) {
Toast.makeText(this, "查询成功", Toast.LENGTH_SHORT).show();
}else {
Toast.makeText(this, "查询失败", Toast.LENGTH_SHORT).show();
}
lv_list.setOnItemClickListener(new OnItemClickListener() { @Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
//点击跳转
Intent intent =new Intent(OutActivity.this,SmallitemActivity.class);
//启动填写页面
Person tem =persons.get(position);
intent.putExtra("name",tem.getName());
intent.putExtra("info", tem.getTime()+"\n"+tem.getLocat());
startActivity(intent);
}
});
}
private class MyAdapter extends BaseAdapter{ //返回要展示的数据集合的条目数
@Override
public int getCount() {
return persons.size();
}
//通过adapter传进来的posion(listview中条目的position)
//把它对应的数据集合中的对象返回来
@Override
public Object getItem(int position) {
return persons.get(position);
} @Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
//①把布局文件转换为View对象 需要判断convertView是否为空
View view= null;
if(convertView == null){
//创建view对象
view = View.inflate(OutActivity.this, R.layout.item, null);
}else{
//复用旧的convertView
view = convertView;
}
//②找到要修改的控件的对象 注意要调用view.findViewById
TextView tv_name = (TextView)view.findViewById(R.id.tv_name);
TextView tv_tem = (TextView)view.findViewById(R.id.tv_tem); //③ 设置数据
//3.1通过position 到数据集合中把要显示的数据找到
Person person = persons.get(position);
//3.2把要显示的内容展示到对应的View对象上
tv_name.setText(person.getName());
tv_tem.setText("上午:"+person.getTemon()+"下午:"+person.getTemunder());
return view;
}
}
}

out_xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.study.temperature.OutActivity" > <ListView
android:id="@+id/lv_list"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fastScrollEnabled="true" /> </RelativeLayout>

只帖了主要的,完整见GitHub,欢迎提出不足之处。

android体温登记APP开发过程+问题汇总+源码的更多相关文章

  1. Android斗地主棋牌游戏牌桌实现源码下载

    本次给大家分享下Android斗地主棋牌游戏牌桌实现源码下载如下: 为了节约内存资源,每张扑克牌都是剪切形成的,当然这也是当前编程的主流方法. 1.主Activity package com.biso ...

  2. 用ionic快速开发hybird App(已附源码,在下面+总结见解)

    1.ionic简介 ionic 是用于敏捷开发APP的解决方案.核心思路是:利用成熟的前端开发技术,来写UI和业务逻辑.也就是说,就是一个H5网站,这个区别于react-native,native.即 ...

  3. Android Studio2.x版本无法自动关联源码的解决方法

    Android Studio2.x版本无法自动关联源码的解决方法 在学习android开发过程中,对于一个不熟悉的类,阅读源码是一个很好的学习方式,使用andorid studio开发工具的SDK M ...

  4. 【Android 系统开发】CyanogenMod 13.0 源码下载 编译 ROM 制作 ( 手机平台 : 小米4 | 编译平台 : Ubuntu 14.04 LTS 虚拟机)

                 分类: Android 系统开发(5)                                              作者同类文章X 版权声明:本文为博主原创文章 ...

  5. Android 全面插件化 RePlugin 流程与源码解析

    转自 Android 全面插件化 RePlugin 流程与源码解析 RePlugin,360开源的全面插件化框架,按照官网说的,其目的是“尽可能多的让模块变成插件”,并在很稳定的前提下,尽可能像开发普 ...

  6. android版高仿淘宝客户端源码V2.3

    android版高仿淘宝客户端源码V2.3,这个版本我已经更新到2.3了,源码也上传到源码天堂那里了,大家可以看一下吧,该应用实现了我们常用的购物功能了,也就是在手机上进行网购的流程的,如查看产品(浏 ...

  7. Android 图片加载框架Glide4.0源码完全解析(二)

    写在之前 上一篇博文写的是Android 图片加载框架Glide4.0源码完全解析(一),主要分析了Glide4.0源码中的with方法和load方法,原本打算是一起发布的,但是由于into方法复杂性 ...

  8. 【转载】Android异步消息处理机制详解及源码分析

    PS一句:最终还是选择CSDN来整理发表这几年的知识点,该文章平行迁移到CSDN.因为CSDN也支持MarkDown语法了,牛逼啊! [工匠若水 http://blog.csdn.net/yanbob ...

  9. Android Studio 一个完整的APP实例(附源码和数据库)

    前言: 这是我独立做的第一个APP,是一个记账本APP. This is the first APP, I've ever done on my own. It's a accountbook APP ...

随机推荐

  1. Unity3d_2018_2019_2020安装包

    网上各种注册,官网登陆这么麻烦,留着自用 链接:https://pan.baidu.com/s/1LBtMetnr9xkOa18xYiFoDA 提取码:o01t 链接:https://pan.baid ...

  2. (重磅)Internal: Failed to call ThenRnnForward with model config问题的解决(Keras 2.4.3和Tensorflow2.0系列)

    与此问题斗争了整整十天.win10,keras2.4.3,CUDA 10.1,CUDNN 7.6, tensorflow 2.3.0,驱动程序nvida 452 该问题出现在BiLSTM(GPU加速) ...

  3. 激光雷达Lidar Architecture and Lidar Design(下)

    Considerations on Lidar Design 双基地还是单基地? 双轴还是同轴? 几何重叠 向上还是向下看? 关心分散还是只关心时间? 发射器和接收器的波长 是否可调? 发射器和接收器 ...

  4. CVPR2020:4D点云语义分割网络(SpSequenceNet)

    CVPR2020:4D点云语义分割网络(SpSequenceNet) SpSequenceNet: Semantic Segmentation Network on 4D Point Clouds 论 ...

  5. python读取配置文件,yaml模块读取yml文件

    ymal文件编写语法参考http://www.ruanyifeng.com/blog/2016/07/yaml.html ymal在python中的安装:pip install pyyaml yml文 ...

  6. python常识系列14-->正则表达式基础之re模块

    前言 勤奋的含义是今天的热血,而不是明天的决心,后天的保证. 一.正则表达式是什么? 描述了一种字符串匹配的模式(pattern) 功能一:用来检查一个字符串串是否含有某种子字符串 功能二:将匹配的子 ...

  7. Java算法面试题(史上最强、持续更新、吐血推荐)

    文章很长,建议收藏起来,慢慢读! 疯狂创客圈为小伙伴奉上以下珍贵的学习资源: 疯狂创客圈 经典图书 : <Netty Zookeeper Redis 高并发实战> 面试必备 + 大厂必备 ...

  8. mybatis入“坑”第一步

    一.导入坐标 要想通过maven创建一个简单的mybatis项目,首先需要的是要导入相关的坐标.需要导入的坐标如下: <dependencies> <!--mysql驱动坐标--&g ...

  9. 重新整理 .net core 实践篇————熔断与限流[三十五]

    前言 简单整理一下熔断与限流,跟上一节息息相关. 正文 polly 的策略类型分为两类: 被动策略(异常处理.结果处理) 主动策略(超时处理.断路器.舱壁隔离.缓存) 熔断和限流通过下面主动策略来实现 ...

  10. Jquery手机点击其他地方隐藏控件问题

    因为不太懂mui的底部导航栏的操作,所以自己写了用很普通的方法实现手机底部导航栏,遇到了很多问题.比如:要实现点击底部菜单栏上某一个菜单,显示子菜单,然后点击手机空白处,隐藏菜单. 实现方法是: // ...