当前位置: 首页 > news >正文

网站提现功能开发/seo工作职位

网站提现功能开发,seo工作职位,移动端网站开发介绍,怎么给别人做网站Android安卓实战项目(12)—关于身体分析,BMI计算,喝水提醒,食物卡路里计算APP【支持中英文切换】生活助手类APP(源码在文末🐕🐕🐕) 一.项目运行介绍 B站演示…

Android安卓实战项目(12)—关于身体分析,BMI计算,喝水提醒,食物卡路里计算APP【支持中英文切换】生活助手类APP(源码在文末🐕🐕🐕)

一.项目运行介绍

B站演示
【Android安卓实战项目(12)—生活助手类APP—关于身体分析,BMI计算,喝水提醒,食物卡路里计算APP【支持中英文切换】】
https://www.bilibili.com/video/BV1Wu4y1C76j/?share_source=copy_web&vd_source=b2e9b9ed746acda34f499009647748ed

1.开机动画

60ab1e73a75361bcbbff6ca7d80c6c5

2.主页面

image-20230831093217711

3.侧边栏

image-20230831093225406

4.身体分析

image-20230831093239408

5.分析结果

image-20230831093246484

image-20230831093254082

6.显示分析

image-20230831093306291

7.食物热量计算

image-20230831093406559

8.喝水提醒

image-20230831093301687

二.具体实现

1.MainActivity

package ahmux.nutritionpoint;
import android.app.Activity;
import android.app.AlarmManager;
import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.res.Configuration;
import android.graphics.Typeface;
import android.net.Uri;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.design.widget.NavigationView;
import android.support.v4.view.GravityCompat;
import android.support.v4.widget.DrawerLayout;
import android.support.v7.app.ActionBarDrawerToggle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.util.DisplayMetrics;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.Button;
import android.widget.Switch;
import android.widget.TextView;
import android.widget.Toast;import java.lang.reflect.Array;
import java.util.Locale;public class MainActivity extends AppCompatActivityimplements FragmentsCommunicator, NavigationView.OnNavigationItemSelectedListener {String fontPath = "fonts/Questv1-Bold.otf";Toast doubleBackToast;TextView  tv1;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);setSupportActionBar(toolbar);tv1 = (TextView) findViewById(R.id.textView1);DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close);drawer.addDrawerListener(toggle);toggle.syncState();NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view);navigationView.setNavigationItemSelectedListener(this);loadLocale();saveData();waterReminder();// Loading Font FaceTypeface tf = Typeface.createFromAsset(getAssets(), fontPath);tv1.setTypeface(tf);doubleBackToast = Toast.makeText(this,R.string.doubleBackToast, Toast.LENGTH_LONG);}/* ######### Communicate with Fragments ######################################################## */@Override//data1 is key, data2 is valuepublic void respond(String data1, int data2) {SharedPreferences sharedPreferences = getSharedPreferences("UserData", Context.MODE_PRIVATE);SharedPreferences.Editor editor = sharedPreferences.edit();switch (data1){case("male"):editor.putString("gender", getString(R.string.Male));loadFragment(new Fragment2(), R.id.fullparentFramelayout);break;case("female"):editor.putString("gender", getString(R.string.Female));loadFragment(new Fragment2(),R.id.fullparentFramelayout);break;case("no activity"):editor.putString("physical_activity", "no activity");loadFragment(new Fragment3(), R.id.fullparentFramelayout);break;case("walking"):editor.putString("physical_activity", "walking");loadFragment(new Fragment3(), R.id.fullparentFramelayout);break;case("exercize 1-2 days"):loadFragment(new Fragment3(),R.id.fullparentFramelayout);break;case("exercize 3-5 days"):loadFragment(new Fragment3(), R.id.fullparentFramelayout);break;case("everyday"):loadFragment(new Fragment3(), R.id.fullparentFramelayout);break;case("age"):editor.putString("age", String.valueOf(data2));break;case("weight"):editor.putString("weight", String.valueOf(data2));break;case("height"):editor.putString("height", String.valueOf(data2));break;case("analyze"):loadFragment(new Fragment4(),R.id.fullparentFramelayout);break;case("ok"):Intent endIntent = new Intent(this, MainActivity .class);//set flags to clear back stackendIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK);startActivity(endIntent);break;case("clear"):Toast.makeText(this, "DATA CLEARED", Toast.LENGTH_SHORT).show();//clear data from shared preferenceseditor.clear();Intent clearIntent = new Intent(this, MainActivity .class);//clear back stackclearIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK);startActivity(clearIntent);break;case("show"):loadFragment(new Fragment4(),R.id.fullparentFramelayout);break;}editor.commit();}//Fragments loading methodprivate void loadFragment(Fragment f, int layoutId) {android.support.v4.app.FragmentManager fm = getSupportFragmentManager();android.support.v4.app.FragmentTransaction ft = fm.beginTransaction();ft.replace(layoutId, f);ft.addToBackStack(null);  // press back to go to previous fragmentft.commit();}/* ############################################################################################# *//* #############Saving data in Shared Preferences############################################### */private void saveData() {SharedPreferences sharedPreferences = getSharedPreferences("UserData", Context.MODE_PRIVATE);String gender = sharedPreferences.getString("gender", "N/A");String activity = sharedPreferences.getString("physical_activity", "N/A");String age = sharedPreferences.getString("age", "N/A");String weight = sharedPreferences.getString("weight", "N/A");String height = sharedPreferences.getString("height", "N/A");//choose start fraagment or End!android.support.v4.app.FragmentManager fm = getSupportFragmentManager();android.support.v4.app.FragmentTransaction ft = fm.beginTransaction();if (age.matches("N/A")) {ft.replace(R.id.mainFrameLayout, new Fragment1());ft.commit();} else {ft.replace(R.id.mainFrameLayout, new Fragment5());ft.commit();}}//Send data to Fragmentspublic String getMyData(String s) {String myString = s;SharedPreferences sharedPreferences = getSharedPreferences("UserData", Context.MODE_PRIVATE);switch (s){case("gender"):myString = sharedPreferences.getString("gender", null);break;case("age"):myString = sharedPreferences.getString("age", null);break;case("weight"):myString = sharedPreferences.getString("weight", null);break;case("height"):myString = sharedPreferences.getString("height", null);break;}return myString;}/* ############################################################################################# */@Overridepublic boolean onCreateOptionsMenu(Menu menu) {// Inflate the menu; this adds items to the action bar if it is present.getMenuInflater().inflate(R.menu.main, menu);return true;}@Overridepublic boolean onOptionsItemSelected(MenuItem item) {int id = item.getItemId();if (id == R.id.action_about) {loadFragment(new AboutFragment(), R.id.fullparentFramelayout);return true;}else if (id == R.id.action_language){String langPref = "Language";SharedPreferences sharedPreferences = getSharedPreferences("SettingsData", Activity.MODE_PRIVATE);String language = sharedPreferences.getString(langPref, "en");if(language.matches("ar")){changeLang("en");}else{changeLang("ar");}Intent refresh = new Intent(this, MainActivity.class);refresh.setFlags(refresh.getFlags() | Intent.FLAG_ACTIVITY_NO_HISTORY); // Adds the FLAG_ACTIVITY_NO_HISTORY flagstartActivity(refresh);finish();}return super.onOptionsItemSelected(item);}@SuppressWarnings("StatementWithEmptyBody")@Overridepublic boolean onNavigationItemSelected(MenuItem item) {// Handle navigation view item clicks here.int id = item.getItemId();if (id == R.id.nav_home) {Intent intent = new Intent(this, MainActivity.class);startActivity(intent);} else if (id == R.id.nav_reminder) {Intent RemindersIntent = new Intent(this, RemindersActivity.class);startActivity(RemindersIntent);} else if (id == R.id.nav_Recipes) {} else if (id == R.id.nav_calculate) {Intent ApiIntent = new Intent(this, ApiActivity.class);startActivity(ApiIntent);} else if (id == R.id.nav_share) {} else if (id == R.id.nav_facebook) {try {Intent fbIntent = new Intent(Intent.ACTION_VIEW);fbIntent.setData(Uri.parse("https://www.facebook.com/supportnutritionpoit"));startActivity(fbIntent);} catch (Exception e) {}}DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);drawer.closeDrawer(GravityCompat.START);return true;}/* ###### Water Reminder ######################################################################3 */public void waterReminder(){SharedPreferences sharedPreferences = getSharedPreferences("SettingsData", Activity.MODE_PRIVATE);int t = sharedPreferences.getInt("water_delay", 1000);if(sharedPreferences.getString("water_reminder", "false").matches("true")){AlarmManager alarmManager = (AlarmManager)getSystemService(Context.ALARM_SERVICE);Intent alarmIntent = new Intent(this, AlarmReceiver.class);PendingIntent pendingIntent = PendingIntent.getBroadcast(this,0, alarmIntent, PendingIntent.FLAG_UPDATE_CURRENT);alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(),t*60*1000, pendingIntent);}}/* ############################################################################################ *//* #########Change Language and restart Main Activity########################################### */public void loadLocale() {String langPref = "Language";SharedPreferences sharedPreferences = getSharedPreferences("SettingsData", Activity.MODE_PRIVATE);String language = sharedPreferences.getString(langPref, "");changeLang(language);}public void changeLang(String lang) {if (lang.equalsIgnoreCase(""))return;Locale myLocale = new Locale(lang, "MR");saveLocale(lang);Locale.setDefault(myLocale);android.content.res.Configuration config = new android.content.res.Configuration();config.locale = myLocale;getBaseContext().getResources().updateConfiguration(config,getBaseContext().getResources().getDisplayMetrics());}public void saveLocale(String lang) {String langPref = "Language";SharedPreferences sharedPreferences = getSharedPreferences("SettingsData", Activity.MODE_PRIVATE);SharedPreferences.Editor editor = sharedPreferences.edit();editor.putString(langPref, lang);editor.commit();}/* ############################################################################################ */@Overridepublic void onBackPressed() {int backStackEntryCount = getSupportFragmentManager().getBackStackEntryCount();DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);if (drawer.isDrawerOpen(GravityCompat.START)) {drawer.closeDrawer(GravityCompat.START);}/* ##### press back twice to exit method #################################// */else if (backStackEntryCount == 0) {if (doubleBackToast.getView().isShown()) {if (doubleBackToast != null) {doubleBackToast.cancel();super.onBackPressed();}}doubleBackToast.show();}else {super.onBackPressed();}/* ######################################################################// */}
}

这段代码是一个Android应用程序的主要活动(Activity),它是一个基于导航抽屉(Navigation Drawer)的应用,用于管理用户的营养信息。下面我会对代码的各个部分进行详细解释:

  1. 导入必要的类:
    代码开始处导入了一些Android的类,这些类用于构建应用界面、处理用户操作和管理数据。这些类包括Activity、Fragment、Intent等等。

  2. MainActivity类继承自AppCompatActivity:
    这是应用的主要活动类,用于展示应用的界面、处理用户输入和管理应用逻辑。

  3. onCreate方法:
    这个方法是Activity生命周期的一部分,在Activity首次创建时被调用。在这个方法中,进行了许多初始化操作,如设置布局、工具栏、导航抽屉等。

  4. Fragment通信:
    在代码中定义了一个接口FragmentsCommunicator,用于在Activity和Fragments之间进行通信。respond方法根据接收到的不同数据,进行相关的逻辑处理和Fragment的加载。

  5. 数据保存和获取:
    通过SharedPreferences,数据被保存在应用的持久存储中,以便在应用重启后可以恢复。saveData方法用于根据已保存的数据判断是加载起始Fragment还是结束Fragment,getMyData方法用于从SharedPreferences获取特定的用户数据。

  6. 菜单和选项:
    通过onCreateOptionsMenu方法创建应用菜单,通过onOptionsItemSelected方法处理选项菜单的点击事件,比如切换语言、显示关于界面等。

  7. 抽屉导航点击事件:
    通过onNavigationItemSelected方法处理导航抽屉中的选项点击事件,根据点击的选项执行不同的操作,如返回主页面、打开提醒页面、切换语言等。

  8. 水量提醒功能:
    waterReminder方法用于设置水量提醒的闹钟,根据用户的设置,周期性地触发提醒。

  9. 语言切换:
    loadLocale方法用于加载用户选择的语言设置,changeLang方法用于实际改变应用的语言,并重新加载界面。

  10. 返回按钮行为:
    onBackPressed方法重写了返回按钮的行为,实现了“双击返回退出”功能,以及处理Fragment的回退。

  11. 其他细节:
    代码中还包括了加载字体、设置文本样式、处理Facebook链接等其他细节功能。

2.ApiActivity.java

package ahmux.nutritionpoint;import android.os.AsyncTask;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;public class ApiActivity extends AppCompatActivity {String food;EditText et;TextView tv1, tv2,tv3, tv4, tv5;View v1, v2;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_api);et = (EditText)findViewById(R.id.editText);tv1 = (TextView)findViewById(R.id.textView13);tv2 = (TextView)findViewById(R.id.textView16);tv3 = (TextView)findViewById(R.id.textView17);tv4 = (TextView)findViewById(R.id.textView18);tv5 = (TextView)findViewById(R.id.textView19);}public void calculateClk(View view) {food = et.getText().toString();Toast.makeText(this, "Searching...", Toast.LENGTH_SHORT).show();new MyAsyncTask().execute();}/* #####AsyncTask Subclass################################################################### */private class MyAsyncTask extends AsyncTask<String, String, String>{@Overrideprotected String doInBackground(String... strings) {String allStrings;try{URL myUrl = new URL("https://api.nutritionix.com/v1_1/search/" +food +"?fields=item_name%2Citem_id%2Cnf_calories%2Cnf_total_fat" +"&appId=3fe5fa47&appKey=61729b9d2d8612a629467f0cdbbd6d2c");HttpURLConnection connection =(HttpURLConnection) myUrl.openConnection();connection.setConnectTimeout(700);connection.connect();//Create a new InputStreamReaderInputStreamReader streamReader = new InputStreamReader(connection.getInputStream());//Create a new buffered reader and String BuilderBufferedReader reader = new BufferedReader(streamReader);String inputLine;StringBuilder stringBuilder = new StringBuilder();//Check if the line we are reading is not nullwhile((inputLine = reader.readLine()) != null){stringBuilder.append(inputLine);}reader.close();streamReader.close();allStrings = stringBuilder.toString();publishProgress(allStrings);}catch(Exception e){}return "";}@Overrideprotected void onProgressUpdate(String... values) {try {JSONObject j = new  JSONObject(values[0]);JSONArray h= (JSONArray) j.get("hits");JSONObject rec = h.getJSONObject(0);JSONObject fields = rec.getJSONObject("fields");String calories = fields.getString("nf_calories");String fat = fields.getString("nf_total_fat");String name = fields.getString("item_name");tv2.setText("Nutrition Facts");tv3.setText("Amount: " + name);tv4.setText("Calories: " +calories);tv5.setText("Total Fat: " + fat);v1 = findViewById(R.id.view);v1.setVisibility(View.VISIBLE);v2 = findViewById(R.id.view);v2.setVisibility(View.VISIBLE);} catch (JSONException e) {e.printStackTrace();}}}
}

这段代码是一个Android应用中的Java类,用于从一个外部的API获取食物的营养信息,并在界面上显示出来。我会逐步解释每个部分的功能和作用。

  1. 导入库和包:代码开头导入了一些需要的库和包,用于支持Android应用的开发和功能实现。

  2. 类定义:定义了一个名为 ApiActivity 的类,继承自 AppCompatActivity,即用于创建一个与Android界面交互的活动(Activity)。

  3. 成员变量的声明:在类内部,声明了一系列的成员变量,用于存储界面上的控件和数据。例如,String food 用于存储食物名称,EditText et 用于获取用户输入的食物名称,TextView 类型的 tv1, tv2, tv3, tv4, tv5 用于显示不同的文本信息,View v1View v2 则是视图元素。

  4. onCreate 方法:这是Android活动的生命周期方法之一,会在活动创建时被调用。在这里,首先设置了界面的布局,然后通过 findViewById 方法获取布局中的各个控件,将它们和之前声明的成员变量进行关联。

  5. calculateClk 方法:这个方法是在用户点击某个按钮时触发的,它从 EditText 控件中获取用户输入的食物名称,显示一个短时的提示消息,然后创建并执行一个异步任务 MyAsyncTask 来获取营养信息。

  6. MyAsyncTask 内部类:这是一个内部类,继承自 AsyncTask,用于在后台执行网络请求和数据处理操作。

    • doInBackground 方法:在后台线程执行,它首先构建一个URL来访问特定的API,然后通过HTTP连接获取API返回的数据。这部分操作是在后台进行的,以避免在主线程上进行网络请求,防止应用界面的卡顿。获取的数据被转化为字符串并通过 publishProgress 发送到主线程更新。

    • onProgressUpdate 方法:在主线程执行,用于处理后台任务的进度更新。在这里,获取的字符串数据被解析为JSON对象,然后从中提取出营养信息,最后将这些信息设置到界面上的 TextView 控件中,并显示一些视图元素。

总的来说,这段代码实现了以下功能:

  • 用户在输入框中输入食物名称,点击按钮后,应用通过网络请求从特定API获取食物的营养信息。
  • 营养信息包括名称、卡路里和总脂肪,并将这些信息显示在界面上的 TextView 控件中。
  • 异步任务的使用确保了网络请求等耗时操作不会阻塞应用的主线程,保持了应用的响应性。

3.RemindersActivity.java

package ahmux.nutritionpoint;/* ######################################## */
/*  Nutrition Point App developed by Ahmux  */
/* ##### Ahmux.freelander@gmail.com ######  */
/* ######################################## */import android.app.Activity;
import android.app.AlarmManager;
import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.graphics.Color;
import android.support.v7.app.ActionBar;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;public class RemindersActivity extends AppCompatActivity implements View.OnClickListener {Button b1,b2, b3, b4, b5,b6,b7;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_reminders);ActionBar actionBar = getSupportActionBar();actionBar.setTitle(R.string.reminders_title);SharedPreferences sharedPreferences = getSharedPreferences("SettingsData", Activity.MODE_PRIVATE);b1 = (Button)findViewById(R.id.min15Btn);b1.setOnClickListener(this);b2 = (Button)findViewById(R.id.min30Btn);b2.setOnClickListener(this);b3 = (Button)findViewById(R.id.h1Btn);b3.setOnClickListener(this);b4 = (Button)findViewById(R.id.h2Btn);b4.setOnClickListener(this);b5 = (Button)findViewById(R.id.h4Btn);b5.setOnClickListener(this);b6 = (Button)findViewById(R.id.startBtn);b6.setOnClickListener(this);b7 = (Button)findViewById(R.id.stopBtn);b7.setOnClickListener(this);}@Overridepublic void onClick(View view) {SharedPreferences sharedPreferences = getSharedPreferences("SettingsData", Activity.MODE_PRIVATE);SharedPreferences.Editor editor = sharedPreferences.edit();int delay = sharedPreferences.getInt("water_delay", 300);if (view.getId() == R.id.min15Btn || delay == 15){editor.putInt("water_delay", 15);b1.setTextColor(Color.parseColor("#FFCC00"));b2.setTextColor(Color.WHITE);b3.setTextColor(Color.WHITE);b4.setTextColor(Color.WHITE);b5.setTextColor(Color.WHITE);}else if (view.getId() == R.id.min30Btn || delay == 30){editor.putInt("water_delay", 30);b1.setTextColor(Color.WHITE);b2.setTextColor(Color.parseColor("#FFCC00"));b3.setTextColor(Color.WHITE);b4.setTextColor(Color.WHITE);b5.setTextColor(Color.WHITE);}else if (view.getId() == R.id.h1Btn || delay == 60){editor.putInt("water_delay", 60);b1.setTextColor(Color.WHITE);b2.setTextColor(Color.WHITE);b3.setTextColor(Color.parseColor("#FFCC00"));b4.setTextColor(Color.WHITE);b5.setTextColor(Color.WHITE);}else if (view.getId() == R.id.h2Btn || delay == 120){editor.putInt("water_delay", 120);b1.setTextColor(Color.WHITE);b2.setTextColor(Color.WHITE);b3.setTextColor(Color.WHITE);b4.setTextColor(Color.parseColor("#FFCC00"));b5.setTextColor(Color.WHITE);}else if (view.getId() == R.id.h4Btn || delay == 240){editor.putInt("water_delay", 240);b1.setTextColor(Color.WHITE);b2.setTextColor(Color.WHITE);b3.setTextColor(Color.WHITE);b4.setTextColor(Color.parseColor("#FFCC00"));b5.setTextColor(Color.WHITE);}else if (view.getId() == R.id.startBtn){AlarmManager alarmManager = (AlarmManager)getSystemService(Context.ALARM_SERVICE);Intent alarmIntent = new Intent(this, AlarmReceiver.class);PendingIntent pendingIntent = PendingIntent.getBroadcast(this,0, alarmIntent, PendingIntent.FLAG_UPDATE_CURRENT);alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(),delay*60*1000, pendingIntent);editor.putString("water_reminder", "true");}else if (view.getId() == R.id.stopBtn){editor.putString("water_reminder", "false");AlarmManager alarmManager = (AlarmManager)getSystemService(Context.ALARM_SERVICE);Intent alarmIntent = new Intent(this, AlarmReceiver.class);PendingIntent pendingIntent = PendingIntent.getBroadcast(this,0, alarmIntent, PendingIntent.FLAG_UPDATE_CURRENT);alarmManager.cancel(pendingIntent);Toast.makeText(this, "Water Reminders Stopped", Toast.LENGTH_SHORT).show();}}
}

这段代码是一个Android应用中的Java类,它似乎是一个提醒用户喝水的功能部分。下面我将对代码的不同部分进行详细解释:

  1. 导入库和声明类:

    • import 语句用于导入所需的类和库,让你可以在代码中使用它们。
    • package ahmux.nutritionpoint; 声明了当前类所在的包名。
    • public class RemindersActivity extends AppCompatActivity implements View.OnClickListener 声明了一个名为 RemindersActivity 的类,它继承自 AppCompatActivity 类,并实现了 View.OnClickListener 接口。
  2. 成员变量声明:

    • Button b1, b2, b3, b4, b5, b6, b7; 声明了七个按钮对象的成员变量,这些按钮将用于用户与界面交互。
  3. onCreate 方法:

    • onCreate 是 Android 生命周期中的一个方法,在创建 Activity 时被调用。在这里,你进行了一些初始化操作。
    • setContentView(R.layout.activity_reminders); 设置当前 Activity 使用的布局文件为 activity_reminders.xml
    • 通过 getSupportActionBar() 获取应用的操作栏,并设置标题为 “reminders_title” 字符串资源的值。
    • 获取名为 “SettingsData” 的共享偏好设置实例。
  4. 按钮初始化和点击事件:

    • 初始化了七个按钮对象,并分别为它们设置了点击监听器。
    • 当用户点击按钮时,相应的 onClick 方法将被调用。
  5. onClick 方法:

    • 在用户点击按钮时触发的方法,这个方法实现了对不同按钮的响应操作。
    • 首先,获取共享偏好设置实例和编辑器。
    • 根据用户点击的按钮或者已经保存的延迟时间,修改偏好设置中的 “water_delay” 值。
    • 根据点击的按钮,修改按钮的文本颜色以进行视觉提示。
    • 如果用户点击了 “startBtn”,设置一个重复性闹钟,以提醒用户喝水。
    • 如果用户点击了 “stopBtn”,取消之前设置的闹钟,并显示一个提示信息。

这段代码实现了一个界面,用户可以点击不同的按钮来设置提醒的时间间隔,以及开始和停止喝水提醒的功能。

三.项目源码

链接:https://pan.baidu.com/s/1Ydtv31fBAuenfCQJeJCeOw?pwd=0616
提取码:0616

创作不易,项目已加密,有偿(仅一杯奶茶钱,可做实验报告,代码讲解等…)

请私信作者或

(v)15135757306

相关文章:

Android安卓实战项目(12)—关于身体分析,BMI计算,喝水提醒,食物卡路里计算APP【支持中英文切换】生活助手类APP(源码在文末)

Android安卓实战项目&#xff08;12&#xff09;—关于身体分析&#xff0c;BMI计算&#xff0c;喝水提醒&#xff0c;食物卡路里计算APP【支持中英文切换】生活助手类APP&#xff08;源码在文末&#x1f415;&#x1f415;&#x1f415;&#xff09; 一.项目运行介绍 B站演示…...

Hadoop 3.2.4 集群搭建详细图文教程

目录 一、集群简介 二、Hadoop 集群部署方式 三、集群安装 3.1 集群角色规划 3.2 服务器基础环境准备 3.2.1 环境初始化 3.2.2 ssh 免密登录&#xff08;在 hadoop01 上执行&#xff09; 3.2.3 各个节点上安装 JDK 1.8 环境 3.3 安装 Hadoop 3.4 Hadoop 安装包目…...

STL的学习之一

1&#xff09;STL扫盲 1&#xff09;C标准库和标准模板库是不一样的 2&#xff09;标准模板库是用泛型编程方式编写的函数或者类库; 3) SGI STL linux一般用&#xff0c;P.J.Plauger STL,visual2017 windows用 STL六大组件 : 容器&#xff0c;迭代器 STL 算法(说白了就是函数…...

如何使用Python进行数据科学实验?

使用Python进行数据科学实验通常需要以下步骤&#xff1a; 以上仅为使用Python进行数据科学实验的基本步骤&#xff0c;具体实验过程会根据具体问题和数据集的特点而有所不同。可以进一步学习和探索相关的数据科学和机器学习技术&#xff0c;以提高实验的效果和表现。 安装Pyt…...

华为数通方向HCIP-DataCom H12-821题库(拖拽题,知识点总结)

以下是我在现有题库中整理的需要重点关注的考点内容,如有遗漏小伙伴可以留言补充。...

第三课:C++实现PDF去水印

PDF去水印是一项非常复杂的任务,需要一定的计算机图形学知识和技术,也需要使用到一些专业的工具库。以下是一种可能的实现方法: 首先,需要将PDF文件解析成一系列图形元素,包括文字、矢量图形等。可以使用开源库Poppler或MuPDF来解析PDF文件。 接下来,需要判断PDF文件是否…...

实现Android分布式协同办公:将待办事件App与本地Web服务结合

AndServer AndServer 是 Android 平台的 Web Server 和 Web Framework,它基于编译时注解提供了类似 SpringMVC 的注解和功能。 Github :https://github.com/yanzhenjie/AndServer使用文档:https://yanzhenjie.com/AndServer/业务需求 实现待办事件APP本地启动Web服务,将本…...

VMware12.1.1安装Centos7

VMware12.1.1安装Centos7 1、下载相关软件 1.1 Centos7下载 官方下载链接&#xff1a; http://isoredirect.centos.org/centos/7/isos/x86_64/CentOS-7-x86_64-DVD-1511.iso 1.2 VMware Workstation下载 VMware Workstation 12.1.1官方原版下载&#xff1a; https://dow…...

bazel构建原理

调度模型 传统构建系统有很多是基于任务的&#xff0c;例如 Ant&#xff0c;Maven&#xff0c;Gradle。用户可以自定义"任务"(Task&#xff09;&#xff0c;例如执行一段 shell 脚本。用户配置它们的依赖关系&#xff0c;构建系统则按照顺序调度。 基于 Task 的调度…...

matlab 点云的二进制形状描述子

目录 一、功能概述1、算法概述2、主要函数3、参考文献二、代码示例三、结果展示四、参数解析输入参数名称-值对应参数输出参数五、参考链接本文由CSDN点云侠原创,...

MongoDB实验——在Java应用程序中操作 MongoDB 数据

在Java应用程序中操作 MongoDB 数据 1. 启动MongoDB Shell 2. 切换到admin数据库&#xff0c;使用root账户 3.开启Eclipse&#xff0c;创建Java Project项目&#xff0c;命名为MongoJava File --> New --> Java Project 4.在MongoJava项目下新建包&#xff0c;包名为mo…...

java+springboot+mysql校园跑腿管理系统

项目介绍&#xff1a; 使用javaspringbootmysql开发的校园跑腿管理系统&#xff0c;系统包含超级管理员&#xff0c;系统管理员、用户角色&#xff0c;功能如下&#xff1a; 超级管理员&#xff1a;管理员管理&#xff1b;用户管理&#xff08;充值&#xff09;&#xff1b;任…...

ubuntu20.04 server 安装后磁盘空间只有一半的处理

这里扩展&#xff1a;/dev/mapper/ubuntu–vg-ubuntu–lv rootbook:/data# df -h Filesystem Size Used Avail Use% Mounted on udev 3.9G 0 3.9G 0% /dev tmpfs 795M 1.2M 79…...

〔017〕Stable Diffusion 之 常用模型推荐 篇

✨ 目录 🎈 模型网站🎈 仿真系列🎈 国风系列🎈 卡通动漫系列🎈 3D系列🎈 一些好用的lora模型🎈 模型网站 由于现在大模型超级多,导致每种画风的模型太多,那么如何选择最好最适合的模型,成了很多人头疼的问题由于用的大部分都是1.5的模型,所以优先下载 safete…...

多目标应用:基于多目标人工蜂鸟算法(MOAHA)的微电网多目标优化调度MATLAB

一、微网系统运行优化模型 参考文献&#xff1a; [1]李兴莘,张靖,何宇,等.基于改进粒子群算法的微电网多目标优化调度[J].电力科学与工程, 2021, 37(3):7 二、多目标人工蜂鸟算法MOAHA 多目标人工蜂鸟算法&#xff08;multi-objective artificial hummingbird algorithm&…...

【HTML5】HTML5 特性

HTML5 特性 1. 语义化标签 <header>&#xff1a;表示网页或某个区域的页眉部分&#xff0c;通常包含网站的标志、导航菜单等内容。<nav>&#xff1a;表示导航区域&#xff0c;用于包含网站的主要导航链接。<main>&#xff1a;表示网页的主要内容区域&#…...

【FreeRTOS】互斥量的使用与逐步实现

在FreeRTOS中&#xff0c;互斥量是一种用于保护共享资源的同步机制。它通过二进制信号量的方式&#xff0c;确保在任意时刻只有一个任务可以获取互斥量并访问共享资源&#xff0c;其他任务将被阻塞。使用互斥量的基本步骤包括创建互斥量、获取互斥量、访问共享资源和释放互斥量…...

Spring-Cloud-Openfeign如何传递用户信息?

用户信息传递 微服务系统中&#xff0c;前端会携带登录生成的token访问后端接口&#xff0c;请求会首先到达网关&#xff0c;网关一般会做token解析&#xff0c;然后把解析出来的用户ID放到http的请求头中继续传递给后端的微服务&#xff0c;微服务中会有拦截器来做用户信息的…...

OpenCV(十一):图像仿射变换

目录 1.图像仿射变换介绍 仿射变换&#xff1a; 仿射变换矩阵&#xff1a; 仿射变换公式&#xff1a; 2.仿射变换函数 仿射变换函数&#xff1a;warpAffine() 图像旋转&#xff1a;getRotationMatrix2D() 计算仿射变换矩阵&#xff1a;getAffineTransform() 3.demo 1.…...

多路波形发生器的控制

本次波形发生器&#xff0c;主要使用运算放大器、NE555以及一些其他的电阻电容器件来实现。整体电路图如下所示&#xff1a; 产生的三角波如下&#xff1a; 正弦波如下 方波如下&#xff1a; 运算放大器&#xff08;Operational Amplifier&#xff0c;简称OP-AMP&#xff09;是…...

[C/C++]天天酷跑超详细教程-中篇

个人主页&#xff1a;北海 &#x1f390;CSDN新晋作者 &#x1f389;欢迎 &#x1f44d;点赞✍评论⭐收藏✨收录专栏&#xff1a;C/C&#x1f91d;希望作者的文章能对你有所帮助&#xff0c;有不足的地方请在评论区留言指正&#xff0c;大家一起学习交流&#xff01;&#x1f9…...

面试被打脸,数据结构底层都不知道么--回去等通知吧

数据结构之常见的8种数据结构&#xff1a; -数组Array -链表 Linked List -堆 heap -栈 stack -队列 Queue -树 Tree -散列表 Hash -图 Graph 数据结构-链表篇 Linklist定义&#xff1a; -是一种线性表&#xff0c;并不会按线性的顺序存储数据&#xff0c;即逻辑上相邻…...

微服务面试问题小结( 微服务、分布式、MQ、网关、zookeeper、nginx)

什么是微服务&#xff0c;单体架构的优点和缺点&#xff0c;微服务架构的优点和缺点&#xff1f; 单体架构 优点&#xff1a;架构简单&#xff0c;维护成本低缺点&#xff1a;各个模块耦合度太高&#xff0c;当对一个模块进行更新修改时&#xff0c;会影响到其他模块&#xff…...

Vue3全局变量使用

全局变量&#xff08;函数等&#xff09;可以在任意组件内访问&#xff0c;可以当组件间的传值使用。 main.js import ./assets/main.cssimport { createApp } from vue import App from ./App.vueconst app createApp(App); app.config.globalProperties.$global_id10; app.…...

拼多多海量商品数据接口API 商品详情接口 商品价格主图接口

拼多多&#xff0c;作为中国最大的社交电商之一&#xff0c;提供了丰富的商品信息和海量的用户数据。对于广大开发者而言&#xff0c;如何快速、准确地获取这些数据&#xff0c;进而开发出各种创新应用&#xff0c;是他们关心的问题。本文将详细介绍拼多多海量商品数据接口API的…...

结构化日志记录增强网络安全性

日志是一种宝贵的资产&#xff0c;在监视和分析应用程序或组织的 IT 基础结构的整体安全状况和性能方面发挥着至关重要的作用。它们提供系统事件、用户活动、网络流量和应用程序行为的详细记录&#xff0c;从而深入了解潜在威胁或未经授权的访问尝试。虽然组织历来依赖于传统的…...

企业架构LNMP学习笔记5

Nginx&#xff1a; 常见用法&#xff1a; 1&#xff09;web服务器软件 httpd http协议 同类的web服务器软件&#xff1a;apache Nginx&#xff08;俄罗斯&#xff09;IIS&#xff08;微软&#xff09;lighttpd&#xff08;德国&#xff09; 2&#xff09;代理服务器 反向代…...

Idea安装免注册版ChatGPT

文章目录 一、前期准备二、开始使用 一、前期准备 1.准备Idea开发软件并打开&#xff08;VS Code同理&#xff09;! 2.【CtrlAltS】快捷键调出Settings窗口&#xff0c;如图 3.找到NexChatGPT 此插件不需要注册&#xff0c;可以直接使用&#xff08;高级一些的需要会员收费限…...

git操作

一、查看远程分支 使用如下git命令查看所有远程分支&#xff1a; git branch -r 查看远程和本地所有分支&#xff1a; git branch -a 查看本地分支&#xff1a; git branch 在输出结果中&#xff0c;前面带* 的是当前分支。 二、拉取远程分支并创建本地分支 方法一 使用如下…...

9 | 求出不同性别和不同科目的学生平均分数

需求描述:学生成绩分析 背景: 我们有一组学生的成绩数据,其中包括学生的姓名、性别和科目,我们需要分析不同性别和不同科目的学生平均分数。 功能要求: 从数据源中获取学生的成绩数据,包括学生姓名、性别和科目。使用Spark进行数据处理,将学生数据按性别和科目分组。计…...