知識(shí)點(diǎn)
- sqlite
無(wú)需多介紹,能看到這兒的肯定都知道
- SQLiteOpenHelper
抽象類眯亦,我們通過(guò)繼承該類,然后重寫數(shù)據(jù)庫(kù)創(chuàng)建以及更新的方法, 我們還可以通過(guò)該類的對(duì)象獲得數(shù)據(jù)庫(kù)實(shí)例蛤织,或者關(guān)閉數(shù)據(jù)庫(kù)!
- SQLiteDatabase數(shù)據(jù)庫(kù)訪問(wèn)類
我們可以通過(guò)該類的對(duì)象來(lái)對(duì)數(shù)據(jù)庫(kù)做一些增刪改查的操作
- Cursor游標(biāo)
有點(diǎn)類似于JDBC里的resultset鸿染,結(jié)果集指蚜!可以簡(jiǎn)單理解為指向數(shù)據(jù)庫(kù)中某 一個(gè)記錄的指針!
編寫代碼
- 創(chuàng)建自己的sqlite管理類
package love.xzjs.t_android;
import android.content.ContentValues;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
/**
* Created by Administrator on 2017/12/18.
*/
public class MyDBOpenHelper extends SQLiteOpenHelper {
public MyDBOpenHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {
super(context, name, factory, version);
}
@Override
/**
* 數(shù)據(jù)庫(kù)第一次創(chuàng)建
*/
public void onCreate(SQLiteDatabase sqLiteDatabase) {
sqLiteDatabase.execSQL("CREATE TABLE config(" +
"id INTEGER PRIMARY KEY AUTOINCREMENT," +
"time INTEGER(1)," +
"date INTEGER(1)," +
"week INTEGER(1)," +
"location VARCHAR(20)," +
"firstDay INTEGER(1)," +
"secondDay INTEGER(1)," +
"thirdDay INTEGER(1)," +
"num INTEGER(1))");
ContentValues values=new ContentValues();
values.put("time",1);
values.put("date",1);
values.put("week",1);
values.put("firstDay",1);
values.put("secondDay",1);
values.put("thirdDay",1);
values.put("num",3);
values.put("location","");
sqLiteDatabase.insert("config",null,values);
}
@Override
/**
* 數(shù)據(jù)庫(kù)更新
*/
public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) {
}
}
- 創(chuàng)建配置實(shí)體類Config.java
package love.xzjs.t_android;
/**
* Created by Administrator on 2017/12/18.
*/
public class Config {
private int id,time,date,week,firstDay,secondDay,thirdDay,num;
private String location;
public Config(int id, int time, int date, int week, int firstDay, int secondDay, int thirdDay, int num, String location) {
this.id = id;
this.time = time;
this.date = date;
this.week = week;
this.firstDay = firstDay;
this.secondDay = secondDay;
this.thirdDay = thirdDay;
this.num = num;
this.location = location;
}
public Config(){
this.id = 0;
this.time = 0;
this.date = 0;
this.week = 0;
this.firstDay = 0;
this.secondDay = 0;
this.thirdDay = 0;
this.num = 3;
this.location = "";
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public int getTime() {
return time;
}
public void setTime(int time) {
this.time = time;
}
public int getDate() {
return date;
}
public void setDate(int date) {
this.date = date;
}
public int getWeek() {
return week;
}
public void setWeek(int week) {
this.week = week;
}
public int getFirstDay() {
return firstDay;
}
public void setFirstDay(int firstDay) {
this.firstDay = firstDay;
}
public int getSecondDay() {
return secondDay;
}
public void setSecondDay(int secondDay) {
this.secondDay = secondDay;
}
public int getThirdDay() {
return thirdDay;
}
public void setThirdDay(int thirdDay) {
this.thirdDay = thirdDay;
}
public int getNum() {
return num;
}
public void setNum(int num) {
this.num = num;
}
public String getLocation() {
return location;
}
public void setLocation(String location) {
this.location = location;
}
}
- 在Show.java中使用sqlite管理類
package love.xzjs.t_android;
import android.Manifest;
import android.app.Activity;
import android.content.ContentValues;
import android.content.Context;
import android.content.pm.PackageManager;
import android.content.res.Resources;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Build;
import android.os.Bundle;
import android.support.annotation.RequiresApi;
import android.support.v4.app.ActivityCompat;
import android.support.v4.app.Fragment;
import android.util.DisplayMetrics;
import android.util.Log;
import android.util.TypedValue;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.CompoundButton;
import android.widget.LinearLayout;
import android.widget.Spinner;
import android.widget.Switch;
import android.widget.TextView;
import com.baidu.location.BDLocation;
import com.baidu.location.BDLocationListener;
import com.baidu.location.LocationClient;
import com.baidu.location.LocationClientOption;
import java.util.HashMap;
public class Show extends Fragment implements CompoundButton.OnCheckedChangeListener, BDLocationListener, AdapterView.OnItemSelectedListener {
private TextView textViewTime, textViewDate, textViewWeek, _locationTextView;
private Switch switchTime, switchDate, switchWeek, switchWeather1, switchWeather2, switchWeather3;
private LinearLayout linearLayout1, linearLayout2, linearLayout3;
private Spinner spinner;
private LocationClient _locationClient;
private static final int BAIDU_READ_PHONE_STATE = 100;
private MyDBOpenHelper myDBOpenHelper;
private Config config;
private int id;
private ContentValues values;
private HashMap<String, TextView> textViewHashMap;
private HashMap<String, Switch> switchHashMap;
private HashMap<String, LinearLayout> linearLayoutHashMap;
//判斷是否為剛進(jìn)去時(shí)觸發(fā)onItemSelected的標(biāo)志
private boolean spinnerSelected = false;
@RequiresApi(api = Build.VERSION_CODES.M)
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.config_show, container, false);
textViewTime = (TextView) view.findViewById(R.id.time_label);
textViewDate = (TextView) view.findViewById(R.id.date);
textViewWeek = (TextView) view.findViewById(R.id.week);
linearLayout1 = (LinearLayout) view.findViewById(R.id.weather_today);
linearLayout2 = (LinearLayout) view.findViewById(R.id.weather_tomorrow);
linearLayout3 = (LinearLayout) view.findViewById(R.id.weather_after_tomorrow);
_locationTextView = view.findViewById(R.id.locationTextView);
spinner = view.findViewById(R.id.spinner1);
values = new ContentValues();
//根據(jù)屏幕寬度確定字體的大小
Resources resources = this.getResources();
DisplayMetrics dm = resources.getDisplayMetrics();
int width = dm.widthPixels;
textViewTime.setTextSize(TypedValue.COMPLEX_UNIT_SP, 150 * width / 1794);
//綁定switch事件
switchTime = (Switch) view.findViewById(R.id.switch_time);
switchDate = (Switch) view.findViewById(R.id.switch_date);
switchWeek = (Switch) view.findViewById(R.id.switch_week);
switchWeather1 = (Switch) view.findViewById(R.id.switch_weather1);
switchWeather2 = (Switch) view.findViewById(R.id.switch_weather2);
switchWeather3 = (Switch) view.findViewById(R.id.switch_weather3);
switchTime.setOnCheckedChangeListener(this);
switchDate.setOnCheckedChangeListener(this);
switchWeek.setOnCheckedChangeListener(this);
switchWeather1.setOnCheckedChangeListener(this);
switchWeather2.setOnCheckedChangeListener(this);
switchWeather3.setOnCheckedChangeListener(this);
_locationClient = new LocationClient(getContext());
_locationClient.registerLocationListener(this);
LocationClientOption option = new LocationClientOption();
option.setIsNeedAddress(true);
option.setLocationMode(LocationClientOption.LocationMode.Hight_Accuracy);//設(shè)置高精度定位定位模式
option.setOpenGps(true); // 打開gps
option.setCoorType("bd09ll"); // 設(shè)置坐標(biāo)類型
option.setScanSpan(1000);
_locationClient.setLocOption(option);
if (ActivityCompat.checkSelfPermission(getActivity(), Manifest.permission.READ_PHONE_STATE) != PackageManager.PERMISSION_GRANTED) {
// 申請(qǐng)一個(gè)(或多個(gè))權(quán)限涨椒,并提供用于回調(diào)返回的獲取碼(用戶定義)
requestPermissions(new String[]{Manifest.permission.READ_PHONE_STATE}, BAIDU_READ_PHONE_STATE);
} else {
_locationClient.start();
}
textViewHashMap=new HashMap<>();
textViewHashMap.put("time", textViewTime);
textViewHashMap.put("date", textViewDate);
textViewHashMap.put("week", textViewWeek);
linearLayoutHashMap=new HashMap<>();
linearLayoutHashMap.put("firstDay", linearLayout1);
linearLayoutHashMap.put("secondDay", linearLayout2);
linearLayoutHashMap.put("thirdDay", linearLayout3);
switchHashMap=new HashMap<>();
switchHashMap.put("time", switchTime);
switchHashMap.put("date", switchDate);
switchHashMap.put("week", switchWeek);
switchHashMap.put("firstDay", switchWeather1);
switchHashMap.put("secondDay", switchWeather2);
switchHashMap.put("thirdDay", switchWeather3);
myDBOpenHelper = new MyDBOpenHelper(getActivity(), "clock.db", null, 1);
SQLiteDatabase db = myDBOpenHelper.getWritableDatabase();
Cursor cursor = db.query("config", null, null, null, null, null, null);
if (cursor.moveToFirst()) {
id = cursor.getInt(cursor.getColumnIndex("id"));
values.put("time", cursor.getInt(cursor.getColumnIndex("time")));
values.put("date", cursor.getInt(cursor.getColumnIndex("date")));
values.put("week", cursor.getInt(cursor.getColumnIndex("week")));
values.put("location", cursor.getInt(cursor.getColumnIndex("location")));
values.put("firstDay", cursor.getInt(cursor.getColumnIndex("firstDay")));
values.put("secondDay", cursor.getInt(cursor.getColumnIndex("secondDay")));
values.put("thirdDay", cursor.getInt(cursor.getColumnIndex("thirdDay")));
values.put("num", cursor.getInt(cursor.getColumnIndex("num")));
setViewData();
}
return view;
}
/**
* 綁定數(shù)據(jù)
*/
private void setViewData() {
for (String key : values.keySet()) {
boolean status = (int) values.get(key) == 1;
switch (key) {
case "time":
case "date":
case "week":
textViewHashMap.get(key).setVisibility(status ? View.VISIBLE : View.GONE);
switchHashMap.get(key).setChecked(status);
break;
case "firstDay":
case "secondDay":
case "thirdDay":
linearLayoutHashMap.get(key).setVisibility(status ? View.VISIBLE : View.GONE);
switchHashMap.get(key).setChecked(status);
break;
case "num":
spinnerSelected = false;
int num = (int) values.get(key) - 1;
spinner.setSelection(num);
break;
default:
break;
}
}
}
/**
* Called when the Fragment is no longer started. This is generally
* tied to {@link Activity#onStop() Activity.onStop} of the containing
* Activity's lifecycle.
*/
@Override
public void onStop() {
super.onStop();
SQLiteDatabase db = myDBOpenHelper.getWritableDatabase();
db.update("config", values, "id=?", new String[]{String.valueOf(id)});
}
/**
* 重寫switch狀態(tài)變更事件
*
* @param compoundButton
* @param b
*/
@Override
public void onCheckedChanged(CompoundButton compoundButton, boolean b) {
boolean isChecked = compoundButton.isChecked();
switch (compoundButton.getId()) {
case R.id.switch_time:
textViewTime.setVisibility(isChecked ? View.VISIBLE : View.GONE);
values.put("time", isChecked ? 1 : 0);
break;
case R.id.switch_date:
textViewDate.setVisibility(isChecked ? View.VISIBLE : View.GONE);
values.put("date", isChecked ? 1 : 0);
break;
case R.id.switch_week:
textViewWeek.setVisibility(isChecked ? View.VISIBLE : View.GONE);
values.put("week", isChecked ? 1 : 0);
break;
case R.id.switch_weather1:
linearLayout1.setVisibility(isChecked ? View.VISIBLE : View.GONE);
values.put("firstDay", isChecked ? 1 : 0);
break;
case R.id.switch_weather2:
linearLayout2.setVisibility(isChecked ? View.VISIBLE : View.GONE);
values.put("secondDay", isChecked ? 1 : 0);
break;
case R.id.switch_weather3:
linearLayout3.setVisibility(isChecked ? View.VISIBLE : View.GONE);
values.put("thirdDay", isChecked ? 1 : 0);
break;
}
}
@Override
public void onReceiveLocation(BDLocation bdLocation) {
String addr = bdLocation.getAddrStr(); //獲取詳細(xì)地址信息
String country = bdLocation.getCountry(); //獲取國(guó)家
String province = bdLocation.getProvince(); //獲取省份
String city = bdLocation.getCity(); //獲取城市
String district = bdLocation.getDistrict(); //獲取區(qū)縣
String street = bdLocation.getStreet(); //獲取街道信息
_locationTextView.setText(city + district);
values.put("location", city + district);
_locationClient.stop();
}
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
switch (requestCode) {
//requestCode即所聲明的權(quán)限獲取碼摊鸡,在checkSelfPermission時(shí)傳入
case 1:
BAIDU_READ_PHONE_STATE:
if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
_locationClient.start();
} else {
Log.i("tag", "onRequestPermissionsResult: " + "沒(méi)有獲取到權(quán)限");
}
break;
default:
break;
}
}
@Override
public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {
if (spinnerSelected) {
values.put("num", i + 1);
} else {
spinnerSelected = true;
}
}
@Override
public void onNothingSelected(AdapterView<?> adapterView) {
}
}
效果圖
代碼地址
https://github.com/xzjs/t_android