欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Android實現(xiàn)志愿者系統(tǒng)詳細(xì)步驟與代碼

 更新時間:2023年02月10日 08:35:07   作者:振華OPPO  
這篇文章主要介紹了Android實現(xiàn)志愿者系統(tǒng),本系統(tǒng)采用MVC架構(gòu)設(shè)計,SQLite數(shù)據(jù)表有用戶表、成員表和活動表,有十多個Activity頁面。打開應(yīng)用,進(jìn)入歡迎界面,3s后跳轉(zhuǎn)登錄界面,用戶先注冊賬號,登錄成功后進(jìn)入主界面

一、項目概述

本系統(tǒng)采用MVC架構(gòu)設(shè)計,SQLite數(shù)據(jù)表有用戶表、成員表和活動表,有十多個Activity頁面。打開應(yīng)用,進(jìn)入歡迎界面,3s后跳轉(zhuǎn)登錄界面,用戶先注冊賬號,登錄成功后進(jìn)入主界面。主界面可以查看我的活動,修改和刪除活動,還能發(fā)布活動。可以添加和刪除成員、還能查看我的成員信息??梢圆榭春托薷膫€人信息。底部導(dǎo)航欄和頂部菜單欄,菜單欄可以打開背景音樂、查詢位置和查詢時間。應(yīng)用還制作了鐘表顯示的小組件,功能非常豐富。

二、主要技術(shù)

主要應(yīng)用的技術(shù)如下:

Fragment碎片Service后臺服務(wù)SharedPreferencesMediaPlayer
HandlerSQLiteDatabaseBundleRecyclerView
Thread多線程Menu菜單欄百度地圖Widget組件開發(fā)

本項目知識點還是很多的,涉及到Service后臺服務(wù),百度地圖定位功能,Widget桌面組件開發(fā)等。

三、開發(fā)環(huán)境

開發(fā)環(huán)境依舊是在Android Studio4.2.1,只要你的AS是近兩年從官網(wǎng)下載的,都是可以滿足的。日期版本是比4.2.1高的。

四、詳細(xì)設(shè)計

1、基礎(chǔ)Activity

首先,講下歡迎、注冊和登錄,這三者作為App不可或缺的內(nèi)容,同時也是邏輯細(xì)節(jié)和UI設(shè)計最需要注意的地方,做完容易,做好不容易。做過這么多應(yīng)用了,不同樣式的登錄界面也接觸了20來種。本次注冊登錄還是很喜歡的風(fēng)格,很豐富的提示信息,保證賬號的唯一性。記住密碼,方便用戶,注冊完也連帶賬號和密碼一起傳回來。Layout的Code過于簡單,看下Design視圖。

再來講MainActivity,奠定應(yīng)用基調(diào)的Activity,至關(guān)重要,你要將應(yīng)用的所有功能呈現(xiàn)在這里,底部導(dǎo)航欄采用BottomNavigationView,頂部Menu菜單欄、導(dǎo)航欄以及主體部分都是系統(tǒng)功能。按鈕都設(shè)置了漸變色的background,按下變色。導(dǎo)航欄有圖標(biāo),后面的各個輸入框都有圖標(biāo)。

MainActivity的代碼很多,因為它負(fù)責(zé)了后臺音樂、位置查詢、活動的查看修改刪除發(fā)布等頁面跳轉(zhuǎn),查看刪除添加成員的跳轉(zhuǎn),以及個人信息的修改等。這里就一起看下導(dǎo)航欄的監(jiān)聽器吧,和Onclick方法很相似,只能說接口方法好像都如此。

// 底部導(dǎo)航欄監(jiān)聽器
  bottomNavigationView.setOnNavigationItemSelectedListener(new BottomNavigationView.OnNavigationItemSelectedListener() {
      @Override
      public boolean onNavigationItemSelected(MenuItem item) {
          switch (item.getItemId()) {
              case R.id.my_member:
                  Intent intentMember = new Intent(MainActivity.this, ViewMember.class);
                  startActivity(intentMember);
                  return true;
              case R.id.release_activity:
                  Intent intentActivity = new Intent(MainActivity.this, ReleaseActivity.class);
                  startActivity(intentActivity);
                  return true;
              case R.id.personal_information:
                  Intent intentPersonal = new Intent(MainActivity.this, PersonalActivity.class);
                  startActivity(intentPersonal);
                  return true;
          }
          return false;
      }
  });

2、活動信息

先看下Activity的Bean類的屬性and方法。

// 我的活動實體類
public class MyActivity {
    private String name;
    private String number;
    private String beginDate;
    private String endDate;
    public MyActivity() {
    }
    public MyActivity(String name, String number, String beginDate, String endDate) {
        this.name = name;
        this.number = number;
        this.beginDate = beginDate;
        this.endDate = endDate;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getNumber() {
        return number;
    }
    public void setNumber(String number) {
        this.number = number;
    }
   public String getBeginDate() {
        return beginDate;
   }
   public void setBeginDate() {
        this.beginDate = beginDate;
   }
   public String getEndDate() {
        return endDate;
   }
   public void setEndDate() {
        this.endDate = endDate;
   }
}

再來看下數(shù)據(jù)庫中Activity表,你會發(fā)現(xiàn)數(shù)據(jù)表的字段名就是Bean的屬性名。

   // 活動表建表語句
   public static final String CREATE_MYACTIVITY = "create table MyActivity (" +
           "name varchar(20) primary key," +
           "number varchar(20)," +
           "beginDate varchar(20)," +
           "endDate varchar(20))";

建立好表后,在ActivityDao中寫好對活動表的增刪改查方法吧,后面只需要創(chuàng)建ActivityDao對象就可以操作活動表了,不需要每次都寫一遍。

	// 添加我的活動
    public void insertMyActivity(MyActivity myActivity) {
        // 創(chuàng)建ContentValues對象
        ContentValues values = new ContentValues();
        // 向該對象中插入鍵值對
        values.put("name", myActivity.getName());
        values.put("number", myActivity.getNumber());
        values.put("beginDate", myActivity.getBeginDate());
        values.put("endDate", myActivity.getEndDate());
        // 通過insert()方法插入數(shù)據(jù)
        sqLiteDatabase.insert(MyDBOpenHelper.TABLE_MYACTIVITY, null, values);
    }
    // 刪除我的活動
    public void deleteMyActivity(MyActivity myActivity) {
        sqLiteDatabase.delete(MyDBOpenHelper.TABLE_MYACTIVITY, "name = ?", new String[]{myActivity.getName()});
    }
    // 修改我的活動
    public void updateMyActivity(MyActivity myActivity) {
        ContentValues values = new ContentValues();
        values.put("name", myActivity.getName());
        values.put("number", myActivity.getNumber());
        values.put("beginDate", myActivity.getBeginDate());
        values.put("endDate", myActivity.getEndDate());
        sqLiteDatabase.update(MyDBOpenHelper.TABLE_MYACTIVITY, values, "name = ?", new String[]{myActivity.getName()});
    }
    // 查詢我的活動
    public ArrayList<MyActivity> queryMyActivity() {
        ArrayList<MyActivity> arrayList = new ArrayList<>();
        Cursor cursor = sqLiteDatabase.query(MyDBOpenHelper.TABLE_MYACTIVITY, null, null, null, null, null, null);
        if (cursor.moveToFirst()) {
            do {
                String name = cursor.getString(cursor.getColumnIndex("name"));
                String number = cursor.getString(cursor.getColumnIndex("number"));
                String beginDate = cursor.getString(cursor.getColumnIndex("beginDate"));
                String endDate = cursor.getString(cursor.getColumnIndex("endDate"));
                MyActivity myActivity = new MyActivity(name, number, beginDate, endDate);
                arrayList.add(myActivity);
            } while (cursor.moveToNext());
        }
        cursor.close();
        return arrayList;
    }
    // 根據(jù)名稱查詢我的活動
    public MyActivity queryByName(String activityName) {
        Cursor cursor = sqLiteDatabase.query(MyDBOpenHelper.TABLE_MYACTIVITY, null, null, null, null, null, null);
        if (cursor.moveToFirst()) {
            do {
                // 遍歷Cursor對象,取出數(shù)據(jù)比對
                String name = cursor.getString(cursor.getColumnIndex("name"));
                if (activityName.equals(name)) {
                    String number = cursor.getString(cursor.getColumnIndex("number"));
                    String beginDate = cursor.getString(cursor.getColumnIndex("beginDate"));
                    String endDate = cursor.getString(cursor.getColumnIndex("endDate"));
                    MyActivity myActivity = new MyActivity(name, number, beginDate, endDate);
                    cursor.close();
                    return myActivity;
                }
            } while (cursor.moveToNext());
        }
        cursor.close();
        return null;
    }

3、成員信息

先來看下成員類的屬性和方法:

// 成員實體類
public class Member {
    private String id;
    private String name;
    private String age;
    private String phone;
    public Member() {
    }
    public Member(String id, String name, String age, String phone) {
        this.id = id;
        this.name = name;
        this.age = age;
        this.phone = phone;
    }
    public String getId() {
        return id;
    }
    public void setId(String id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getAge() {
        return age;
    }
    public void setAge(String age) {
        this.age = age;
    }
    public String getPhone() {
        return phone;
    }
    public void setPhone(String phone) {
        this.phone = phone;
    }
}

再寫建表語句,SQL語法熟練的話,這些都是基操了,沒什么內(nèi)容。

    // 成員表建表語句
    public static final String CREATE_MEMBER = "create table Member (" +
            "id varchar(20) primary key," +
            "name varchar(20)," +
            "age varchar(20)," +
            "phone varchar(20))";

最后,還是寫MemberDao,對用戶表的增刪改查封裝好。

	// 添加我的成員
    public void insertMember(Member member) {
        // 創(chuàng)建ContentValues對象
        ContentValues values = new ContentValues();
        // 向該對象中插入鍵值對
        values.put("id", member.getId());
        values.put("name", member.getName());
        values.put("age", member.getAge());
        values.put("phone", member.getPhone());
        // 通過insert()方法插入數(shù)據(jù)
        sqLiteDatabase.insert(MyDBOpenHelper.TABLE_MEMBER, null, values);
    }
    // 刪除我的成員
    public void deleteMember(Member member) {
        sqLiteDatabase.delete(MyDBOpenHelper.TABLE_MEMBER, "id = ?", new String[]{member.getId()});
    }
    // 修改我的成員
    public void updateMember(Member member) {
        ContentValues values = new ContentValues();
        values.put("id", member.getId());
        values.put("name", member.getName());
        values.put("age", member.getAge());
        values.put("phone", member.getPhone());
        sqLiteDatabase.update(MyDBOpenHelper.TABLE_MEMBER, values, "id = ?", new String[]{member.getId()});
    }
    // 查詢我的成員
    public ArrayList<Member> queryMember() {
        ArrayList<Member> arrayList = new ArrayList<>();
        Cursor cursor = sqLiteDatabase.query(MyDBOpenHelper.TABLE_MEMBER, null, null, null, null, null, null);
        if (cursor.moveToFirst()) {
            do {
                String id = cursor.getString(cursor.getColumnIndex("id"));
                String name = cursor.getString(cursor.getColumnIndex("name"));
                String age = cursor.getString(cursor.getColumnIndex("age"));
                String phone = cursor.getString(cursor.getColumnIndex("phone"));
                Member member = new Member(id, name, age, phone);
                arrayList.add(member);
            } while (cursor.moveToNext());
        }
        cursor.close();
        return arrayList;
    }
    // 根據(jù)編號查詢成員
    public Member queryById(String memberId) {
        Cursor cursor = sqLiteDatabase.query(MyDBOpenHelper.TABLE_MEMBER, null, null, null, null, null, null);
        if (cursor.moveToFirst()) {
            do {
                // 遍歷Cursor對象,取出數(shù)據(jù)比對
                String id = cursor.getString(cursor.getColumnIndex("id"));
                if (memberId.equals(id)) {
                    String name = cursor.getString(cursor.getColumnIndex("name"));
                    String age = cursor.getString(cursor.getColumnIndex("age"));
                    String phone = cursor.getString(cursor.getColumnIndex("phone"));
                    Member member = new Member(id, name, age, phone);
                    cursor.close();
                    return member;
                }
            } while (cursor.moveToNext());
        }
        cursor.close();
        return null;
    }

4、百度地圖

首先來看下我引入百度地圖定位功能的過程。創(chuàng)建libs文件夾,然后拖拽BaiduLBS的jar包進(jìn)去,然后Add as Library即可。

在AndroidManifest.xml中添加上meta-data標(biāo)簽和Service標(biāo)簽,一個是api_key,還有一個是location的服務(wù)。

        <meta-data
            android:name="com.baidu.lbsapi.API_KEY"
            android:value="@string/api_key" />
        <service
            android:name="com.baidu.location.f"
            android:enabled="true"
            android:process=":remote" />

在MapActivity中定義并配置地圖的參數(shù)信息,然后初始化當(dāng)前位置并顯示,因為模擬器的經(jīng)緯度信息是不通過網(wǎng)絡(luò)或者GPS獲取的,所以絕大多數(shù)時候是不能用來使用百度地圖的,我們的坐標(biāo)也都是手動輸入顯示即可,想使用還是要用真機(jī),況且大家也不是做什么科研項目,不需要到室外定位。

        mapView = findViewById(R.id.map_view);
        baiduMap = mapView.getMap();// 獲取到地圖
        baiduMap.setMyLocationEnabled(true);
        initMap();     // 設(shè)置地圖放大的倍數(shù)
        configureMap();// 設(shè)置定位的參數(shù)
        initLocation();// 初始化位置

5、Widget組件

Widget組件是最近才學(xué)習(xí)的內(nèi)容,發(fā)現(xiàn)平時手機(jī)應(yīng)用對Widget用的很少,不過作為Android開發(fā)的知識,有就了解一下不是壞事。為系統(tǒng)制作了一個日期顯示的Widget桌面組件,可以在活動列表中拖到模擬器桌面上。后面運行時候會演示打開組件的方法。

<?xml version="1.0" encoding="utf-8"?>
<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"
    android:initialKeyguardLayout="@layout/my_app_widget"
    android:initialLayout="@layout/my_app_widget"
    android:minWidth="150dp"
    android:minHeight="100dp"
    android:previewImage="@drawable/example_appwidget_preview"
    android:resizeMode="horizontal|vertical"
    android:updatePeriodMillis="86400000"
    android:widgetCategory="home_screen"></appwidget-provider>

長按桌面,跳出小組件,然后選擇志愿者系統(tǒng)的組件,拖拽到桌面上即可。

五、運行演示

視頻鏈接

Android Studio實現(xiàn)志愿者系統(tǒng)

到此這篇關(guān)于Android實現(xiàn)志愿者系統(tǒng)詳細(xì)步驟與代碼的文章就介紹到這了,更多相關(guān)Android志愿者系統(tǒng)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評論