Android程序設計與實踐
課程設計報告
姓 名: 梁 |
學 號: 2019 |
專 業: 計算機科學與技術 |
項目名稱: 族 跡 |
指導教師: |
課程設計日期: 2021年12月6日至 2021年12月19日 |
|
2021年12月19日
Android程序開發課程設計記錄單
學號 |
|
姓名 |
|
性別 |
|
||
指導教師 |
|
||||||
項目名稱 |
族跡 |
||||||
項目描述 |
了解各民族的風俗習慣,拓展自己的視野。 |
||||||
項目評語 |
|
||||||
分項成績 |
平時成績 |
實踐能力 |
設計報告 |
||||
|
|
|
|||||
總成績 |
|
等級 |
|
目 錄
目錄
第一章 概述
第二章 需求分析
2.1 項目背景
2.2 項目需求
第三章 相關技術
3.1 Android studio介紹
一、應用程序
二、應用程序框架
三、系統運行庫
3.2 關鍵技術研究
第四章 概要設計
4.1 系統體系結構
4.2 用戶界面設計
4.2.1動畫載入界面
4.2.2登錄注冊界面
4.2.3進入系統主首頁界面
4.2.4朋友圈界面
4.2.5“我的”界面
第五章 頁面設計
5.1 系統體系結構
5.2 用戶登錄界面設計
5.3 用戶界面設計
5.3.1主頁界面
5.3.1.1民族服飾頁面
5.3.1.2手工藝品頁面
5.3.1.3傳統建築頁面
5.3.2朋友圈界面
5.3.3“我的”界面
5.3.3.1我的收藏
5.3.3.2我的書友頁面
5.3.3.3我的共享頁面
5.4數據庫表的展現
1. Zhucebiao表:用來存放用戶賬號密碼信息
2. Haoyou表:用來APP里的好友信息
3. tb_tiezi表:用來存放用戶發布的帖子
第六章 詳細設計
6.1 注冊界面模塊
6.2 用戶登錄界面模塊
6.3 用戶主頁面“首頁”
6.3.1首頁跳轉頁面“服飾、工藝、建築”
6.4 朋友圈頁面模塊
6.5 “我的”界面模塊
6.5.1 “我的”界面-我的收藏
6.5.2 “我的”界面-好友管理
6.5.3 “我的”界面-反饋建議
第七章 結論
第一章 概述
近年來,隨着媒體和信息技術的快速發展, 國內外的智能手機發展趨勢越來越好,隨着人們生活水平的提高,人們對於智能手機功能的需求量也相對增加,智能手機的涉及范圍已經布滿全世界, 因為智能手機具有優秀的操作系統、 可自由安裝各類軟件、 完全大屏的全觸屏式操作感這三大特性, 所以完全終結了前幾年的鍵盤式手機。
隨着智能手機的發展, Android 系統也廣泛發展起來,收到用戶普遍歡迎。 Android 系統作為智能手機系統, 因其自由及開放源代碼使得它具有極強的競爭力。2014 第一季度 Android 平台已占所有移動廣告流量來源的 42.8%,首度超越IOS。
本課題要求:設計的族跡APP是一個致力於民族元素的APP,主要針對的是社會上喜愛民族風以及對中華傳統文化充滿興趣的各種人群。 民族風是中華民族文化藝術的瑰寶,而族跡則是為喜愛中國民族傳統文化的大眾提供交流的平台。
族跡APP主要完成的功能:首頁界面(民族服飾、手工藝品、傳統建築、其他)點擊進入相應的界面后,點擊“了解更多”會跳轉一個網址,查看更多的內容。朋友圈(發布朋友圈、好友朋友圈),我的界面(我的收藏、好友管理、反饋建議、關於APP)。
第二章 需求分析
2.1 項目背景
隨着社會的進步,尤其是計算機技術與網絡的發展,人們對於數據傳輸,遠程控制的實時性要求越來越高,這就使得計算機技術的發展越來越面向網絡。現代學校管理無疑成為網絡應用的典型代表,這些年電腦計算機的速度質的提高,成本的下降,IT互聯網大眾趨勢的發展。我們使用電腦的高效率才處理數據信息成為可能。學生學籍管理系統的出現,正是管理人員與信息數據,計算機的進入互動時代的體現。友好的人機交互模式,清晰簡明的圖形界面,高效安全的操作使得我們對成千上萬的的信息的管理得心入手。通過這個系統,可以做到了解信息迅速,科學統計和快速的查詢各個民族的風俗習慣,從而擴展青少年的以及成人的認知能力。毋庸置疑,切實有效的把計算機管理引入學校教務管理中,對於促進學校管理制度,提高學校教學質量與辦學水平有着顯著意義。提高青少年的動手、動腦的能力,為國家的發展奠定基礎。
2.2 項目需求
本項目主要目的是為用戶展示一些有關民族的消息,設計的意義是讓用戶足不出戶的了解到最新資訊。 讓更多的人群了解到中華民族的多樣性,趣味性,價值性,以及傳播性,這就是族跡的意義所在。
對好友管理的操作,如查看、修改、刪除。在該應用的構建中的重點就在數據儲存方面, 通過設計該應用熟練掌握了數據儲存的技術。
項目的色調主要以簡潔為主,更好的使用人們的眼球。界面原型大多采用界面圖形大多采用橢圓輪廓,給用戶的視覺效果顯得不生硬,十分圓潤。整體布局合理符合規定,界面簡單,操作簡易,易於用戶上手,適合年齡范圍廣。
族跡APP的基本控制可以用下圖來進行一個說明:
如圖2-1所示:
圖2-1 族跡APP視圖分布
整個程序基於Android技術開發,准頁面分為首頁、朋友圈、我的三大主頁面。在首頁中可以分別點擊民族服飾、手工藝品、傳統建築顯示相應的圖片和信息。當點擊“朋友圈”的時候,你可以發布查看好友發布的信息,並且你可以發布你的信息。當你點擊“我的”時候,有我的收藏、好友管理、反饋建議、關於App,有什么建議可以在反饋建議中發表你的看法。在好友管理頁面 可以實現添加、查詢、修改、刪除好友。我們繪制了一個管理員操作流程圖,以便更好地傳達我們的意思,提高使用體驗。如圖2-2所示:
圖2-2 開發流程
第三章 相關技術
3.1 Android studio介紹
A2017年6月,英創公司在ESM6802+10.1”LCD的硬件平台上成功運行Android 7.1.1原生操作系統。2017年8月,ESM6802 Android 版可以支持GPIO、串口、以太網、U盤。后續將進一步完善對CAN、SPI、I2C、WIFI、4G等接口的支持。
Google公司專門為開發Android應用程序提供了集成開發環境Android Studio,涵蓋了所有Android應用開發相關的功能。Android應用程序主要使用Java語言編寫,要用到開發工具集SDK(Software Development Kit,提供java編譯工具、Android系統API等,可以直接在Android Studio中下載)。當應用程序中要直接訪問硬件,或者需要提高運行效率時,需要將訪問硬件、復雜邏輯部分使用C/C++實現。要在Android Studio中開發編譯C/C++代碼,需要用到工具集NDK(Native Development Kit,提供C/C++編譯工具、API、打包工具等,可直接在Android Studio中下載)。使用NDK可以將C/C++源碼編譯成動態鏈接庫,供Java調用。由於Java語言要調用C/C++函數需要用到JNI(Java Native Interface)技術,這就要求使用NDK開發C/C++時,C/C++源碼要符合JNI規范要求。
一、應用程序
Android 會同一系列核心應用程序包一起發布,該應用程序包括email客戶端,SMS短消息程序,日歷,地圖,瀏覽器,聯系人管理程序等。所有的應用程序都是使用JAVA語言編寫的。
二、應用程序框架
開發人員也可以完全訪問核心應用程序所使用的API框架。該應用程序的架構設計簡化了組件的重用;任何一個應用程序都可以發布它的功能塊並且任何其它的應用程序都可以使用其所發布的功能塊(不過得遵循框架的安全性限制)。同樣,該應用程序重用機制也使用戶可以方便的替換程序組件。隱藏在每個應用后面的是一系列的服務和系統, 其中包括:
(1)豐富而又可擴展的視圖(Views),可以用來構建應用程序, 它包括列表(lists),網格(grids),文本框(text boxes),按鈕(buttons), 甚至可嵌入的web瀏覽器。
(2)內容提供器(Content Providers)使得應用程序可以訪問另一個應用程序的數據(如聯系人數據庫), 或者共享它們自己的數據。
(3)資源管理器(Resource Manager)提供 非代碼資源的訪問,如本地字符串,圖形,和布局文件( layout files )。
(4)通知管理器 (Notification Manager) 使得應用程序可以在狀態欄中顯示自定義的提示信息。
(5)活動管理器( Activity Manager) 用來管理應用程序生命周期並提供常用的導航回退功能。
三、系統運行庫
開發人員也可以完全訪問核心應用程序所使用的API框架。該應用程序的架構設計簡化了組件的重用;任何一個應用程序都可以發布它的功能塊並且任何其它的應用程序都可以使用其所發布的功能塊(不過得遵循框架的安全性限制)。同樣,該應用程序重用機制也使用戶可以方便的替換程序組件。隱藏在每個應用后面的是一系列的服務和系統, 其中包括;
(1)豐富而又可擴展的視圖(Views),可以用來構建應用程序, 它包括列表(lists),網格(grids),文本框(text boxes),按鈕(buttons), 甚至可嵌入的web瀏覽器。
(2)內容提供器(Content Providers)使得應用程序可以訪問另一個應用程序的數據(如聯系人數據庫), 或者共享它們自己的 數據
(3)資源管理器(Resource Manager)提供 非代碼資源的訪問,如本地字符串,圖形,和布局文件( layout files )。
(4)通知管理器 (Notification Manager) 使得應用程序可以在狀態欄中顯示自定義的提示信息。
(5)活動管理器( Activity Manager) 用來管理應用程序生命周期並提供常用的導航回退功能。
3.2 關鍵技術研究
在安卓系統中,包含有四個基本組件,其中組件 Activity,Content Provider是可見的,而組件 Service 和 BroadcastReceiver 是不可見的,只會默默的在后台運行。
(1)Service
通過字面意思我們就可以知道 Service 是一種后代的服務程序,在通常情況下他是不會與用戶有聯系的,所以我們不需要對其設計一個可視化界面,只要它能夠實現功能就可以了,他的任務是對可見的 Activity 以及一些數據源進行更新。而且它必須在 Android Manifest.xml 配置文件注冊,只有這樣才能實現其功能,為了實現這個,我們可以通過 startService()來實現啟動一個 Service 的目的。
(2)Activity
在安卓系統中,程序的顯示是依靠 Activity 實現的,需要通過 Views 來構建 UI 來達到顯示信息的目的。我們經常把他做成一個用戶的可視化界面。在安卓系統中的軟件程序在一般情況下不是通過僅僅一個 Activity 組成的,而是需要多個才行。比如一個應用程序需要一個 Activity 來進行顯示聯系人,需要另外一個來編寫信息,還需要一個來查看信息以及對應用程序進行修改。雖然一個程序應用了多個 Activity,但是每一個都是相對獨立的。雖然單獨每一個是獨立的但是多個就可以組成了棧,我們將現在活躍的放在棧頂。對於安卓系統來說每一個 Activity 的生命周期受到系統的制約。
(3)Broadcast Receiver
與 Service 類似,我們通過字面意思就知道 Broadcast Receiver 的作用為廣播接收器,相比較處理組件級別系統響應的事件處理機制,Broadcast Receiver的處理對象為系統級別的,尤其是在通過 Intent 來啟動一個程序組件的時候,我們可以通過廣播事件處理機制來監聽和響應。它是對事件驅動程序進行處理的理想方式。
(4)Content Provider
當我們需要進行數據的保存以及檢索的時候,Content Provider 就可以發揮它的作用了,通過它我們可以實現程序間的數據互訪,如果我們的權限足夠高的話,我們可以比較方便的通過 Content Provider 訪問很多數據,與此同時為了實現共享數據,我們也可以自己來定義Content Provider,這樣也能實現訪問功能。
第四章 概要設計
4.1 系統體系結構
整個系統由五大界面組成,主要分為登錄界面,注冊界面,首頁,朋友圈,“我的”五大頁面。
圖4.1 系統總體流程圖
4.2 用戶界面設計
4.2.1動畫載入界面
動畫載入界面是點擊進入遺跡APP后載入軟件的動畫頁面。
4.2.2登錄注冊界面
如果用戶沒有賬號,點擊“沒有賬號,前往注冊”用戶在注冊頁面進行注冊賬號,注冊完成后,點擊“已有帳號,前往登錄”,通過賬號密碼登錄到遺跡APP。
圖4.2.2 用戶登陸注冊錄界面
4.2.3進入系統主首頁界面
用戶通過賬號和密碼登錄進入到首頁,該頁面包括了民族服飾、手工藝品、傳統建築三個按鈕,點擊進入相應的信息界面。還有比較流行、熱度比較高的民族信息。
圖4-2.3 族跡APP主頁面
4.2.4朋友圈界面
當你進入到朋友圈界面,查看朋友所發表的信息,你也可以點擊“發布朋友圈”按鈕,進入到編輯狀態,發表你此刻的心情和想說的話。以便於讓你的朋友知道,你的狀態。
圖4.2.4 族跡APP“我的”界面
4.2.5“我的”界面
在此界面下有我的關注、我的點贊、我的發布、@我的、我的收藏、好友管理、反饋建議、關於APP等按鈕。點擊我的收藏按鈕時,會進入你所收藏的民族事跡,以便於你下次想看的時候可以隨時查看。點擊好友管理界面的時候,你可以進行對你的好友進行添加、修改、刪除、查詢。如果你有好的想法或者對與APP不滿再或者朋友發布的信息不太合法的時候,你可以進入到反饋建議界面,進行發表你的評論。如果你對遺跡APP不太了解的話,點擊關於APP按鈕,查看用法。
第五章 頁面設計
5.1 系統體系結構
整個系統由fragment標簽創建出來的三個頁面,分別是首頁、朋友圈、“我的”頁面。並且在打開app后會首先進入用戶登錄頁面,如果你沒有賬號,點擊“還沒有賬號,點擊注冊”進行登錄。注冊完之后,輸入賬號和密碼,進入首頁。如圖4-1-1所示
圖5-1-1 族跡app框架結構
5.2 用戶登錄界面設計
用戶打開app后如圖5-2-1、圖5-2-2進入到用戶登錄頁面,用戶實現登錄以及注冊。
圖5-2-1登錄頁面
圖5-2-2用戶注冊頁面
5.3 用戶界面設計
該app由bottom navigation activity創建而成,分為三個fragment頁面,分別是主頁頁面、借閱界面以及個人中心頁面組成,如圖所示。
圖5-2-3主頁頁面 圖5-2-4 朋友圈界面 圖5-2-5“我的”頁面
5.3.1主頁界面
主頁頁面主要由民族服飾,手工藝以及傳統建築頁面組成。
5.3.1.1民族服飾頁面
民族服飾頁面主要查看不同民族服飾的各種介紹和相關信息。
圖5-3-1民族服飾頁面
5.3.1.2手工藝品頁面
手工藝品頁面主要查看不同民族服飾的各種介紹和相關信息。
圖5-3-2手工藝品頁面
5.3.1.3傳統建築頁面
傳統建築頁面主要查看不同民族服飾的各種介紹和相關信息。
圖5-3-3傳統建築頁面
5.3.2朋友圈界面
朋友圈頁面主要分享和交流功能,如圖所示。
圖5-3-4朋友圈和發布朋友圈頁面
5.3.3“我的”界面
個人中心頁面包含四個頁面,分別是我的收藏、好友管理以及反饋建議頁面。
5.3.3.1我的收藏
我的收藏頁面主要展現我在APP里喜歡的東西。如圖所示。
圖5-3-5我的收藏頁面
5.3.3.2我的書友頁面
好友管理頁面主要管理該app上的好友。如圖所示。
圖5-3-6好友管理頁面
5.3.3.3我的共享頁面
反饋建議頁面主要展現對於APP的意見反饋。如圖所示。
圖5-3-7反饋建議頁面
5.4數據庫表的展現
- zhucebiao表:用來存放用戶賬號密碼信息
圖5-4-1賬號密碼表
- haoyou表:用來APP里的好友信息
圖5-4-2好友管理表
- pengyouquan表:用來存放用戶發布的帖子
圖5-4-3朋友圈
第六章 詳細設計
6.1 注冊界面模塊
Main2Activity代碼如下:
public class Main2Activity extends AppCompatActivity {
private EditText et1,et2;
String s1;
String s2;
MyHelper myHelper;
ToggleButton toggleButton;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main2);
myHelper=new MyHelper(this);
et1=(EditText) findViewById(R.id.zhucezhanghaoText);
et2=(EditText) findViewById(R.id.zhucemimaText2);
toggleButton = (ToggleButton) findViewById(R.id.toggleButton);
toggleButton.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if(isChecked){
//如果選中,顯示密碼
et2.setTransformationMethod(HideReturnsTransformationMethod.getInstance());
}else{
//否則隱藏密碼
et2.setTransformationMethod(PasswordTransformationMethod.getInstance());
}
et2.setSelection(et2.length());
}
});
}
public void zhucehao(View view){
add();
}
public void add(){
// Toast.makeText(Main2Activity.this, "注冊成功,請返回登錄", Toast.LENGTH_SHORT).show();
s1=et1.getText().toString();
s2=et2.getText().toString();
SQLiteDatabase db = myHelper.getWritableDatabase();
ContentValues values = new ContentValues();
values.put("zhanghao",s1);
values.put("mima",s2);
db.insert("zhucebiao",null,values);
db.close();
Toast.makeText(Main2Activity.this, "注冊成功,請返回登錄", Toast.LENGTH_SHORT).show();
}
public void fanhuidenglu(View view) {
Intent intent=new Intent(Main2Activity.this,MainActivity.class);
startActivity(intent);
}
}
6.2 用戶登錄界面模塊
MainActivity .java代碼如下:
private void init() {
public class MainActivity extends AppCompatActivity{
private EditText et1,et2;
MyHelper myHelper;
ToggleButton toggleButton;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
et1=findViewById(R.id.dengluzhanghaoText);
et2=findViewById(R.id.denglumimaText2);
myHelper=new MyHelper(this);
toggleButton = (ToggleButton) findViewById(R.id.toggleButton);
toggleButton.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if(isChecked){
//如果選中,顯示密碼
et2.setTransformationMethod(HideReturnsTransformationMethod.getInstance());
}else{
//否則隱藏密碼
et2.setTransformationMethod(PasswordTransformationMethod.getInstance());
}
et2.setSelection(et2.length());
}
});
}
public void qzhuce(View view) {
Intent intent=new Intent(MainActivity.this,MainActivity.class);
startActivity(intent);
}
public void denglu(View view) {
String s1 = et1.getText().toString();
String s2 = et2.getText().toString();
SQLiteDatabase db = myHelper.getWritableDatabase();
Cursor cursor = db.query("zhucebiao", null, null, null, null, null, null);
boolean numkey = false;
// Toast.makeText(MainActivity.this, cursor.getCount()+"", Toast.LENGTH_SHORT).show();
for (cursor.moveToFirst();!cursor.isAfterLast();cursor.moveToNext()) {
String num = cursor.getString(cursor.getColumnIndex("zhanghao"));
String key = cursor.getString(cursor.getColumnIndex("mima"));
if (s1.equals(num.toString()) && s2.equals(key.toString())) {
numkey = true;
break;
}
}
db.close();
if (numkey) {
Toast.makeText(MainActivity.this, "登錄成功", Toast.LENGTH_SHORT).show();
Intent intent = new Intent();
intent.setClass(MainActivity.this, Main3Activity.class);
startActivity(intent);
} else {
Toast.makeText(MainActivity.this, "賬號密碼不匹配", Toast.LENGTH_SHORT).show();
}
}
}
6.3 用戶主頁面“首頁”
Main3Activity代碼如下:
public class Main3Activity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main3);
BottomNavigationView navView = findViewById(R.id.nav_view);
// Passing each menu ID as a set of Ids because each
// menu should be considered as top level destinations.
AppBarConfiguration appBarConfiguration = new AppBarConfiguration.Builder(
)
.build();
NavController navController = Navigation.findNavController(this, R.id.nav_host_fragment);
NavigationUI.setupActionBarWithNavController(this, navController, appBarConfiguration);
NavigationUI.setupWithNavController(navView, navController);
navView.setOnNavigationItemSelectedListener(item -> {
if (item.getItemId() == R.id.main) {
navController.navigate(R.id.main_fragment);
} else if (item.getItemId() == R.id.dashboard) {
navController.navigate(R.id.dashboard_fragment);
} else if (item.getItemId() == R.id.notification) {
navController.navigate(R.id.notification_fagment);
}
return false;
});
}
public void chuantong(View view) {
Intent intent=new Intent(Main3Activity.this, chuantong.class);
startActivity(intent);
}
public void shougong(View view) {
Intent intent=new Intent(Main3Activity.this,shougong.class);
startActivity(intent);
}
public void minzu(View view) {
Intent intent=new Intent(Main3Activity.this,minzu.class);
startActivity(intent);
}
}
6.3.1首頁跳轉頁面“服飾、工藝、建築”
minzu .java代碼如下:
public class minzu extends AppCompatActivity {
Button Btn1,Btn2,Btn3;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_home_minzu);
Btn1=findViewById(R.id.btn_1);
final Uri uri1=Uri.parse("https://baike.baidu.com/item/%E8%92%99%E5%8F%A4%E6%97%8F%E4%BC%A0%E7%BB%9F%E6%9C%8D%E9%A5%B0");
Btn1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent=new Intent(Intent.ACTION_VIEW,uri1);
startActivity(intent);
}
});
Btn2=findViewById(R.id.btn_2);
final Uri uri2=Uri.parse("https://baike.baidu.com/item/%E8%97%8F%E6%97%8F%E6%9C%8D%E9%A5%B0/3498486");
Btn2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent=new Intent(Intent.ACTION_VIEW,uri2);
startActivity(intent);
}
});
Btn3=findViewById(R.id.btn_3);
final Uri uri3=Uri.parse("https://baike.baidu.com/item/%E8%8B%97%E6%97%8F%E6%9C%8D%E9%A5%B0");
Btn3.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent=new Intent(Intent.ACTION_VIEW,uri3);
startActivity(intent);
}
});
}
}
6.4 朋友圈頁面模塊
Pengyouquan.Java代碼如下:
public class pengyouquan extends AppCompatActivity implements View.OnClickListener {
MyHelper myHelper;
private EditText mEtName, mEtPhone;
private TextView mTvShow;
private Button mBtnAdd, mBtnQuery, mBtnUpdate, mBtnDelete;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_pengyouquan);
myHelper = new MyHelper(this);
mEtName = (EditText) findViewById(R.id.et_name);
mEtPhone = (EditText) findViewById(R.id.et_phone);
mTvShow = (TextView) findViewById(R.id.tv_show);
mBtnAdd = (Button) findViewById(R.id.btn_add);
mBtnQuery = (Button) findViewById(R.id.btn_query);
mBtnUpdate = (Button) findViewById(R.id.btn_update);
mBtnDelete = (Button) findViewById(R.id.btn_delete);
mBtnAdd.setOnClickListener(this);
mBtnQuery.setOnClickListener(this);
mBtnUpdate.setOnClickListener(this);
mBtnDelete.setOnClickListener(this);
}
@Override
public void onClick(View v) {
String phone;
SQLiteDatabase db;
ContentValues values;
switch (v.getId()) {
case R.id.btn_add:
phone = mEtPhone.getText().toString();
db = myHelper.getWritableDatabase();
values = new ContentValues();
values.put("phone", phone);
db.insert("pengyouquan", null, values);
Toast.makeText(this, "發布成功", Toast.LENGTH_SHORT).show();
db.close();
break;
case R.id.btn_query:
db = myHelper.getReadableDatabase();
Cursor cursor = db.query("pengyouquan", null, null, null, null, null, null);
if (cursor.getCount() == 0) {
mTvShow.setText("");
Toast.makeText(this, "你沒有發布朋友圈", Toast.LENGTH_SHORT).show();
} else {
cursor.moveToFirst();
mTvShow.setText( "你發布的內容是:" + cursor.getString(2));
}
while (cursor.moveToNext()) {
mTvShow.append("\n" + "你發布的內容是:" + cursor.getString(2));
}
cursor.close();
db.close();
break;
case R.id.btn_update:
db = myHelper.getWritableDatabase();
values = new ContentValues();
values.put("phone", phone = mEtPhone.getText().toString());
db.update("pengyouquan", values, "name=?", new String[]{mEtName.getText().toString()});
Toast.makeText(this, "修改成功", Toast.LENGTH_SHORT).show();
db.close();
break;
case R.id.btn_delete:
db = myHelper.getWritableDatabase();
db.delete("pengyouquan", null, null);
Toast.makeText(this, "刪除成功", Toast.LENGTH_SHORT).show();
mTvShow.setText("");
db.close();
break;
}
}
}
6.5 “我的”界面模塊
Main3Activity.java代碼如下:
public class Main3Activity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main3);
BottomNavigationView navView = findViewById(R.id.nav_view);
// Passing each menu ID as a set of Ids because each
// menu should be considered as top level destinations.
AppBarConfiguration appBarConfiguration = new AppBarConfiguration.Builder(
)
.build();
NavController navController = Navigation.findNavController(this, R.id.nav_host_fragment);
NavigationUI.setupActionBarWithNavController(this, navController, appBarConfiguration);
NavigationUI.setupWithNavController(navView, navController);
navView.setOnNavigationItemSelectedListener(item -> {
if (item.getItemId() == R.id.main) {
navController.navigate(R.id.main_fragment);
} else if (item.getItemId() == R.id.dashboard) {
navController.navigate(R.id.dashboard_fragment);
} else if (item.getItemId() == R.id.notification) {
navController.navigate(R.id.notification_fagment);
}
return false;
});
}
public void jiahaoyou(View view) {
Intent intent=new Intent(Main3Activity.this,Jiahaoyou.class);
startActivity(intent);
}
public void qushoucang(View view) {
Intent intent=new Intent(Main3Activity.this,ShujuActivity.class);
startActivity(intent);
}
public void fankui(View view) {
Intent intent=new Intent(Main3Activity.this,fankui.class);
startActivity(intent);
}
}
6.5.1 “我的”界面-我的收藏
ShujuActivity.Java代碼如下:
public class ShujuActivity extends AppCompatActivity {
private List<Shuju> consList=new ArrayList();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_shuju);
initData();
ShujuAdapter adapter=new ShujuAdapter(ShujuActivity.this,R.layout.item,consList);
ListView listView=(ListView) findViewById(R.id.listView);
listView.setAdapter(adapter);
}
private void initData(){
Shuju gongju = new Shuju(1,"手工藝工具","工具各種各樣,功能各不同", R.drawable.tupiavnfive);
consList.add(gongju);
Shuju pingzi = new Shuju(1,"瓶身彩繪","精美的畫像出自匠人之手", R.drawable.pingiz);
consList.add(pingzi);
Shuju yifu = new Shuju(1,"古代衣裳","每一件古時留下的衣物都是財產", R.drawable.yifu);
consList.add(yifu);
Shuju niren = new Shuju(1,"捏泥人","一個個栩栩如生的正在誕生", R.drawable.niren);
consList.add(niren);
Shuju wudao = new Shuju(1,"民族舞","56個民族每個民族有每個民族的舞蹈", R.drawable.wudao);
consList.add(wudao);
Shuju laoren = new Shuju(1,"民間高人","高人大多存在於民間", R.drawable.laoren);
consList.add(laoren);
Shuju fangzi = new Shuju(1,"雄偉建築","古今中外的雄偉建築有很多很多", R.drawable.fangzi);
consList.add(fangzi);
Shuju shanzi = new Shuju(1,"民族風情","山好水好人美建築宏偉", R.drawable.shanzi);
consList.add(shanzi);
}
}
6.5.2 “我的”界面-好友管理
Jiahaoyou.java代碼如下:
public class Jiahaoyou extends AppCompatActivity implements View.OnClickListener {
MyHelper myHelper;
private EditText mEtName, mEtPhone;
private TextView mTvShow;
private Button mBtnAdd, mBtnQuery, mBtnUpdate, mBtnDelete;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_jiahaoyou);
myHelper = new MyHelper(this);
mEtName = (EditText) findViewById(R.id.et_name);
mEtPhone = (EditText) findViewById(R.id.et_phone);
mTvShow = (TextView) findViewById(R.id.tv_show);
mBtnAdd = (Button) findViewById(R.id.btn_add);
mBtnQuery = (Button) findViewById(R.id.btn_query);
mBtnUpdate = (Button) findViewById(R.id.btn_update);
mBtnDelete = (Button) findViewById(R.id.btn_delete);
mBtnAdd.setOnClickListener(this);
mBtnQuery.setOnClickListener(this);
mBtnUpdate.setOnClickListener(this);
mBtnDelete.setOnClickListener(this);
}
@Override
public void onClick(View v) {
String name, phone;
SQLiteDatabase db;
ContentValues values;
switch (v.getId()) {
case R.id.btn_add:
name = mEtName.getText().toString();
phone = mEtPhone.getText().toString();
db = myHelper.getWritableDatabase();
values = new ContentValues();
values.put("name", name);
values.put("phone", phone);
db.insert("haoyou", null, values);
Toast.makeText(this, "添加成功", Toast.LENGTH_SHORT).show();
db.close();
break;
case R.id.btn_query:
db = myHelper.getReadableDatabase();
Cursor cursor = db.query("haoyou", null, null, null, null, null, null);
if (cursor.getCount() == 0) {
mTvShow.setText("");
Toast.makeText(this, "無記錄", Toast.LENGTH_SHORT).show();
} else {
cursor.moveToFirst();
mTvShow.setText("好友名:" + cursor.getString(1) + "賬號:" + cursor.getString(2));
}
while (cursor.moveToNext()) {
mTvShow.append("\n" + "好友名:" + cursor.getString(1) + "賬號:" + cursor.getString(2));
}
cursor.close();
db.close();
break;
case R.id.btn_update:
db = myHelper.getWritableDatabase();
values = new ContentValues();
values.put("phone", phone = mEtPhone.getText().toString());
db.update("haoyou", values, "name=?", new String[]{mEtName.getText().toString()});
Toast.makeText(this, "修改成功", Toast.LENGTH_SHORT).show();
db.close();
break;
case R.id.btn_delete:
db = myHelper.getWritableDatabase();
db.delete("haoyou", null, null);
Toast.makeText(this, "刪除成功", Toast.LENGTH_SHORT).show();
mTvShow.setText("");
db.close();
break;
}
}
}
6.5.3 “我的”界面-反饋建議
Fankui.java代碼如下:
public class fankui extends AppCompatActivity {
private Button button;
private EditText editText;
private String content;
public void initView() {
button = findViewById(R.id.ok_button);
editText = findViewById(R.id.edit_et);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_fankui);
initView();
initControl();
}
private void initControl() {
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
content = editText.getText().toString();
if (!TextUtils.isEmpty(content)) {
// post網絡請求
Toast.makeText(fankui.this, "提交成功!", Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(fankui.this, "輸入不能為空", Toast.LENGTH_SHORT).show();
}
}
});
}
}ublic class MD5Utils {
第七章 結論
本次作業,是對我潛力的進一步鍛煉,也是一種考驗,在實習中我學到了許多新的知識。
一個項目的開發過程並不總是一帆風順的,其中難免會遇到困難,使編程無法繼續下去。例如在使用Fragment編寫底部導航欄后,當前頁面Java的編譯的難點,數據庫連接和頁面跳轉的問題。
針對程序設計過程中遇到的困難,我們采取了積極有效的解決方法:團隊討論、上網搜索及向有經驗的人員請教。發現程序是在獲取EditText輸入的值時出現了錯誤,導致程序功能無法實現。最終經過反復的調試及測試,解決了上述的難點,實現了數據庫連接、頁面跳轉等功能。
我們在困難中又學到了很多知識並把它們運用到了項目中,使其布局更加好看,功能更加完善。
總之,本次的Android開發課程設計收獲很大,我不僅鞏固了之前上課學到的知識,而且在開發過程中遇到問題解決問題,在這個過程中又學到了很多的新東西,可以說是受益匪淺。