日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【BMI指数计算器V4.0】项目实战

發(fā)布時間:2023/12/29 编程问答 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【BMI指数计算器V4.0】项目实战 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

前言? ? ?

? ? ? 【BMI指數(shù)計算器V4.0】與【BMI指數(shù)計算器V3.0】實現(xiàn)的效果是一樣的,不同的是在【BMI指數(shù)計算器V3.0】的基礎(chǔ)上加入了Service層(服務(wù)),BroadcastReceiver(廣播接收者),使得項目的架構(gòu)較V3.0多了一層。之所以使用Service(服務(wù)),是為了讓數(shù)據(jù)庫這樣的與界面無關(guān)的業(yè)務(wù)邏輯放到Service(服務(wù))中去處理,這也正是Service(服務(wù))所擅長的。我們知道Android 有四大組件,分別是Activity(活動),Service(服務(wù)),BroadcastReceiver(廣播接收者)ContentProvider(內(nèi)容提供者)。而這四大組件各自所擅長的都不一樣。

比如 :

?(1)Activity擅長處理界面顯示與界面交互工作;

?(2)Service擅長處理與界面無關(guān),專門在后臺進程中執(zhí)行的操作;

?(3)BroadcastReceiver擅長接收系統(tǒng)廣播以及Activity與Service之間的數(shù)據(jù)傳遞工作;

?(4)ContentProvider擅長讓不同應(yīng)用程序間共享數(shù)據(jù)。

更新列表

1.項目架構(gòu)增加了Service層和BroadcastReceiver

2.數(shù)據(jù)模型Bmi類實現(xiàn)了一個標識接口?Serializable

3.其他的都與V3.0保持一致


項目架構(gòu)圖


技術(shù)預報

? 1.Sevice(服務(wù)組件技術(shù)) ? ?2.BroadcastReceiver(廣播接收者組件技術(shù)) ? ?3.數(shù)據(jù)對象或集合在不同組件間的傳遞(需要讓數(shù)據(jù)模型類實現(xiàn)標識接口?Serializable)? ? ? ?

界面開發(fā)

? ? ? ? V4.0主要是在V3.0的基礎(chǔ)上將項目的架構(gòu)換成用Service去操作SQLite數(shù)據(jù)庫,得到數(shù)據(jù)后發(fā)廣播,讓BroadcastReceiver去接收,在界面方面并沒有改動,如果對界面開發(fā)不清楚的朋友請參考V3.0。

功能開發(fā)

?step1:數(shù)據(jù)模型層:com.kedi.bmi.model/Bmi.java
package com.kedi.bmi.model;import java.io.Serializable;/*** 指數(shù)數(shù)據(jù)實體類(數(shù)據(jù)模型) 實現(xiàn)一個標識接口Serializable(代表Bmi可以持久化,可放入Intent在各組件之間傳遞)* * @author 科弟* */ public class Bmi <span style="color:#ff0000;">implements Serializable</span> {/*** */private static final long serialVersionUID = 1L;// 唯一標識private int id;// 身高private double heigth;// 體重private double weigth;// 體重指數(shù)private double bmiNum;// 體重狀態(tài)private String bmiState;// 體重狀態(tài)圖片名private String stateIconId;// 計算時間private long calaTime;/*** 構(gòu)造方法*/public Bmi() {}/*** 構(gòu)造方法* * @param id* @param heigth* @param weigth* @param bmiNum* @param bmiState* @param stateIconId* @param calaTime*/public Bmi(int id, double heigth, double weigth, double bmiNum,String bmiState, String stateIconId, long calaTime) {super();this.id = id;this.heigth = heigth;this.weigth = weigth;this.bmiNum = bmiNum;this.bmiState = bmiState;this.stateIconId = stateIconId;this.calaTime = calaTime;}public int getId() {return id;}public void setId(int id) {this.id = id;}public double getHeigth() {return heigth;}public void setHeigth(double heigth) {this.heigth = heigth;}public double getWeigth() {return weigth;}public void setWeigth(double weigth) {this.weigth = weigth;}public double getBmiNum() {return bmiNum;}public void setBmiNum(double bmiNum) {this.bmiNum = bmiNum;}public String getBmiState() {return bmiState;}public void setBmiState(String bmiState) {this.bmiState = bmiState;}public String getStateIconId() {return stateIconId;}public void setStateIconId(String stateIconId) {this.stateIconId = stateIconId;}public long getCalaTime() {return calaTime;}public void setCalaTime(long calaTime) {this.calaTime = calaTime;}@Overridepublic String toString() {return "Bmi [id=" + id + ", heigth=" + heigth + ", weigth=" + weigth+ ", bmiNum=" + bmiNum + ", bmiState=" + bmiState+ ", stateIconId=" + stateIconId + ", calaTime=" + calaTime+ "]";}}

? step2:Service(服務(wù))層:com.kedi.bmi.service/DataService.java
<span style="font-size:14px;">package com.kedi.bmi.service;import java.io.Serializable; import java.util.List;import android.app.Service; import android.content.Intent; import android.os.AsyncTask; import android.os.Bundle; import android.os.IBinder;import com.kedi.bmi.dao.BmiDao; import com.kedi.bmi.model.Bmi;/*** 數(shù)據(jù)服務(wù)* * @author 科弟* 數(shù)據(jù)服務(wù):(1)創(chuàng)建數(shù)據(jù)服務(wù)public class DataService extends Service ;(2)編寫數(shù)據(jù)服務(wù)邏輯(對數(shù)據(jù)庫的增,刪,改,查);(3)在AndroidManifest.xml中注冊數(shù)據(jù)服務(wù)DataService;(4)在MainActivity的onCreate()方法中通過startService()方法啟動服務(wù);在onDestroy()方法中通過stopService()方法停止服務(wù);(5)在計算方法中給數(shù)據(jù)服務(wù)發(fā)送插入數(shù)據(jù)的方法;(6)在HistoryRecordActivity的onCreate()方法中給數(shù)據(jù)服務(wù)發(fā)送獲取數(shù)據(jù)的命令;(7)獲得數(shù)據(jù)后通過發(fā)廣播將數(shù)據(jù)發(fā)到 HistoryRecordActivity中,廣播接收者接收到廣播,獲取廣播中的數(shù)據(jù),然后完成數(shù)據(jù)的顯示邏輯;(8)在對應(yīng)的刪除方法中給數(shù)據(jù)服務(wù)發(fā)送刪除或清空的命令,讓數(shù)據(jù)服務(wù)完成刪除或清空功能。*/ public class DataService extends Service {// 數(shù)據(jù)服務(wù)的actionpublic static final String SERVICE_ACTION = "com.kedi.bmi.service.dataservice";// 接收數(shù)據(jù)的廣播接收者actionpublic static final String RECEIVER_ACTION = "com.kedi.bmi.queryBmis";// 插入歷史記錄數(shù)據(jù)的命令標識valuepublic static final int INSERT = 0x1;// 刪除某條歷史記錄的命令標識valuepublic static final int DELETE_ITEM = 0x2;// 清除所有歷史記錄的命令標識valuepublic static final int DELETE_ALL = 0x3;// 更新某條歷史記錄的命令標識valuepublic static final int UPDATE = 0x4;// 查詢所有歷史記錄的命令標識valuepublic static final int QUERY = 0x5;// 命令命令標識Keypublic static final String COMMAND = "command";// 傳遞Bmi數(shù)據(jù)到數(shù)據(jù)服務(wù)的Keypublic static final String KEY_BMI = "bmi";// 傳遞Bmi集合數(shù)據(jù)到數(shù)據(jù)服務(wù)的Keypublic static final String KEY_BMIS = "bmis";// 操作數(shù)據(jù)庫的業(yè)務(wù)邏輯類private BmiDao mBmiDao;@Overridepublic void onCreate() {super.onCreate();mBmiDao = new BmiDao(this);}@Overridepublic IBinder onBind(Intent intent) {return null;}@Overridepublic int onStartCommand(Intent intent, int flags, int startId) {if (intent != null) {int command = intent.getIntExtra(COMMAND, QUERY);switch (command) {case INSERT:// 插入歷史記錄數(shù)據(jù)到數(shù)據(jù)庫Bmi bmiInsert = (Bmi) intent.getSerializableExtra(KEY_BMI);if (bmiInsert != null) {mBmiDao.insertBmi(bmiInsert);}break;case DELETE_ITEM:// 從數(shù)據(jù)庫中刪除某條歷史記錄Bmi bmiDelete = (Bmi) intent.getSerializableExtra(KEY_BMI);if (bmiDelete != null) {mBmiDao.deleteBmi(bmiDelete);}break;case DELETE_ALL:// 清除數(shù)據(jù)庫中所有歷史記錄mBmiDao.deleteBmis();break;case UPDATE:// 更新數(shù)據(jù)庫中的某條歷史記錄Bmi bmiUpdate = (Bmi) intent.getSerializableExtra(KEY_BMI);if (bmiUpdate != null) {mBmiDao.updateBmi(bmiUpdate);}break;case QUERY:// 查詢數(shù)據(jù)庫中所有的歷史記錄// 創(chuàng)建獲取數(shù)據(jù)的異步任務(wù)類并調(diào)用execute()方法執(zhí)行異步任務(wù)new InsertDataAsynkTask().execute();break;default:break;}}return super.onStartCommand(intent, flags, startId);}@Overridepublic boolean onUnbind(Intent intent) {return super.onUnbind(intent);}@Overridepublic void onDestroy() {super.onDestroy();}/*** 從數(shù)據(jù)庫查詢數(shù)據(jù)的一步任務(wù)類(查詢數(shù)據(jù)庫是耗時操作,最好用一步方式)* * @author 科弟* */class InsertDataAsynkTask extends AsyncTask<Void, Void, List<Bmi>> {/*** 子線程方法,做好事操作*/@Overrideprotected List<Bmi> doInBackground(Void... arg0) {return mBmiDao.getBmis();}@Overrideprotected void onPostExecute(List<Bmi> result) {super.onPostExecute(result);// 將數(shù)據(jù)傳給HisoryRecordActivity組件中// 這里我們用廣播的方式傳遞數(shù)據(jù)Intent intent = new Intent(RECEIVER_ACTION);Bundle bundle = new Bundle();//將要傳遞的數(shù)據(jù)存到Bundle中,bundle.putSerializable(KEY_BMIS, (Serializable) result);//將Bundle存到intent中,以方便在發(fā)廣播的時候把數(shù)據(jù)傳遞到Activity中//在Activity中通過Intent可獲得Intent中存放的數(shù)據(jù)intent.putExtras(bundle);sendBroadcast(intent);}} }</span><span style="font-size: 18px;"> </span>
? step3:將數(shù)據(jù)服務(wù)注冊到AndroidManifest.xml文件中
<span style="font-size:18px;"><?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android"package="com.kedi.bmi"android:versionCode="4"android:versionName="4.0" ><!-- 配置SDK的最小版本號為14,最大版本號為19 --><uses-sdkandroid:minSdkVersion="14"android:targetSdkVersion="19" /><applicationandroid:allowBackup="true"android:icon="@drawable/ic_launcher"android:label="@string/app_name"android:theme="@style/AppTheme" ><!-- 注冊主界面Activity --><activityandroid:name=".ui.MainActivity"android:screenOrientation="portrait" ></activity><!-- 注冊歡迎界面Activity --><activityandroid:name=".ui.WelcomeActivity"android:screenOrientation="portrait" ><!-- 配置action,category,使得WelcomeActivity成為第一啟動界面 --><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter></activity><activityandroid:name=".ui.HistoryRecordActivity"android:screenOrientation="portrait" /><span style="color:#ff0000;"><!-- 注冊數(shù)據(jù)服務(wù)DataService --><serviceandroid:name=".service.DataService"android:permission="permission.DataService" ><intent-filter><action android:name="com.kedi.bmi.service.dataservice" /><category android:name="android.intent.category.DEFAULT" /></intent-filter></service></span></application></manifest></span>

step4:修改MainActivity相對應(yīng)的代碼部分(紅色字體部分為修改)
package com.kedi.bmi.ui;import java.text.DecimalFormat;import android.annotation.SuppressLint; import android.app.Activity; import android.content.Context; import android.content.Intent; import android.content.SharedPreferences; import android.content.SharedPreferences.Editor; import android.os.Bundle; import android.view.KeyEvent; import android.view.View; import android.view.View.OnClickListener; import android.view.Window; import android.widget.Button; import android.widget.EditText; import android.widget.ImageButton; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.RadioButton; import android.widget.RadioGroup; import android.widget.RadioGroup.OnCheckedChangeListener; import android.widget.TextView; import android.widget.Toast;import com.kedi.bmi.R; import com.kedi.bmi.listener.OnClickOkListener; import com.kedi.bmi.model.Bmi; import com.kedi.bmi.service.DataService; import com.kedi.bmi.utils.DataUtil; import com.kedi.bmi.utils.DialogUtil;/*** BMI指數(shù)計算器主界面管理類* * @author 科弟* */ @SuppressLint("ShowToast") public class MainActivity extends Activity implements OnClickListener,OnCheckedChangeListener {private EditText mHeightInputEt;// 身高輸入框private EditText mWeightInputEt;// 體重輸入框private Button mCalaBtn;// 計算按鈕private LinearLayout mResultLl;// 計算結(jié)果布局private TextView mWeightBmiTv;// 體重指數(shù)文本private TextView mWeightStateTv;// 體重狀態(tài)文本private Button mClearBtn;// 清除按鈕private double height;// 身高private double weight;// 體重private double bmi;// bmi指數(shù)值private String state;// 體重狀態(tài)private String weightBmi;// 您的體重指數(shù):private String weightState;// 您的體重狀況:private ImageView mStateIv;// 體重狀態(tài)圖標// 可取體重狀態(tài)值數(shù)組private String[] states = { "偏瘦", "正常", "偏胖", "肥胖", "重度肥胖", "極重度肥胖" };// 體重狀態(tài)圖片id數(shù)組private int[] state_imageIds = { R.drawable.r1, R.drawable.r2,R.drawable.r3, R.drawable.r4, R.drawable.r5, R.drawable.r6 };private int state_imageId;// 當前體重狀態(tài)圖片id// 標準相關(guān)布局或控件private RadioGroup mStandardRg;// 標準可選組布局private RadioButton mWhoStandardRb;// WHO標準單選按鈕private RadioButton mAreaStandardRb;// 亞洲標準單選按鈕private static final int WHO_STANDARD = 0x1;// WHO標準private static final int AREA_STANDARD = 0x2;// 亞洲標準private int mCurrentStandard = WHO_STANDARD;// 當前標準private SharedPreferences sp;// 保存小量數(shù)據(jù)的類,數(shù)據(jù)會保存到指定文件名的XML文件中private static final String FILE_NAME = "data.xml";// 文件名// 歷史記錄相關(guān)private ImageButton mHistoryIb;<span style="color:#ff0000;">// 數(shù)據(jù)服務(wù)相關(guān)Intentprivate Intent intent;</span>@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);// 去掉系統(tǒng)標題欄requestWindowFeature(Window.FEATURE_NO_TITLE);// 關(guān)聯(lián)布局文件setContentView(R.layout.activity_main);// 初始化布局或控件initView();// 注冊控件點擊事件setViewListener();weightBmi = getResources().getString(R.string.weight_bmi);// 您的體重指數(shù):weightState = getResources().getString(R.string.weight_state);// 您的體重狀況:<span style="color:#ff0000;">// 開啟數(shù)據(jù)服務(wù)的方法startDataService();</span>}/*** 初始化布局或控件的方法*/private void initView() {mHeightInputEt = (EditText) this.findViewById(R.id.et_height);// 身高輸入框mWeightInputEt = (EditText) this.findViewById(R.id.et_weight);// 體重輸入框mCalaBtn = (Button) this.findViewById(R.id.btn_cala);// 計算按鈕mResultLl = (LinearLayout) this.findViewById(R.id.ll_result);// 計算結(jié)果布局mWeightBmiTv = (TextView) this.findViewById(R.id.tv_bmi);// 體重指數(shù)文本mWeightStateTv = (TextView) this.findViewById(R.id.tv_state);// 體重狀態(tài)文本mStateIv = (ImageView) this.findViewById(R.id.iv_state);mClearBtn = (Button) this.findViewById(R.id.btn_clear);// 清除按鈕// 默認顯示計算按鈕(VISIBLE),隱藏結(jié)果布局(GONE)mCalaBtn.setVisibility(View.VISIBLE);mResultLl.setVisibility(View.GONE);mStandardRg = (RadioGroup) this.findViewById(R.id.rg_standard);// 標準可選組布局mWhoStandardRb = (RadioButton) this.findViewById(R.id.rb_who);// WHO標準單選按鈕mAreaStandardRb = (RadioButton) this.findViewById(R.id.rb_area);// 亞洲標準單選按鈕// 歷史記錄相關(guān)mHistoryIb = (ImageButton) this.findViewById(R.id.ib_history);}/*** 注冊控件點擊事件的方法*/private void setViewListener() {// 注冊點擊事件mCalaBtn.setOnClickListener(this);mClearBtn.setOnClickListener(this);// 注冊選擇事件mStandardRg.setOnCheckedChangeListener(this);// 歷史記錄相關(guān)mHistoryIb.setOnClickListener(this);}@Overridepublic void onClick(View v) {int id = v.getId();switch (id) {case R.id.btn_cala:// 計算邏輯// 獲取身高輸入框數(shù)據(jù)String heightStr = mHeightInputEt.getText().toString().trim();// 判斷身高輸入框數(shù)據(jù)是否為空if ("".equals(heightStr) || heightStr.length() == 0) {Toast.makeText(this, getResources().getString(R.string.tip1), 0).show();} else {try {// 將String類型轉(zhuǎn)化成Double類型height = Double.valueOf(heightStr);// 對身高數(shù)據(jù)范圍進行判斷(100.0~200.0)if (height < 100.0 || height > 200.0) {Toast.makeText(this,getResources().getString(R.string.height_round),Toast.LENGTH_SHORT).show();} else {String weightStr = mWeightInputEt.getText().toString().trim();// 體重數(shù)據(jù)非空判斷if ("".equals(weightStr) || weightStr.length() == 0) {Toast.makeText(this,getResources().getString(R.string.tip3),Toast.LENGTH_SHORT).show();} else {try {weight = Double.valueOf(weightStr);// 體重數(shù)據(jù)范圍判斷(30.0~150.0)if (weight < 30.0 || weight > 150.0) {Toast.makeText(this,getResources().getString(R.string.weight_round),Toast.LENGTH_SHORT).show();} else {// 計算bmi值calaBmi(mCurrentStandard);// 隱藏計算按鈕(GONE),顯示結(jié)果布局(VISIBLE)setViewVisible(false);}} catch (Exception e) {Toast.makeText(this,getResources().getString(R.string.tip2),Toast.LENGTH_SHORT).show();}}}} catch (Exception e) {Toast.makeText(this,getResources().getString(R.string.tip2),Toast.LENGTH_SHORT).show();}}break;case R.id.btn_clear:// 清除setViewVisible(true);break;case R.id.ib_history:// 跳轉(zhuǎn)到歷史記錄界面Intent intent = new Intent(MainActivity.this,HistoryRecordActivity.class);startActivity(intent);break;}}/*** 計算bmi值*/private void calaBmi(int standard) {// height/100.0 cm換算成mheight = height / 100.0;bmi = weight / (height * height);if (standard == WHO_STANDARD) {if (bmi < 18.5) {state = states[0];state_imageId = state_imageIds[0];} else if (bmi >= 18.5 && bmi <= 24.9) {state = states[1];state_imageId = state_imageIds[1];} else if (bmi > 24.9 && bmi <= 29.9) {state = states[2];state_imageId = state_imageIds[2];} else if (bmi > 29.9 && bmi <= 34.9) {state = states[3];state_imageId = state_imageIds[3];} else if (bmi > 34.9 && bmi <= 39.9) {state = states[4];state_imageId = state_imageIds[4];} else {state = states[5];state_imageId = state_imageIds[5];}} else {if (bmi < 18.5) {state = states[0];state_imageId = state_imageIds[0];} else if (bmi >= 18.5 && bmi <= 22.9) {state = states[1];state_imageId = state_imageIds[1];} else if (bmi > 22.9 && bmi <= 24.9) {state = states[2];state_imageId = state_imageIds[2];} else if (bmi > 24.9 && bmi <= 29.9) {state = states[3];state_imageId = state_imageIds[3];} else if (bmi > 29.9 && bmi <= 39.9) {state = states[4];state_imageId = state_imageIds[4];} else {state = states[5];state_imageId = state_imageIds[5];}}mStateIv.setImageResource(state_imageId);// 講計算結(jié)果插入數(shù)據(jù)庫Bmi bmiObj = new Bmi();bmiObj.setHeigth(Double.valueOf(DataUtil.getData(height * 100.0)));bmiObj.setWeigth(Double.valueOf(DataUtil.getData(weight)));bmiObj.setBmiNum(Double.valueOf(DataUtil.getData(bmi)));bmiObj.setBmiState(state);bmiObj.setStateIconId(state_imageId + "");// 當前系統(tǒng)時間(單位:毫秒)bmiObj.setCalaTime(System.currentTimeMillis());<span style="color:#ff0000;">insertBmi(bmiObj);</span>}/*** 控制計算按鈕與結(jié)果布局的顯示與隱藏* * @param visible*/private void setViewVisible(boolean visible) {if (visible) {mCalaBtn.setVisibility(View.VISIBLE);mResultLl.setVisibility(View.GONE);// 清空數(shù)據(jù)mWeightBmiTv.setText("");mWeightStateTv.setText("");mHeightInputEt.setText("");mWeightInputEt.setText("");height = 0.0;weight = 0.0;} else {// 獲得焦點mHeightInputEt.requestFocus();// 格式化數(shù)據(jù)的類mCalaBtn.setVisibility(View.GONE);mResultLl.setVisibility(View.VISIBLE);DecimalFormat format = new DecimalFormat("0.0");mWeightBmiTv.setText(weightBmi + format.format(bmi));mWeightStateTv.setText(weightState + state);}}@Overridepublic void onCheckedChanged(RadioGroup rg, int arg1) {int id = rg.getCheckedRadioButtonId();switch (id) {case R.id.rb_who:// 選中Who單選按鈕mCurrentStandard = WHO_STANDARD;break;case R.id.rb_area:// 選中亞洲單選按鈕mCurrentStandard = AREA_STANDARD;break;default:mCurrentStandard = WHO_STANDARD;break;}}@Overrideprotected void onResume() {super.onResume();// 獲取當前用戶選擇的標準sp = this.getSharedPreferences(FILE_NAME, Context.MODE_PRIVATE);mCurrentStandard = sp.getInt("standard", WHO_STANDARD);// 根據(jù)用戶上次選擇的標準初始化單選框的選擇狀態(tài)switch (mCurrentStandard) {case WHO_STANDARD:mWhoStandardRb.setChecked(true);mAreaStandardRb.setChecked(false);break;case AREA_STANDARD:mWhoStandardRb.setChecked(false);mAreaStandardRb.setChecked(true);break;default:mWhoStandardRb.setChecked(true);mAreaStandardRb.setChecked(false);break;}}@Overrideprotected void onPause() {super.onPause();// 保存當前用戶選擇的標準sp = this.getSharedPreferences(FILE_NAME, Context.MODE_PRIVATE);Editor editor = sp.edit();editor.putInt("standard", mCurrentStandard);editor.commit();}@Overridepublic boolean onKeyDown(int keyCode, KeyEvent event) {// 監(jiān)聽用戶按鍵,如果按回退鍵,退出程序if (keyCode == KeyEvent.KEYCODE_BACK) {// 獲得對話框標題與提示消息String title = getResources().getString(R.string.back);String message = getResources().getString(R.string.back_message);DialogUtil.showDialog(this, title, message,new OnClickOkListener() {@Overridepublic void onClick(View view) {// 退出程序MainActivity.this.finish();}});}return true;}<span style="color:#ff0000;">@Overrideprotected void onDestroy() {super.onDestroy();// 停止數(shù)據(jù)服務(wù)的方法stopDataService();}</span><span style="color:#ff0000;">/*** 開啟數(shù)據(jù)服務(wù)的方法*/private void startDataService() {// 啟動數(shù)據(jù)服務(wù)---startintent = new Intent();intent.setAction(DataService.SERVICE_ACTION);intent.setClass(this, DataService.class);startService(intent);// 啟動數(shù)據(jù)服務(wù)---end}/*** 停止數(shù)據(jù)服務(wù)的方法*/private void stopDataService() {intent = new Intent();intent.setAction(DataService.SERVICE_ACTION);intent.setClass(this, DataService.class);stopService(intent);}/*** 發(fā)命令給數(shù)據(jù)服務(wù),執(zhí)行插手數(shù)據(jù)功能* * @param bmiObj* 要插入的Bmi數(shù)據(jù)對象*/private void insertBmi(Bmi bmiObj) {// 發(fā)送插入數(shù)據(jù)命令給數(shù)據(jù)服務(wù),執(zhí)行插入數(shù)據(jù)功能---startintent.putExtra(DataService.COMMAND, DataService.INSERT);intent.putExtra(DataService.KEY_BMI, bmiObj);startService(intent);// 發(fā)送插入數(shù)據(jù)命令給數(shù)據(jù)服務(wù),執(zhí)行插入數(shù)據(jù)功能---end}</span> }
step5:修改HistoryRecordActivity歷史記錄列表相對應(yīng)代碼(紅色字體為修改部分)
package com.kedi.bmi.ui;import java.util.List;import android.app.Activity; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.view.Window; import android.widget.AdapterView; import android.widget.AdapterView.OnItemLongClickListener; import android.widget.ImageButton; import android.widget.LinearLayout; import android.widget.ListView; import android.widget.TextView; import android.widget.Toast;import com.kedi.bmi.R; import com.kedi.bmi.adapter.HistoryRecordAdapter; import com.kedi.bmi.listener.OnClickOkListener; import com.kedi.bmi.model.Bmi; import com.kedi.bmi.service.DataService; import com.kedi.bmi.utils.DialogUtil;/*** 歷史計算記錄Activity類* * @author 科弟* */ public class HistoryRecordActivity extends Activity implements OnClickListener,OnItemLongClickListener {private LinearLayout mHistoryLl;// 歷史記錄布局private TextView mEmptyTv;// 當歷史列表為空時,顯示該文本提示private ListView mHistoryLv;// 歷史記錄列表視圖private HistoryRecordAdapter mAdapter;// 數(shù)據(jù)適配器private List<Bmi> mDatas;// 數(shù)據(jù)集合private ImageButton mBackIb;// 回退按鈕private ImageButton mClearIb;// 清空按鈕<span style="color:#ff0000;">// 數(shù)據(jù)服務(wù)相關(guān)Intentprivate Intent intent;// 廣播接送者private DataBroadCastReceiver mReceiver;</span>@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);// 取消系統(tǒng)默認標題欄requestWindowFeature(Window.FEATURE_NO_TITLE);// 關(guān)聯(lián)XML布局界面setContentView(R.layout.activity_history_record);// 初始化視圖的方法initView();// 注冊點擊事件監(jiān)聽器setListener();<span style="color:#ff0000;">// 配置數(shù)據(jù)服務(wù)configDataService();// 注冊DataBroadCastReceiver廣播接收者registerDataBroadCastReceiver();// 獲取所有歷史記錄getBmis();</span>}/*** 初始化視圖的方法*/private void initView() {mHistoryLl = (LinearLayout) this.findViewById(R.id.ll_history);mEmptyTv = (TextView) this.findViewById(R.id.tv_empty);mHistoryLv = (ListView) this.findViewById(R.id.lv_history);mBackIb = (ImageButton) this.findViewById(R.id.ib_back);mClearIb = (ImageButton) this.findViewById(R.id.ib_clear);}/*** 注冊點擊事件監(jiān)聽器*/private void setListener() {mBackIb.setOnClickListener(this);mClearIb.setOnClickListener(this);// 注冊ListView列表條目長按事件監(jiān)聽器mHistoryLv.setOnItemLongClickListener(this);}@Overridepublic void onClick(View v) {int id = v.getId();switch (id) {case R.id.ib_back:// 銷毀當前Activityfinish();break;case R.id.ib_clear:// 彈出二次確認對話框// 獲得對話框標題與提示消息String title = getResources().getString(R.string.clear1);String message = getResources().getString(R.string.clear1_message);if (mDatas != null && mDatas.size() > 0) {DialogUtil.showDialog(this, title, message,new OnClickOkListener() {@Overridepublic void onClick(View view) {// 清空所有歷史數(shù)據(jù)deleteBmis();}});} else {Toast.makeText(this, getResources().getString(R.string.empty),Toast.LENGTH_SHORT).show();}break;}}@Overridepublic boolean onItemLongClick(AdapterView<?> adapterView, View view,final int position, long arg3) {// 彈出二次確認對話框// 獲得對話框標題與提示消息String title = getResources().getString(R.string.delete);String message = getResources().getString(R.string.delete_message);DialogUtil.showDialog(this, title, message, new OnClickOkListener() {@Overridepublic void onClick(View view) {// 刪除當前條目deleteBmi(position);}});return false;}<span style="color:#ff0000;">/*** 配置數(shù)據(jù)服務(wù)*/private void configDataService() {intent = new Intent();intent.setAction(DataService.SERVICE_ACTION);intent.setClass(this, DataService.class);}/*** 發(fā)送查詢命令到數(shù)據(jù)服務(wù),獲取所有的Bmi數(shù)據(jù)*/private void getBmis() {intent.putExtra(DataService.COMMAND, DataService.QUERY);startService(intent);}</span>/*** 清空所有歷史數(shù)據(jù)的方法*/private void deleteBmis() {<span style="color:#ff0000;">// 清空數(shù)據(jù)庫deleteBmisDB();</span>// 清空內(nèi)存集合mDatas.clear();// 刷新界面mAdapter.notifyDataSetChanged();// 顯示空文本提示,隱藏歷史列表布局mHistoryLl.setVisibility(View.GONE);mEmptyTv.setVisibility(View.VISIBLE);}/*** 刪除當前條目的方法* * @param position*/private void deleteBmi(int position) {// 刪除當前條目<span style="color:#ff0000;">// 刪除數(shù)據(jù)庫對應(yīng)位置對象對應(yīng)Id的數(shù)據(jù)記錄deleteBmiDB(mDatas.get(position));</span>// 刪除內(nèi)存集合中對應(yīng)位置的數(shù)據(jù)mDatas.remove(position);// 刷新界面mAdapter.notifyDataSetChanged();if (mDatas.size() <= 0) {// 顯示空文本提示,隱藏歷史列表布局mHistoryLl.setVisibility(View.GONE);mEmptyTv.setVisibility(View.VISIBLE);} else {// 隱藏空文本提示,顯示歷史列表布局mHistoryLl.setVisibility(View.VISIBLE);mEmptyTv.setVisibility(View.GONE);}}<span style="color:#ff0000;">/*** 清空數(shù)據(jù)庫*/private void deleteBmisDB() {// 清空數(shù)據(jù)庫,給數(shù)據(jù)服務(wù)發(fā)送清空命令,執(zhí)行清空任務(wù)intent.putExtra(DataService.COMMAND, DataService.DELETE_ALL);startService(intent);}/*** 刪除數(shù)據(jù)庫當前條目*/private void deleteBmiDB(Bmi bmi) {// 刪除數(shù)據(jù)庫當前條目,給數(shù)據(jù)服務(wù)發(fā)送刪除當前條目命令,執(zhí)行刪除當前條目任務(wù)intent.putExtra(DataService.COMMAND, DataService.DELETE_ITEM);intent.putExtra(DataService.KEY_BMI, bmi);startService(intent);}</span><span style="color:#ff0000;">/*** 接收從數(shù)據(jù)服務(wù)發(fā)送的廣播* * @author 科弟* */class DataBroadCastReceiver extends BroadcastReceiver {// 接收廣播的Action@SuppressWarnings("unchecked")@Overridepublic void onReceive(Context context, Intent intent) {String action = intent.getAction();if (DataService.RECEIVER_ACTION.equals(action)) {mDatas = (List<Bmi>) intent.getSerializableExtra(DataService.KEY_BMIS);if (mDatas != null && mDatas.size() > 0) {// 隱藏空文本提示,顯示歷史列表布局mHistoryLl.setVisibility(View.VISIBLE);mEmptyTv.setVisibility(View.GONE);mAdapter = new HistoryRecordAdapter(HistoryRecordActivity.this, mDatas);mHistoryLv.setAdapter(mAdapter);} else {// 顯示空文本提示,隱藏歷史列表布局mHistoryLl.setVisibility(View.GONE);mEmptyTv.setVisibility(View.VISIBLE);}}}}/*** 注冊DataBroadCastReceiver廣播接收者*/private void registerDataBroadCastReceiver() {mReceiver = new DataBroadCastReceiver();IntentFilter filter = new IntentFilter(DataService.RECEIVER_ACTION);registerReceiver(mReceiver, filter);}/*** 反注冊(銷毀)DataBroadCastReceiver廣播接收者*/private void unRegisterDataBroadCastReceiver() {if (mReceiver != null) {unregisterReceiver(mReceiver);}}</span><pre name="code" class="java"><span style="font-family: Arial, Helvetica, sans-serif;"> @Override</span><span style="font-family: Arial, Helvetica, sans-serif;"> protected void onDestroy() {</span> super.onDestroy();// 反注冊(銷毀)DataBroadCastReceiver廣播接收者unRegisterDataBroadCastReceiver();}}
? ? 其他功能部分沒有改變,可在V3.0的基礎(chǔ)上修改,也可將V3.0中未改變的部分直接移植到V4.0項目中。

結(jié)語

??V4.0囊括了Android中的四大組件中的三個組件,SQLite數(shù)據(jù)庫等核心技術(shù),希望能讓大家對Activity,Service,BroadcastReceiver,SQLite數(shù)據(jù)庫的有更具實戰(zhàn)意義的理解!


總結(jié)

以上是生活随笔為你收集整理的【BMI指数计算器V4.0】项目实战的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

欧美激情第28页 | 欧美日韩精品在线观看视频 | www.午夜| 一区二区视频电影在线观看 | 久久精品中文字幕少妇 | 99人久久精品视频最新地址 | 色婷婷久久一区二区 | 国产精品尤物 | www.色爱 | 久久国产精品一国产精品 | 西西www4444大胆在线 | 亚洲 欧美 国产 va在线影院 | 国产91av视频在线观看 | 五月色婷 | 免费看的黄色片 | 亚洲国产三级在线观看 | 91精品久久久久久 | 丁香5月婷婷 | 天天干天天做天天操 | aaaaaa毛片 | 成人中文字幕在线 | 97福利在线观看 | 天天天综合 | 中文字幕资源网 国产 | 97电影网手机版 | 精品亚洲欧美一区 | 美女视频黄是免费的 | 又黄又爽又刺激视频 | 99亚洲国产 | 亚洲日韩中文字幕 | 1000部国产精品成人观看 | 欧美一级免费黄色片 | 韩国av免费在线 | 久久综合欧美 | 成年人免费在线观看网站 | 中文字幕在线免费观看视频 | 五月婷婷六月丁香在线观看 | 国产在线精品国自产拍影院 | 日韩在线视频精品 | 国产黄色精品 | 成人黄色大片在线免费观看 | 美女福利视频一区二区 | 久久精品视频网站 | 天天激情站 | 91av视屏 | 欧美亚洲精品在线观看 | 99热精品国产一区二区在线观看 | 日三级在线 | 久久伦理电影 | 韩日在线一区 | 免费在线观看av网站 | 色天天久久 | 国产精品美女久久久久久2018 | 最新av网址大全 | 久久免费av | 久久久久亚洲精品 | 日韩在线精品视频 | 国产91精品一区二区麻豆亚洲 | 99国产精品视频免费观看一公开 | 天天操天天操天天操天天操天天操天天操 | 99r国产精品 | 日韩av有码在线 | 免费看三片 | 国产高清精| 在线不卡视频 | 欧美一区二区三区不卡 | 激情av网址 | 久久99精品久久久久久清纯直播 | 日本激情视频中文字幕 | 黄色片网站大全 | 97成人免费 | 天天爽天天做 | 国产又粗又猛又色又黄网站 | av一级一片| 成人高清av在线 | 91九色精品女同系列 | 久久天天躁夜夜躁狠狠躁2022 | 视频精品一区二区三区 | 国产在线观看你懂得 | 人人插人人射 | 欧美黑人xxxx猛性大交 | 国产一区在线免费观看视频 | 日韩精品中文字幕有码 | 国产精品mv| 免费av小说 | 亚洲国产日韩欧美在线 | 青青久草在线 | 国产中文在线字幕 | 在线观看中文字幕av | 亚洲精品久久久久www | 91精品国产欧美一区二区 | 综合婷婷丁香 | 视频99爱| 六月天综合网 | av资源中文字幕 | 一区二区三区影院 | 免费a网| 成 人 免费 黄 色 视频 | 色婷婷激情综合 | 一区二区三区精品久久久 | 天天干天天草天天爽 | 中文字幕在线观看一区二区三区 | 在线看一区二区 | 天天亚洲综合 | 亚洲国产一二三 | 午夜手机电影 | 日韩国产高清在线 | 亚洲区另类春色综合小说 | 四虎成人精品 | 国产一区欧美二区 | 久久成电影 | 欧洲亚洲国产视频 | 久久免费看a级毛毛片 | 99视频在线 | 国产精品日韩精品 | 97电影院在线观看 | 99中文在线| 亚洲麻豆精品 | 婷婷综合影院 | 日韩成人精品在线观看 | 午夜久久久久久久久久久 | 日本在线观看一区二区三区 | 最近更新的中文字幕 | 午夜在线日韩 | 91在线免费看片 | 黄色大片免费播放 | 粉嫩一二三区 | 五月婷香 | 在线小视频你懂的 | 日韩在线精品视频 | 精品亚洲一区二区三区 | 久久久国产一区二区三区 | 最新日韩在线观看视频 | 特级西西www44高清大胆图片 | 亚洲h视频在线 | av免费电影在线观看 | 国产伦精品一区二区三区四区视频 | 久久资源在线 | 久久天天躁夜夜躁狠狠85麻豆 | 成人91av| 国产精品久久久久永久免费观看 | 国产精品黑丝在线观看 | 日韩三级成人 | 五月天视频网站 | 欧美影片| 久久在线免费视频 | 在线看的毛片 | 久久精美视频 | 日韩理论片在线观看 | 99电影456麻豆 | 国产成人一区二区三区在线观看 | 免费看高清毛片 | 色资源网在线观看 | 97色在线观看 | 黄视频网站大全 | 在线综合 亚洲 欧美在线视频 | 日韩高清一区二区 | 成年人免费在线观看网站 | 极品中文字幕 | 一区二区三区国产精品 | 国产精品手机在线播放 | 99久久久久国产精品免费 | 爱射综合 | 香蕉视频在线免费 | 免费高清在线观看成人 | 久久亚洲专区 | 国产亚洲综合精品 | 久久在线一区 | 色视频网址 | 91丨九色丨蝌蚪丨对白 | 国产精品视频99 | 亚洲成人精品国产 | 97人人添人澡人人爽超碰动图 | 91麻豆国产 | 国产在线探花 | 蜜桃视频日韩 | 亚洲免费在线 | 综合久久一本 | 蜜臀久久99静品久久久久久 | 在线视频亚洲 | 久久黄色a级片 | 天天综合色天天综合 | 国产一级二级在线观看 | 精品国产伦一区二区三区观看说明 | 国产经典三级 | 国产精品欧美久久久久无广告 | 日韩中文字幕免费在线观看 | 国产精品99久久久久久小说 | 99视频精品免费视频 | 丁香久久久 | 国产精品一区二区三区免费视频 | 美女性爽视频国产免费app | 国产亚洲一区二区三区 | 一级片免费观看 | 日日夜夜精品网站 | 久久精品一区二 | 伊人中文在线 | 精品国产免费观看 | 午夜精品一区二区三区在线观看 | 91片黄在线观看 | 91麻豆文化传媒在线观看 | 国产黄色片一级 | 天天爱天天射 | 夜夜婷婷 | 狠狠狠色狠狠色综合 | 91在线观 | 国产福利一区在线观看 | 国产美女网站在线观看 | 午夜精品99久久免费 | 在线免费观看黄色av | 成人综合婷婷国产精品久久免费 | 成人在线观看网址 | 五月婷婷在线观看 | 国产精品久久久av | 久久99精品国产麻豆婷婷 | 国产精品亚洲综合久久 | 日韩在线电影观看 | 黄色精品一区二区 | 成年人黄色大片在线 | 四虎国产精品成人免费4hu | 99久在线精品99re8热视频 | 欧洲av不卡| 欧美一级黄色视屏 | 久久久国产一区二区三区四区小说 | 成人黄色毛片 | 久久久精品亚洲 | 又黄又爽又刺激视频 | 国产精品18久久久久久久久 | 永久av免费在线观看 | 国内精品久久久久影院日本资源 | 97色综合| 在线蜜桃视频 | 看国产黄色片 | 在线视频一二区 | 日本中文字幕网 | 亚洲欧美成人在线 | 特级a毛片 | 91精品视频播放 | 天天色天天色天天色 | 精品一区二区亚洲 | 91色国产| 久久综合久久久 | 亚洲精品美女久久久久网站 | av亚洲产国偷v产偷v自拍小说 | 国产伦理精品一区二区 | 曰本三级在线 | 成人免费xxx在线观看 | 欧洲一区二区在线观看 | 久久综合九色综合欧美就去吻 | 久久激情五月婷婷 | 日韩有码在线观看视频 | 免费一级特黄录像 | 天躁狠狠躁| 国产精品视频内 | av电影一区 | www.国产视频 | av一级片在线观看 | 国产视频在线免费观看 | 久久久久久久久久久久久9999 | 国产97色 | 欧美一级激情 | 中国一级片在线 | 中文字幕成人av | 精品人人爽| 在线观看视频你懂的 | 性色av免费在线观看 | 美女av电影 | 成人在线视 | 免费视频久久久久 | 欧美日韩在线电影 | 免费日韩 精品中文字幕视频在线 | 久久九九久久 | 欧美国产大片 | 在线看成人| 国产精品正在播放 | 一二三区高清 | 五月婷婷一区二区三区 | 999毛片| 久久免费影院 | 亚洲综合成人专区片 | 亚洲成人资源在线观看 | 四虎影视成人永久免费观看亚洲欧美 | 在线三级av | 在线视频 91 | 国产精品久久久久久久久久久免费看 | 伊人婷婷久久 | 久久综合视频网 | 91网在线 | 欧美一级片免费在线观看 | 亚洲黄色一级大片 | 日韩久久激情 | 国产免费不卡 | a级成人毛片 | 精品国产伦一区二区三区免费 | 久久久久 免费视频 | 国产视频1 | 青青河边草观看完整版高清 | 色综合欧洲 | 视频在线观看91 | 国产亚洲精品久久久网站好莱 | 亚洲国产视频直播 | 偷拍福利视频一区二区三区 | 色婷婷综合久久久 | 日本久久电影 | 久久99精品热在线观看 | 成人在线一区二区 | 国产精品一区二区久久久久 | 日本在线免费看 | 国产麻豆果冻传媒在线观看 | 免费欧美精品 | 日本精品二区 | av中文字幕av | 日韩资源在线播放 | 十八岁以下禁止观看的1000个网站 | 天天插天天狠 | 在线视频手机国产 | 久久99精品波多结衣一区 | 中文在线亚洲 | 久久免费成人精品视频 | 91精选在线观看 | 国产福利在线免费观看 | 欧美一级黄大片 | 国产黄色大片 | 国产91精品久久久久 | 最近中文字幕在线 | 亚洲一区av | 99精品欧美一区二区三区黑人哦 | 香蕉影视在线观看 | mm1313亚洲精品国产 | 亚洲电影久久久 | 三级黄在线 | 久草av在线播放 | 三级黄色网络 | 日韩精品欧美精品 | 狠狠干天天 | 日韩免费中文字幕 | 亚洲一区二区视频在线播放 | 天天超碰 | 一区二区三区日韩在线观看 | 色婷婷亚洲 | 国产一区二区电影在线观看 | 免费看一级 | 欧美福利视频 | av无限看 | 国产亚洲精品成人 | 九九九在线观看 | 97超碰人人网 | 精品国内 | 99久久99久久综合 | 亚洲婷婷网| 91久久久久久久 | 国产精品成人久久久久 | 97国产在线视频 | www.狠狠| 亚洲综合视频网 | av网站免费看 | 国产精品一区二区在线 | 欧美色黄| 久久久www | 色中色综合| 波多野结衣一区三区 | 日韩欧美在线高清 | 玖草在线观看 | 99久久精品国产毛片 | 天天天天天天天操 | 欧美一级在线观看视频 | 久久久久久久久黄色 | 中文字幕一二三区 | 丁香资源影视免费观看 | 免费观看黄 | 免费视频二区 | 中文字幕第一页在线播放 | 91中文字幕在线视频 | 成人av教育 | 日韩大片在线观看 | 男女激情片在线观看 | 欧美极品少妇xbxb性爽爽视频 | 狠狠色丁香久久婷婷综合五月 | 夜夜操天天 | 91成人久久 | 天堂av在线免费观看 | 欧美黄色软件 | 狠狠色2019综合网 | 狠狠网 | 麻豆视频观看 | 97视频入口免费观看 | 在线免费观看一区二区三区 | 欧美成天堂网地址 | 97综合在线 | 最新av网址大全 | 在线黄色免费av | 麻豆91在线观看 | 久久久精品国产免费观看同学 | www日韩视频 | 国产黄大片 | 午夜精品导航 | 在线视频观看成人 | 欧美天堂久久 | 免费观看性生活大片3 | 成人动漫一区二区 | 国产精品久久久久久影院 | 西西444www| 欧美日韩不卡在线视频 | 一性一交视频 | 日韩精品高清不卡 | 免费麻豆 | 日韩久久精品一区 | 久久久久高清毛片一级 | 天天操天天操 | 午夜av不卡| 中文字幕久久亚洲 | 夜夜操天天摸 | 久久精品99国产国产 | 免费观看的av| 操高跟美女 | 国产精品淫 | 一级久久精品 | 亚洲手机av| 久久午夜免费视频 | 欧美午夜精品久久久久久孕妇 | 天天干天天操天天爱 | 夜夜澡人模人人添人人看 | www.香蕉视频在线观看 | 国产精品久久久久久一区二区 | 亚洲精品国产精品国产 | 91看片成人| www.av免费观看 | 久久欧洲视频 | 一级电影免费在线观看 | 久草在线视频首页 | 欧美一级性生活片 | 视频一区亚洲 | 国产日韩精品一区二区三区 | 国产精品第一页在线观看 | 天天综合操 | 91久久一区二区 | 免费开视频 | 中文字幕91 | 国产免费观看av | 日韩成人免费观看 | 日韩精品免费一区二区 | 国产女人18毛片水真多18精品 | 亚洲黄网址 | 欧洲精品亚洲精品 | 欧美日韩在线观看一区 | 91精品国产成人www | 在线精品视频在线观看高清 | 国产视频在线观看一区二区 | 亚洲国产精品一区二区尤物区 | 999久久国产 | 国产精品热 | 久久夜色精品国产欧美乱极品 | 99精品视频网站 | 国产一区二区三区网站 | 免费人成网ww44kk44 | 色婷婷在线视频 | 激情偷乱人伦小说视频在线观看 | av中文在线观看 | 日韩av电影中文字幕在线观看 | 丁香六月激情 | 日韩三级在线观看 | 国产无遮挡猛进猛出免费软件 | 99热99re6国产在线播放 | 欧美日韩精 | 国产成人精品一区一区一区 | 亚洲精品免费观看视频 | av免费网站在线观看 | 欧美激情视频在线观看免费 | 国产精品99久久久久人中文网介绍 | 色av婷婷 | 日韩av不卡在线观看 | 国产福利网站 | av在线亚洲天堂 | 久久久久99999 | 中文av网 | 日韩免费一区二区在线观看 | 免费污片 | 国产精品久久99 | 国产一在线精品一区在线观看 | 99综合电影在线视频 | 99999精品| av超碰在线 | 91chinesexxx| 香蕉成人在线视频 | 久久国产精品99久久久久久老狼 | 亚洲一区免费在线 | 久久久久久久久久久高潮一区二区 | 国产精品久久久久影院 | 99久久99久久精品国产片 | 国产91全国探花系列在线播放 | 中文字幕视频一区 | 成人动漫精品一区二区 | 激情五月五月婷婷 | av在线免费网 | 国产18精品乱码免费看 | 国产亚洲精品久久久久久电影 | 日韩高清精品一区二区 | 超碰97久久 | 婷婷久久亚洲 | 涩涩在线 | 丁香视频 | 国产精品一区二区三区在线免费观看 | 狠狠干天天射 | 伊人亚洲综合网 | 黄色毛片在线看 | www.久久精品视频 | 韩国一区二区在线观看 | 99国产成+人+综合+亚洲 欧美 | 99热99re6国产在线播放 | 免费视频xnxx com | 精品久久久久久国产偷窥 | 亚州国产精品久久久 | 久插视频 | 在线免费观看国产 | 天天射色综合 | 欧美一区影院 | 精品日本视频 | 久久综合免费视频影院 | 国产精品久久久久久久久费观看 | 成人黄色中文字幕 | 亚洲最大的av网站 | 中文视频在线看 | 在线视频免费观看 | 色婷婷电影网 | 久久av黄色| 国产99亚洲 | 精品伦理一区二区三区 | 国产99久久久国产 | 久久国产精品二国产精品中国洋人 | 国产一区二区网址 | 精品久久久久久亚洲综合网 | 一区二区激情视频 | 国产精品 中文字幕 亚洲 欧美 | 欧美日韩首页 | 粉嫩av一区二区三区四区在线观看 | 91精品视频在线观看免费 | 日本在线免费看 | 在线看欧美 | 亚洲天堂精品视频在线观看 | 免费看黄的 | 国产精品久久久久9999 | 国产伦理一区二区三区 | 在线观看国产永久免费视频 | 日日干夜夜干 | 欧美日韩不卡在线观看 | 欧美精品国产综合久久 | 国产亚洲一级高清 | 久久国产欧美日韩精品 | 激情五月婷婷激情 | 99产精品成人啪免费网站 | 99高清视频有精品视频 | 欧美a级成人淫片免费看 | 久久精品国产第一区二区三区 | 狠狠干天天射 | 不卡视频在线 | 91在线视频免费播放 | 中文字幕色婷婷在线视频 | 在线黄网站 | 午夜视频在线观看一区二区 | 久久久久久久久久久久久影院 | 日韩在线观看视频一区二区三区 | 欧美最猛性xxxxx亚洲精品 | 国产麻豆精品一区二区 | 男女啪啪免费网站 | 久久99精品久久久久婷婷 | 国产视频精品免费播放 | 国产精品美女免费 | 国产一级片在线播放 | 中文字幕在线视频免费播放 | 成人性生交大片免费观看网站 | 免费看一级特黄a大片 | 最近中文字幕视频完整版 | 国产美女精品在线 | 99免费国产| 有码中文字幕在线观看 | 在线观看一区二区视频 | 免费高清在线一区 | 四虎影视精品永久在线观看 | 欧美视频日韩视频 | 国产精品免费视频网站 | 免费a级毛片在线看 | 99精品偷拍视频一区二区三区 | 国产一区二区视频在线播放 | 一区二区三区免费在线观看视频 | 在线免费日韩 | www.大网伊人 | 17婷婷久久www | 日韩电影中文字幕 | 91看片淫黄大片一级在线观看 | 99re中文字幕 | 四虎影视精品成人 | 夜色成人网 | 欧美日韩在线免费观看视频 | 欧美人体xx | 18女毛片| 99r精品视频在线观看 | 亚洲视屏 | 91精品啪在线观看国产81旧版 | 国产亚洲成人精品 | 波多野结衣综合网 | 免费看v片 | 婷婷激情综合网 | 国产精品久久嫩一区二区免费 | 成人aⅴ视频 | 久久精品高清视频 | 在线观看日本高清mv视频 | 欧美 亚洲 另类 激情 另类 | 在线久草视频 | 国产老太婆免费交性大片 | 狠狠做六月爱婷婷综合aⅴ 日本高清免费中文字幕 | 亚洲国产精品影院 | 国产尤物一区二区三区 | 天堂在线v| 国产资源精品 | av在线成人 | 黄色av一区二区 | 超碰人人91| 国产中文字幕视频在线 | 在线国产不卡 | www久久 | 视频在线91 | ww视频在线观看 | 久久国产视屏 | 人人爽人人爽人人爽 | 国产成人99av超碰超爽 | 亚洲精品日韩一区二区电影 | 青青河边草免费直播 | 中文字幕免费一区 | 精品人人人人 | 99精品久久精品一区二区 | 黄网站色| 人人玩人人添人人 | 美女网站色在线观看 | 毛片网免费 | 成人宗合网 | 久久精品亚洲国产 | 久久成电影 | 国产一区在线播放 | 欧美片一区二区三区 | h视频日本 | 99se视频在线观看 | 色在线高清 | 国产99一区视频免费 | 免费观看一区二区三区视频 | 亚洲经典视频 | 亚洲视频电影在线 | 我要看黄色一级片 | 欧美日韩国产精品久久 | 久草视频在线免费 | 超级碰碰碰免费视频 | 午夜av网站| 美女免费网站 | 夜添久久精品亚洲国产精品 | 香蕉视频在线免费 | 国产在线精品播放 | 亚洲黄色一级视频 | 亚洲少妇xxxx | 久久神马影院 | 黄色a视频 | 色综合久久88色综合天天免费 | 日韩一区二区三区免费视频 | 国产精品一区二区美女视频免费看 | 中文字幕在线观看视频一区 | 久久久网址 | 成人播放器 | 超碰97av在线| 国产精品中文字幕在线观看 | 亚洲国产欧美在线人成大黄瓜 | 国产精品免费视频网站 | a视频在线看| 99精品欧美一区二区 | 免费高清在线视频一区· | 国内毛片毛片 | 国产精品毛片一区 | 婷婷av色综合 | 久久精品99视频 | 久久婷亚洲五月一区天天躁 | 久久久视频在线 | 日韩欧美精品免费 | 国产精品18久久久久久久 | 97免费在线观看视频 | 亚洲精品免费观看视频 | av色综合| 久久激情综合网 | 天天干天天草天天爽 | 日韩二区三区在线 | 手机在线免费av | 久久高清免费视频 | 久久精品电影网 | 日韩在线影视 | 日韩视频免费在线观看 | 成年美女黄网站色大片免费看 | 日本三级久久久 | 日韩av在线免费播放 | 亚洲精品免费在线播放 | 久久精彩免费视频 | 日本aaaa级毛片在线看 | 丁香六月天婷婷 | 中文久久精品 | 日本中文字幕免费观看 | 美女亚洲精品 | 欧美xxxxx在线视频 | 婷婷丁香花 | 国产a级片免费观看 | av不卡免费在线观看 | 精品国产激情 | 欧美成人h版在线观看 | 在线高清 | 4438全国亚洲精品观看视频 | 日本69hd| 狠狠干激情 | 午夜成人免费影院 | 婷婷在线色 | 日本丰满少妇免费一区 | 伊人天天综合 | 久久九九视频 | 国产精品九九久久99视频 | 欧美国产精品一区二区 | 精品毛片一区二区免费看 | 国产精品久久久久高潮 | 夜夜操天天| 久草青青在线观看 | 欧美一级性视频 | 国产精品99精品 | 麻豆免费在线视频 | 在线导航av| 99视频在线观看视频 | 久久激情久久 | 成人动漫视频在线 | 亚洲无吗视频在线 | 日韩大片在线看 | 久久久久久久看片 | 久久久久www | 久久综合成人网 | 久av在线 | 超碰在线公开免费 | 亚洲欧美婷婷六月色综合 | 天天射天天拍 | 日韩免费在线 | 国产精品免费观看国产网曝瓜 | 麻豆传媒视频在线免费观看 | 久久天堂网站 | 热久久精品在线 | 中文字幕在线观看视频免费 | 国产精品videossex国产高清 | 国产 视频 久久 | 中文字幕 91 | 在线网址你懂得 | 麻豆久久久久 | 中国一级片免费看 | 黄色a一级视频 | 91av在线免费观看 | 国产精品theporn | 午夜在线免费观看视频 | 成人av在线一区二区 | 日b视频国产 | 国产精品1000 | 美女激情影院 | 国产精品成人一区二区三区吃奶 | 超碰在线资源 | 91女人18片女毛片60分钟 | 精品国产片 | 999久久久免费精品国产 | 成人黄性视频 | 天天干夜夜操视频 | 九热精品 | 久久精品视频18 | 最近日本字幕mv免费观看在线 | 日韩av电影手机在线观看 | 久久久久久久久久久影视 | 亚洲尺码电影av久久 | 午夜久久久久久久 | 五月天堂网| 国产免费久久 | 成人a v视频 | 99人成在线观看视频 | av色综合| 97超碰人人爱| 96视频在线 | 日韩区在线观看 | 福利久久 | 九九热免费观看 | 午夜久久久久久久久久影院 | 日韩资源在线播放 | 在线日本看片免费人成视久网 | 超碰在线天天 | 99视频在线观看免费 | 91福利视频网站 | 久久久资源 | 91最新在线视频 | 国产精品九九久久久久久久 | 中文字幕在线观看一区二区 | 成人免费观看完整版电影 | 欧美了一区在线观看 | 亚洲一级免费观看 | 欧美日韩一级在线 | 久久久www成人免费精品 | 国产视频在线观看一区 | 伊人婷婷在线 | 天天天干 | 在线性视频日韩欧美 | 韩国av电影在线观看 | 国产精久久久久久妇女av | 亚洲精品国产拍在线 | 岛国av在线免费 | 99亚洲国产精品 | 精品影院一区二区久久久 | 精品国产自在精品国产精野外直播 | 国产不卡精品 | 国产中文字幕视频在线 | 欧美日本日韩aⅴ在线视频 插插插色综合 | 手机av电影在线 | 国产精品久久久久久久电影 | 色综合天天狠天天透天天伊人 | 黄色av一级片 | 久久专区 | 激情久久久 | 久久极品| 欧洲av不卡| 国产精品欧美 | 午夜久久网| 中文字幕中文字幕在线一区 | 日韩精品不卡在线 | 亚洲视频高清 | 中文一二区 | 91免费日韩| 免费看的黄色的网站 | 成年人黄色大片在线 | 伊人成人精品 | 天天在线操 | 欧美日韩精品在线一区二区 | 国产成人精品999 | 国产人成精品一区二区三 | 99视频这里只有 | 免费在线观看一区二区三区 | 精品国产激情 | 免费涩涩网站 | 免费网址你懂的 | 精品中文字幕视频 | 婷婷激情小说网 | 免费高清在线观看成人 | 日韩区在线观看 | 狠狠狠狠狠狠狠狠 | 日本中文字幕电影在线免费观看 | 欧美精品日韩 | 亚洲成a人片综合在线 | www黄| 91精品影视 | 国产在线观看 | 日韩av视屏 | 久久久久久视频 | 波多野结衣在线视频一区 | 国产一区二区在线观看视频 | 欧美精品久久99 | 天天爱天天射天天干天天 | 日韩视频免费观看高清完整版在线 | 人人爽人人| 亚洲精品国产欧美在线观看 | 很黄很黄的网站免费的 | 麻豆国产精品一区二区三区 | 精品在线你懂的 | 中文字幕在线观看完整 | 久久草在线精品 | 免费视频在线观看网站 | 五月激情在线 | 天堂在线一区二区三区 | 欧美精品v国产精品v日韩精品 | 亚洲天堂网在线观看视频 | 亚洲精品国产视频 | 国内精品免费久久影院 | 色婷婷综合五月 | 国产色视频网站 | 色综合天天色 | 夜色成人av| 成人av片免费观看app下载 | 99热这里是精品 | 成人av电影在线 | av在线播放中文字幕 | 日韩在线观看小视频 | 精品美女在线视频 | 国精产品999国精产品视频 | 国产精品久久久久永久免费看 | 一级片免费观看视频 | 中文字幕一区二区三区在线观看 | 久久久久久黄色 | 日韩av网址在线 | 一 级 黄 色 片免费看的 | 88av网站 | 国产成人久久久77777 | 久久国产三级 | 黄色激情网址 | 超碰在线人人艹 | 国产网红在线观看 | 国产精品久久久久久五月尺 | 免费在线观看国产黄 | 在线免费观看黄网站 | 在线观看视频中文字幕 | 国产亚洲精品久久久久久 | 91传媒在线看| 精品视频免费观看 | 网站在线观看日韩 | 成人黄色小说视频 | 亚洲91精品在线观看 | 最近免费中文字幕mv在线视频3 | 国产一区在线视频 | 久久久午夜精品福利内容 | 国产在线精品区 | 免费网站看av片 | 天天色影院 | 天天操天天添 | a极黄色片| 综合色综合 | 国产一级黄| 男女拍拍免费视频 | 欧美亚洲国产日韩 | 成人毛片在线观看 | 国产一区私人高清影院 | 国产精品入口传媒 | 日本成人黄色片 | 久久艹精品 | 欧美福利视频 | 99婷婷狠狠成为人免费视频 | 狠狠色狠狠色 | 日日草天天干 | 九九在线国产视频 | 国产免费观看久久黄 | 在线观看成人 | 欧美不卡视频在线 | 日韩av免费在线电影 | 天天弄天天干 | 在线观看一区二区精品 | 日韩在线观看不卡 | 欧美综合在线视频 | 一区二区三区四区五区在线 | 99久久精品久久久久久清纯 | 久久久精品视频网站 | 99色在线视频 | 国产视频日韩视频欧美视频 | 激情小说 五月 | 性色av一区二区三区在线观看 | 国产视频在线播放 | 一级黄色毛片 | 久草在线视频免费资源观看 | 欧美91精品久久久久国产性生爱 | 午夜精品三区 | 在线а√天堂中文官网 | 丁香六月在线 | 久久久久久国产一区二区三区 | 在线观看的av| 国产免费国产 | 婷婷丁香六月 | 国产一级在线 | 婷婷丁香花五月天 | www亚洲国产 | 亚洲精品在线视频网站 | 久久久久免费看 | 在线观看日韩精品 | 深爱激情五月婷婷 | 96亚洲精品久久 | 特级aaa毛片 | 国产精品毛片一区二区在线 | 日韩免费观看高清 | 久久久精品一区二区三区 | 天天操天天摸天天射 | 国产色啪| 国产五月色婷婷六月丁香视频 | 久久夜色网| 最新真实国产在线视频 | www四虎影院 | 国产精品原创av片国产免费 | 奇米影视8888 | 综合激情伊人 | 91麻豆精品久久久久久 | 日韩 国产 | 婷婷亚洲五月色综合 | 国产亚洲免费观看 | 日韩欧美一区二区在线播放 | 中文字幕在线观看亚洲 | 91插插影库 | 97精品国产97久久久久久粉红 | 亚洲经典中文字幕 | 精品久久中文 | 成人国产精品久久久久久亚洲 | 国产精品久久久久久久久久免费看 | 免费三级黄色片 | 亚洲jizzjizz日本少妇 | 在线观看网站黄 | 看国产黄色大片 | 免费99精品国产自在在线 | 精品久久久久久久久久国产 | 国产精品毛片一区视频 | 婷婷在线视频观看 | 欧美男男激情videos | 精品视频在线视频 | 国产在线国偷精品产拍 | 日韩av在线资源 | 麻豆91在线观看 | 久久免费精彩视频 |