【第一部分】歷史文章:
Android學習筆記(一)——創建第一個Android項目
Android學習筆記(二)android studio基本控件及佈局(實現圖片查看器)
Android學習筆記(三)android studio中CheckBox自定義樣式(更換複選框左側的勾選圖像)
Android學習筆記(四)Android 中Activity頁面的跳轉及傳值
Android學習筆記(五)——Toast提示、Dialog對話框、Menu菜單
Android學習筆記(六)——自定義ListView佈局+AsyncTask異步任務
Android學習筆記(七)——數據存儲(共享參數SharedPreferences)
Android學習筆記(八)——數據存儲(SD卡文件操作)
Android學習筆記(九)——網絡技術
Android學習筆記(十)——實現新聞列表案例
Android學習筆記(十一)——一些高級控件的使用
Android學習筆記(十二)——數據存儲(SQLite數據庫)
【第二部分】主要問題解決:
Android Studio(存)讀取不了SD卡上的文件——【已解決】
LitePal
是一款開源的Android數據庫框架,它採用了對象關係映射(ORM)的模式,並且將我們平時開發的最常用的一些數據庫操作功能進行了封裝,使得不用編寫一行SQL語句就可以完成各種表和CRUD的基本操作。
LitePal使用Github地址:https://github.com/LitePalFramework/LitePal
下面介紹LitePal的使用:
1、配置LitePal。
在項目的app/build.gradle
文件中,在dependencies
閉包中添加如下依賴:
compile 'org.litepal.android:core:1.4.1'
如下:
注:1.4.1是版本號,最新的版本可以在Litepal的項目主頁上去查看。
2、配置litepal文件。
在工程裏的assets
文件夾裏新建一個litepal.xml
文件。
編輯litepal.xml
文件中的內容,如下所示:
<?xml version="1.0" encoding="utf-8"?>
<litepal>
<dbname value="litepal" />
<version value="1" />
<list>
<mapping class="cn.edu.hznu.litepal.bean.Messgae"></mapping>
</list>
</litepal>
<dbname>
標籤指定數據庫。<version>
標籤用於指定數據庫的版本號。<list>
標籤用於指定所有的映射模型。<mapping>
標籤聲明我們要配置的模型類,要使用完整的類名。
注意:我們經過配置以上的內容後,最後還要在AndroidManifest.xml
中進行配置LitePalApplication
。這樣才能讓LiteOal的所有的功能都可以正常的工作。
配置內容:
android:name="org.litepal.LitePalApplication"
3、創建和升級數據庫。
經過上面的二步,我相信配置已經沒有問題了,下面我們就開始正式的使用它了。
我們之前創建數據庫時通過自定義一個類來繼承字SQLiteOpenHelper
,然後在onCreate()
方法中編寫建表語句來實現的,而使用LitePal
就不用這麼的麻煩了。
- LitePal採用的是對象關係映射(ORM)的模式。用面向對象的思維去操作數據庫,而不用再和SQL語句打交道了。
- 把Java bean中的屬性 與數據庫表中的字段一一對應。
創建數據庫關鍵語句:
LitePal.getDatabase();
升級數據庫:
只需要將litepal.xml
中的配置文件中的版本號加上1
即可,然後,更改你想要改的內容。比如:想要添加一張Student表
。就可以在litepal.xml
文件中增加如下的內容以及編寫相應的Student類
:
<?xml version="1.0" encoding="utf-8"?>
<litepal>
<dbname value="litepal" />
<version value="2" />
<list>
<mapping class="cn.edu.hznu.litepal.bean.Messgae"></mapping>
<mapping class="cn.edu.hznu.litepal.bean.Student"></mapping>
</list>
</litepal>
注意:我們要進行CRUD操作的時候,必須讓模型類繼承DataSupport類
。
4、添加數據。
創建一個數據模型類的對象,並調用set方法對數據進行設置,再調用save()
方法即完成添加數據。
示例代碼:
Book book = new Book();
book.setName("The Da Vinci Code");
book.setAuthor("Dan Brown");
book.setPages(454);
book.setPrice(16.96);
book.setPress("Unknow");
book.save();
5、修改數據。
創建一個數據模型類的對象,並調用set方法對數據進行設置,再調用updateAll()方法
即完成更新數據。注意在updateAll()方法
中,可以指定一個約束條件,和sql語句
中的where子句
相似。用法與刪除數據相似。
示例代碼:
Book book = new Book();
book.setPrice(14.95);
book.setPress("Anchor");
book.updateAll("name = ? and author = ?", "The Lost Symbol", "Dan Brown");
上述表示:將所有書名是The Lost Symbol並且作者是Dan Brown的書價格修改爲14.95,出版社修改爲Anchor。
6、刪除數據。
- 調用public static int deleteAll(Class<?> modelClass, String… conditions)方法。
該方法第一個參數指定刪除哪張表中的數據,第二個參數指定約束條件。 - 調用public static int delete(Class<?> modelClass, long id)方法。
該方法第一個參數指定刪除哪張表中的數據,第二個參數是一個指定的id,表示我們要刪除哪一行的數據。
示例代碼:
DataSupport.deleteAll(Book.class, "price < ?", "15");
7、查找數據。
- 查找全部:DataSupport.findAll(表名),參數爲查找的數據表(數據模型類)。
- 按條件查找:DataSupport.where(條件).find(表名)。
注:
- 以上查詢返回的是List類型的對象。
- 使用原生SQl語句查詢:DataSupport.findBySQL(原生SQL語句)。返回的是Cursor對象。
示例代碼:
List<Book> books = DataSupport.findAll(Book.class);
for (Book book: books) {
}
下面是一個具體的小案例來運用LitePal操作的數據庫的具體知識點:
關鍵詞:LitePal操作數據庫、自定義適配器、菜單、三級聯動城市選擇器、跑馬燈效果、頁面之間的跳轉傳值等。
具體的效果如下:
具體實現代碼:
工程結構:
下面是項目的準備工作:
app/build.gradle
中添加依賴。
compile 'org.litepal.android:core:1.4.1'
compile 'liji.library.dev:citypickerview:1.1.0'
注:第二個依賴是實現三級城市的聯動選擇。
- AndroidManifest.xml中添加:
android:name="org.litepal.LitePalApplication"
一、編寫填寫信息的佈局文件。
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context="cn.edu.hznu.litepal.MainActivity">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="請正確填寫如下信息,請正確填寫如下信息!"
android:textSize="32sp"
android:textColor="#ff0000"
android:ellipsize="marquee"
android:marqueeRepeatLimit="marquee_forever"
android:focusable="true"
android:focusableInTouchMode="true"
android:singleLine="true"
/>
/>
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="text"
android:ems="10"
android:hint="請輸入你的姓名"
android:textSize="22sp"
android:id="@+id/edit_name" />
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="numberDecimal"
android:ems="10"
android:hint="請輸入你今天的體溫"
android:textSize="22sp"
android:id="@+id/edit_temp" />
<TextView
android:text="*你目前所在的城市"
android:textSize="22sp"
android:layout_width="match_parent"
android:layout_height="wrap_content"
/>
<TextView
android:text="選擇城市 >>>"
android:textColor="#b56464"
android:textSize="22sp"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/text_city" />
<TextView
android:text="*你的健康碼"
android:textSize="22sp"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/textView2" />
<RadioGroup
android:id="@+id/radioGroup1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<RadioButton
android:text="綠碼"
android:textSize="28sp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/radioButton1"
android:layout_weight="1" />
<RadioButton
android:text="黃碼"
android:textSize="28sp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/radioButton2"
android:layout_weight="1" />
<RadioButton
android:text="紅碼"
android:textSize="28sp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/radioButton3"
android:layout_weight="1" />
</RadioGroup>
<Button
android:text="提交"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textSize="28sp"
android:id="@+id/button"
android:onClick="login"
/>
</LinearLayout>
二、編寫展示數據的頁面。
activity_main2.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_main2"
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="cn.edu.hznu.litepal.Main2Activity">
<ListView
android:id="@+id/listview"
android:layout_width="match_parent"
android:layout_height="match_parent">
</ListView>
</RelativeLayout>
三、編寫列表項佈局文件。
item_layout.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal"
android:padding="10dp">
<!--<TextView-->
<!--android:id="@+id/text_content"-->
<!--android:layout_width="0dp"-->
<!--android:layout_height="wrap_content"-->
<!--android:layout_weight="1"-->
<!--android:text="具體內容"-->
<!--android:textColor="#000000"-->
<!--android:textSize="20sp"-->
<!--/>-->
<TextView
android:id="@+id/text_name"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="具體內容"
android:textColor="#000000"
android:textSize="20sp"
/>
<TextView
android:id="@+id/text_temp"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="具體內容"
android:textColor="#000000"
android:textSize="20sp"
/>
<TextView
android:id="@+id/text_city"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="具體內容"
android:textColor="#000000"
android:textSize="20sp"
/>
<TextView
android:id="@+id/text_code"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="具體內容"
android:textColor="#000000"
android:textSize="20sp"
/>
<TextView
android:id="@+id/text_time"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="具體內容"
android:textColor="#000000"
android:textSize="20sp"
/>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical">
<ImageView
android:id="@+id/img_look"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@android:drawable/ic_menu_view"
/>
</LinearLayout>
<ImageView
android:id="@+id/img_edit"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@android:drawable/ic_menu_agenda"
/>
<ImageView
android:id="@+id/img_del"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@android:drawable/ic_menu_delete"
/>
</LinearLayout>
四、編寫修改信息的頁面。
activity_main_edit.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context="cn.edu.hznu.litepal.MainEditActivity">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="請正確填寫如下信息,請正確填寫如下信息!"
android:textSize="32sp"
android:textColor="#ff0000"
android:ellipsize="marquee"
android:marqueeRepeatLimit="marquee_forever"
android:focusable="true"
android:focusableInTouchMode="true"
android:singleLine="true"
/>
/>
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="text"
android:ems="10"
android:hint="請輸入你的姓名"
android:textSize="22sp"
android:id="@+id/edit_name" />
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="numberDecimal"
android:ems="10"
android:hint="請輸入你今天的體溫"
android:textSize="22sp"
android:id="@+id/edit_temp" />
<TextView
android:text="*你目前所在的城市"
android:textSize="22sp"
android:layout_width="match_parent"
android:layout_height="wrap_content"
/>
<TextView
android:text="選擇城市 >>>"
android:textColor="#b56464"
android:textSize="22sp"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/text_city" />
<TextView
android:text="*你的健康碼"
android:textSize="22sp"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/textView2" />
<RadioGroup
android:id="@+id/radioGroup1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<RadioButton
android:text="綠碼"
android:textSize="28sp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/radioButton1"
android:layout_weight="1" />
<RadioButton
android:text="黃碼"
android:textSize="28sp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/radioButton2"
android:layout_weight="1" />
<RadioButton
android:text="紅碼"
android:textSize="28sp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/radioButton3"
android:layout_weight="1" />
</RadioGroup>
<Button
android:text="確定修改"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textSize="28sp"
android:id="@+id/button"
android:onClick="login"
/>
</LinearLayout>
五、編寫顯示詳情頁面。
activity_main_show.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_main_show"
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="cn.edu.hznu.litepal.MainShowActivity">
<TextView
android:id="@+id/text_name"
android:text="姓名"
android:textSize="28sp"
android:textColor="#FF0000"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<TextView
android:id="@+id/text_temp"
android:text="體溫"
android:textSize="28sp"
android:textColor="#FF0000"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<TextView
android:id="@+id/text_city"
android:text="所在城市"
android:textSize="28sp"
android:textColor="#FF0000"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<TextView
android:id="@+id/text_code"
android:text="健康碼"
android:textSize="28sp"
android:textColor="#FF0000"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<TextView
android:id="@+id/text_time"
android:text="填寫時間"
android:textSize="28sp"
android:textColor="#FF0000"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout>
六、編寫菜單佈局文件。
在項目的res
文件夾下創建menu/menu_mainxml
文件。
menu_mainxml
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
>
<item
android:id="@+id/all"
android:orderInCategory="100"
android:title="查看全部"
app:showAsAction="never" />
</menu>
七、自定義數據適配器。
MessageAdapter .java
package cn.edu.hznu.litepal.adapter;
import android.content.Context;
import android.content.Intent;
import android.support.annotation.NonNull;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;
import org.litepal.crud.DataSupport;
import java.util.ArrayList;
import java.util.List;
import cn.edu.hznu.litepal.Main2Activity;
import cn.edu.hznu.litepal.MainActivity;
import cn.edu.hznu.litepal.MainEditActivity;
import cn.edu.hznu.litepal.MainShowActivity;
import cn.edu.hznu.litepal.R;
import cn.edu.hznu.litepal.bean.Messgae;
public class MessageAdapter extends ArrayAdapter<Messgae>{
private int item_layout_id;
private Context con;
List<Messgae> list;
public MessageAdapter(Context context, int resource, ArrayList<Messgae> objects) {
super(context, resource, objects);
item_layout_id=resource;
con=context;
list=objects;
}
@NonNull
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View view=null; //當前列表項的子視圖
ViewHolder holder;
if(convertView==null){//回收站爲空\
/**
* LayoutInflater.from()得到佈局填充器對象
* getContext()獲取當前上下文
* inflate() 加載填充佈局
*/
view= LayoutInflater.from(getContext())
.inflate(item_layout_id,parent,false);
holder=new ViewHolder(view);
view.setTag(holder);
}else {//顯示後續的列表項
view=convertView;
holder= (ViewHolder) view.getTag();
}
final Messgae itemData=getItem(position);
holder.text_name.setText(itemData.getName());
holder.text_temp.setText(itemData.getTemp());
holder.text_city.setText(itemData.getCity());
holder.text_code.setText(itemData.getCode());
holder.text_time.setText(itemData.getTime());
//刪除操作
holder.img_del.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
DataSupport.deleteAll(Messgae.class,"name=?",itemData.getName().toString());
list.remove(itemData);
notifyDataSetChanged();
Toast.makeText(con, itemData.getName()+"刪除成功!!", Toast.LENGTH_SHORT).show();
}
});
//修改操作、跳轉頁面、傳值
holder.img_edit.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(con, MainEditActivity.class);
intent.putExtra("name",itemData.getName());
intent.putExtra("temp",itemData.getTemp());
intent.putExtra("city",itemData.getCity());
intent.putExtra("code",itemData.getCode());
intent.putExtra("time",itemData.getTime());
view.getContext().startActivity(intent);
}
});
//查看詳情頁面
holder.img_look.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(con, MainShowActivity.class);
intent.putExtra("name",itemData.getName());
intent.putExtra("temp",itemData.getTemp());
intent.putExtra("city",itemData.getCity());
intent.putExtra("code",itemData.getCode());
intent.putExtra("time",itemData.getTime());
view.getContext().startActivity(intent);
}
});
return view;
}
class ViewHolder{
TextView text_name;
TextView text_temp;
TextView text_city;
TextView text_code;
TextView text_time;
ImageView img_look;
ImageView img_edit;
ImageView img_del;
public ViewHolder(View view){
text_name= (TextView) view.findViewById(R.id.text_name);
text_temp= (TextView) view.findViewById(R.id.text_temp);
text_city= (TextView) view.findViewById(R.id.text_city);
text_code= (TextView) view.findViewById(R.id.text_code);
text_time= (TextView) view.findViewById(R.id.text_time);
img_look= (ImageView) view.findViewById(R.id.img_look);
img_edit= (ImageView) view.findViewById(R.id.img_edit);
img_del= (ImageView) view.findViewById(R.id.img_del);
}
}
}
八、編寫對應的實體類。
Message.java
package cn.edu.hznu.litepal.bean;
import org.litepal.crud.DataSupport;
public class Messgae extends DataSupport{
private int id;
private String name;
private String temp;
private String city;
private String code;
private String time;
public Messgae() {
}
public Messgae(int id, String name, String temp, String city, String code, String time) {
this.id = id;
this.name = name;
this.temp = temp;
this.city = city;
this.code = code;
this.time = time;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getTemp() {
return temp;
}
public void setTemp(String temp) {
this.temp = temp;
}
public String getCity() {
return city;
}
public void setCity(String city) {
this.city = city;
}
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
public String getTime() {
return time;
}
public void setTime(String time) {
this.time = time;
}
}
九、編寫MainActivity.java代碼。
MainActivity.java
package cn.edu.hznu.litepal;
import android.content.Intent;
import android.graphics.Color;
import android.support.annotation.NonNull;
import android.view.Menu;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.text.TextUtils;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.RadioButton;
import android.widget.RadioGroup;
import android.widget.TextView;
import android.widget.Toast;
import java.text.SimpleDateFormat;
import java.util.Date;
import com.lljjcoder.citypickerview.widget.CityPicker;
import org.litepal.LitePal;
import cn.edu.hznu.litepal.bean.Messgae;
public class MainActivity extends AppCompatActivity {
private EditText edit_name, edit_temp;
private TextView text_city;
private RadioGroup radioGroup;
private RadioButton rb;
private Button button;
private CityPicker cityPicker;
String name, temp, city, code, time;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
edit_name = (EditText) findViewById(R.id.edit_name);
edit_temp = (EditText) findViewById(R.id.edit_temp);
text_city = (TextView) findViewById(R.id.text_city);
radioGroup = (RadioGroup) findViewById(R.id.radioGroup1);
button = (Button) findViewById(R.id.button);
//button的點擊事件
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
LitePal.getDatabase(); //創建數據庫
//獲取值
name = edit_name.getText().toString().trim();
temp = edit_temp.getText().toString().trim();
city = text_city.getText().toString().trim();
//獲取當前時間
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//設置日期格式
time = df.format(new Date()).toString();// new Date()爲獲取當前系統時間
for(int i = 0 ;i < radioGroup.getChildCount();i++){
RadioButton rb = (RadioButton)radioGroup.getChildAt(i);
if(rb.isChecked()){
code=rb.getText().toString().trim();
break;
}
}
if (TextUtils.isEmpty(name) || TextUtils.isEmpty(temp) || TextUtils.isEmpty(city) || TextUtils.isEmpty(code)) {
Toast.makeText(MainActivity.this, "請填寫完整信息!!", Toast.LENGTH_SHORT).show();
return;
} else {
Messgae message = new Messgae();
message.setName(name);
message.setTemp(temp);
message.setCity(city);
message.setCode(code);
message.setTime(time); //保存當前時間
message.save();
Toast.makeText(MainActivity.this, "信息提交成功!!", Toast.LENGTH_SHORT).show();
Intent intent = new Intent(MainActivity.this, Main2Activity.class);
startActivity(intent);
}
}
});
//選擇地址的點擊事件
text_city.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
initCityPicker();
cityPicker.show();
}
private void initCityPicker() {
cityPicker=new CityPicker.Builder(MainActivity.this)
.textSize(20)
.title("選擇地址")
.backgroundPop(0xa0000000)
.titleBackgroundColor("#0CB6CA")
.titleTextColor("#000000")
.cancelTextColor("#000000")
.confirTextColor("#000000")
.province("xx省")
.city("xx市")
.district("xx區")
.textColor(Color.parseColor("#000000"))
.provinceCyclic(true)
.cityCyclic(false)
.districtCyclic(false)
.visibleItemsCount(7)
.itemPadding(10)
.onlyShowProvinceAndCity(false)
.build();
cityPicker.setOnCityItemClickListener(new CityPicker.OnCityItemClickListener() {
@Override
public void onSelected(String... strings) {
String province=strings[0];
String city=strings[1];
String dist=strings[2];
String code=strings[3];
text_city.setText(province+","+city+","+dist);
}
@Override
public void onCancel() {
}
});
}
});
}
//菜單
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu_main,menu);//獲取當前菜單對象,加載菜單佈局文件
return true;//顯示菜單
}
@Override
public boolean onOptionsItemSelected(@NonNull MenuItem item) {
switch (item.getItemId()){
case R.id.all:
Intent intent = new Intent(MainActivity.this, Main2Activity.class);
startActivity(intent);
break;
default:
}
return true;
}
}
十、編寫 MainEditActivity.java代碼。
MainEditActivity.java
package cn.edu.hznu.litepal;
import android.content.Intent;
import android.graphics.Color;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.RadioButton;
import android.widget.RadioGroup;
import android.widget.TextView;
import android.widget.Toast;
import com.lljjcoder.citypickerview.widget.CityPicker;
import java.text.SimpleDateFormat;
import java.util.Date;
import cn.edu.hznu.litepal.bean.Messgae;
public class MainEditActivity extends AppCompatActivity {
private CityPicker cityPicker;
private String name,temp,city,code,time;
private String name_next,temp_next,city_next,code_next,time_next;
private EditText edit_name, edit_temp;
private TextView text_city;
private RadioGroup radioGroup;
private RadioButton rb[] =new RadioButton[3];
private Button button;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main_edit);
text_city=(TextView)findViewById(R.id.text_city) ;
radioGroup = (RadioGroup) findViewById(R.id.radioGroup1);
Bundle bundle=getIntent().getExtras();
name=bundle.getString("name");
temp=bundle.getString("temp");
city=bundle.getString("city");
code=bundle.getString("code");
time=bundle.getString("time");
init();
edit_name.setText(name);
edit_temp.setText(temp);
text_city.setText(city);
if(code.equals("綠碼")){
rb[0].setChecked(true);
}
if(code.equals("黃碼")){
rb[1].setChecked(true);
}
if(code.equals("紅碼")){
rb[2].setChecked(true);
}
edit_name.setFocusable(false);
edit_name. setFocusableInTouchMode(false);
text_city.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
initCityPicker();
cityPicker.show();
}
});
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//獲取值
name_next = edit_name.getText().toString().trim();
temp_next = edit_temp.getText().toString().trim();
city_next = text_city.getText().toString().trim();
//獲取當前時間
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//設置日期格式
time_next = df.format(new Date()).toString();// new Date()爲獲取當前系統時間
for(int i = 0 ;i < radioGroup.getChildCount();i++){
RadioButton rb = (RadioButton)radioGroup.getChildAt(i);
if(rb.isChecked()){
code_next=rb.getText().toString().trim();
break;
}
}
Messgae message = new Messgae();
message.setTemp(temp_next);
message.setCity(city_next);
message.setCode(code_next);
message.setTime(time_next);
message.updateAll("name=?",name);
Toast.makeText(MainEditActivity.this, "信息修改成功!!", Toast.LENGTH_SHORT).show();
Intent intent = new Intent(MainEditActivity.this, Main2Activity.class);
startActivity(intent);
}
});
}
private void initCityPicker() {
cityPicker=new CityPicker.Builder(MainEditActivity.this)
.textSize(20)
.title("選擇地址")
.backgroundPop(0xa0000000)
.titleBackgroundColor("#0CB6CA")
.titleTextColor("#000000")
.cancelTextColor("#000000")
.confirTextColor("#000000")
.province("xx省")
.city("xx市")
.district("xx區")
.textColor(Color.parseColor("#000000"))
.provinceCyclic(true)
.cityCyclic(false)
.districtCyclic(false)
.visibleItemsCount(7)
.itemPadding(10)
.onlyShowProvinceAndCity(false)
.build();
cityPicker.setOnCityItemClickListener(new CityPicker.OnCityItemClickListener() {
@Override
public void onSelected(String... strings) {
String province=strings[0];
String city=strings[1];
String dist=strings[2];
String code=strings[3];
text_city.setText(province+","+city+","+dist);
}
@Override
public void onCancel() {
}
});
}
private void init() {
edit_name = (EditText) findViewById(R.id.edit_name);
edit_temp = (EditText) findViewById(R.id.edit_temp);
text_city = (TextView) findViewById(R.id.text_city);
rb[0] = (RadioButton) findViewById(R.id.radioButton1);
rb[1] = (RadioButton) findViewById(R.id.radioButton2);
rb[2] = (RadioButton) findViewById(R.id.radioButton3);
button=(Button)findViewById(R.id.button);
}
}
十一、編寫MainShowActivity.java代碼。
MainShowActivity.java
package cn.edu.hznu.litepal;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.TextView;
public class MainShowActivity extends AppCompatActivity {
private TextView text_name,text_temp,text_city,text_code,text_time;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main_show);
text_name=(TextView)findViewById(R.id.text_name);
text_temp=(TextView)findViewById(R.id.text_temp);
text_city=(TextView)findViewById(R.id.text_city);
text_code=(TextView)findViewById(R.id.text_code);
text_time=(TextView)findViewById(R.id.text_time);
Bundle bundle=getIntent().getExtras();
String name=bundle.getString("name");
String temp=bundle.getString("temp");
String city=bundle.getString("city");
String code=bundle.getString("code");
String time=bundle.getString("time");
text_name.setText("姓名:"+name);
text_temp.setText("體溫:"+temp);
text_city.setText("所在城市:"+city);
text_code.setText("你的健康碼:"+code);
text_time.setText("填寫時間:"+time);
}
}
總結:通過本次的小案例,對LitePal操作數據庫,做了理解及使用,結合前幾次的其他知識的學習,做了一次階段性的小總結。但是,該案例還有需要更改的地方,有幾處需要改進。在後面時間也會進行改進擴充。
下面是 幾個具體的實現代碼:
- 跑馬燈效果實現代碼。
android:ellipsize="marquee" //以滾動的形式顯示文字
android:singleLine="true" //單行顯示
android:focusable="true" //獲得焦點
android:focusableInTouchMode="true" //獲得觸摸焦點
android:marqueeRepeatLimit="marquee_forever"//滾動模式
- 用第三方庫實現三級聯動城市選擇器。
(1)導入依賴。
compile 'liji.library.dev:citypickerview:1.1.0'
(2)實現。
private void initCityPicker() {
cityPicker=new CityPicker.Builder(MainActivity.this)
.textSize(20)
.title("選擇地址")
.backgroundPop(0xa0000000)
.titleBackgroundColor("#0CB6CA")
.titleTextColor("#000000")
.cancelTextColor("#000000")
.confirTextColor("#000000")
.province("xx省")
.city("xx市")
.district("xx區")
.textColor(Color.parseColor("#000000"))
.provinceCyclic(true)
.cityCyclic(false)
.districtCyclic(false)
.visibleItemsCount(7)
.itemPadding(10)
.onlyShowProvinceAndCity(false)
.build();
cityPicker.setOnCityItemClickListener(new CityPicker.OnCityItemClickListener() {
@Override
public void onSelected(String... strings) {
String province=strings[0];
String city=strings[1];
String dist=strings[2];
String code=strings[3];
text_city.setText(province+","+city+","+dist);
}
@Override
public void onCancel() {
}
});
}
});
}
若文章中有錯誤的地方歡迎大家反饋或者留言,十分感謝!!!
【關於本案例的源碼獲取】關注私信,回覆【十三——源碼】即可。
【關於上一篇案例的源碼獲取Android學習筆記(十二)—數據存儲(SQLite數據庫)】
關注私信,回覆【十二——源碼】即可。