五月天青色头像情侣网名,国产亚洲av片在线观看18女人,黑人巨茎大战俄罗斯美女,扒下她的小内裤打屁股

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

安卓APP源碼和設(shè)計報告——個人通訊錄

2022-12-11 22:49 作者:ChatGPT云炬學(xué)長  | 我要投稿

摘 要

隨著移動設(shè)備制造技術(shù)和移動通信網(wǎng)絡(luò)的迅猛發(fā)展,全球手機用戶日益增加,手機成為了很多人日常生活中必不可少的一部分,手機業(yè)在日益發(fā)展的同時,人們對手機的功能需求和體驗需求也越來越高,因此各種智能手機相繼而出,當(dāng)前市場上最流行的智能手機的操作系統(tǒng)非Android莫屬。Android是一種以Linux為基礎(chǔ)的開源代碼操作系統(tǒng),主要應(yīng)用于手機,因為其良好的人機交互能力和能夠安裝使用眾多功能各異的應(yīng)用軟件而深受人們喜愛,本文就介紹其基于Android 3.2.1版本開發(fā)的一個“個人通訊錄”。根據(jù)當(dāng)下人們的使用習(xí)慣和實際需求,本文對通訊錄提出了新的構(gòu)想和設(shè)計,并在這樣的基礎(chǔ)上,構(gòu)建實現(xiàn)了該通訊錄。在實現(xiàn)通訊錄基本功能瀏覽、添加、修改、標(biāo)記、發(fā)短信、打電話、發(fā)郵件等的基礎(chǔ)上.

【關(guān)鍵詞】 Android 手機 通訊錄

  1. 系統(tǒng)概述

  2. 需求分析

    1. 基本功能需求

      1. 能熟練進行手機應(yīng)用程序app的設(shè)計和代碼編寫能力;

      2. 熟練掌握進行Android開發(fā)環(huán)境和參數(shù)配置的能力;
        3.熟練掌握獨立編寫手機界面程序的能力;
        4. 掌握基于XUtils進行網(wǎng)絡(luò)開發(fā)的能力;
        5. 掌握用Android Studio進行程序的編寫、運行和打包發(fā)布的能力;


  1. 系統(tǒng)用例分析
    圖1-1顯示了通話記錄功能模塊。包括了聯(lián)系人詳細信息查看,增加在選擇一個條目后,可以對其進行撥打電話,發(fā)送短信功能的操作,也可以進行刪除。

    手機用戶
    圖1-1 通話記錄模塊用例圖

    圖13為個人中心模塊中設(shè)置個人詳細信息子模塊的用例。該模塊的功能就是用戶查看自己的個人基本信息。
    手機用戶

    圖1-3 設(shè)置個人信息模塊用例圖


  1. 總體設(shè)計方案

    1. 系統(tǒng)模塊關(guān)系與劃分
      一個好的系統(tǒng)設(shè)計的步驟決定了程序是否能按照設(shè)計者的目的按時完成,是否能在規(guī)定的時間內(nèi)按照設(shè)計者的要求高質(zhì)量的完成程序必要的功能。并且按照標(biāo)準(zhǔn)的設(shè)計步驟對程序進行調(diào)試,測試,以及后期的優(yōu)化完善,使程序更加具有健壯性和可用性。通過對通訊錄功能、系統(tǒng)模塊、用戶需求方面進行全方位的分析制定開發(fā)流程。
      采用標(biāo)準(zhǔn)的開發(fā)流程確定系統(tǒng)具有用戶管理功能,聯(lián)系人增刪改功能,通訊功能,查找功能,備份等功能。

    2. Android開發(fā)組件


Android開發(fā)分為四大組件,分別是:活動(Activity):用于表現(xiàn)功能。服務(wù)(Service):用于后臺運行服務(wù),不提供界面呈現(xiàn)。廣播接收器(BroadcastReceiver ):用于接收廣播。內(nèi)容提供商(Content Provider):支持在多個應(yīng)用中存儲和讀取數(shù)據(jù),相當(dāng)于數(shù)據(jù)庫。

  1. Activity組件

Android中,Activity是所有程序的根本,所有程序的流程都是運行在Activity中,Activity是Android當(dāng)中最基本的模塊之一。在Android的程序當(dāng)中,Activity代表手機屏幕的一屏。如果把手機當(dāng)作瀏覽器,那么Activity相當(dāng)于一個網(wǎng)頁。在Activity當(dāng)中可以添加一些Button、Check box等控件。可以看到Activity概念和網(wǎng)頁的概念相當(dāng)類。

一般一個Android應(yīng)用由多個Activity組成的。這多個Activity之間可以進行互相跳轉(zhuǎn),和網(wǎng)頁跳轉(zhuǎn)稍微不一樣,Activity之間的跳轉(zhuǎn)有可能返回值,例如,從Activity A 跳轉(zhuǎn)到Activity B,那么當(dāng)Activity B 運行結(jié)束的時候,有可能會給Activity A 一個返回值。這樣做在很多時候是相當(dāng)方便的。

當(dāng)打開一個新的屏幕時,原來的屏幕會成為暫停,并且進入歷史堆棧中。用戶可以選擇性的移除一些沒有必要的屏幕,因為Android會把每個應(yīng)用的開始到當(dāng)前的每個屏幕保存在堆棧中。 Activity在運行是會受到一些突然事件的影響,例如:你正在使用一個Activity ,突然來電話了,這時你的應(yīng)用就要具備處理這些突然事件的能力,這就需要用Activity 生命周期。

② Service組件

Service是Android系統(tǒng)中的一種組件,它不能自己運行,只能在后臺運行,并且可以和其他組件進行交互。Service是一種程序,它可以運行很長時間,但是它卻沒有用戶界面。例如:打開一個音樂播放器的程序,這個時候若想上網(wǎng),就打開Android瀏覽器,這個時候雖然已經(jīng)進入了瀏覽器這個程序,但是,歌曲播放并沒有停止,而是在后臺繼續(xù)一首接著一首的播放。本系統(tǒng)客戶端擴展功能就是采用Service來進行設(shè)計和開發(fā)的。

Broadcast Receiver組件

在Android中,Broadcast是一種廣泛運用在應(yīng)用程序之間傳輸信息的機制。BroadcastReceiver是對發(fā)出來的Broadcast進行過濾接受并響應(yīng)的組件。這個組件除了接受和響應(yīng)廣播通知之外,什么都不做。很多廣播由系統(tǒng)代碼產(chǎn)生,比如時區(qū)變化,電磁量變低,拍攝照片,或是用戶改變語言首選項,都會產(chǎn)生廣播。應(yīng)用程序本身也可以啟動一個廣播,比如,讓其他應(yīng)用程序知道,某些數(shù)據(jù)已經(jīng)完成下載,可以被這些應(yīng)用程序使用了。

注冊BroadcastReceiver有兩種方式。方式一:在AndroidManifest.xml進行注冊。這種方法有一個特點是即使應(yīng)用程序已經(jīng)關(guān)閉了,但這個BroadcastReceiver依然會接受廣播出來的對象。方式二:在代碼中注冊廣播,第一種俗稱靜態(tài)注冊,第二種俗稱動態(tài)注冊。動態(tài)注冊比靜態(tài)注冊較靈活。靜態(tài)注冊一個BroadcastReceiver時,無論應(yīng)用程序是否啟動。都可以接受對應(yīng)的廣播。動態(tài)注冊的時候,如果不執(zhí)行unregister Receiver();方法被取消。但如果執(zhí)行這個方法,就不能接受廣播。

④?Content Provider組件

Content Provider是Android提供的第三方應(yīng)用數(shù)據(jù)的訪問方案。

在Android中,對數(shù)據(jù)的保護是很嚴(yán)的,除了放在SD卡中的數(shù)據(jù),一個應(yīng)用的數(shù)據(jù)庫、文件等內(nèi)容,都不允許直接訪問。Content Provider屏蔽了內(nèi)部數(shù)據(jù)的存儲細節(jié),向外提供了上述統(tǒng)一的接口模型,這樣的抽象層次,大大簡化了上層應(yīng)用的書寫,也對數(shù)據(jù)的整合提供了更方便的途徑。在各大組件中,Service和Content Provider都是那種需要持續(xù)訪問的。Service如果是一個耗時的場景,往往會提供異步訪問的接口,而Content Provider不論效率如何,都提供的是約定的同步訪問接口。使用Content Provider能夠靈活的替換底層使用的存儲設(shè)備,不用考慮底層存儲設(shè)備的細節(jié),從而使應(yīng)用系統(tǒng)具有良好的數(shù)據(jù)。

  1. 系統(tǒng)詳細設(shè)計

2.1通訊錄需求分析

根據(jù)手機功能調(diào)查顯示,近十成消費者都會使用手機通訊錄功能,隨著手機通訊錄功能的不斷加強與完善,手機通訊錄的意義,已不僅僅像電話薄一樣顯示電話號碼,而是向著個性化、人性化的方向發(fā)展。通訊錄從無到有,從英文到中文,經(jīng)歷了十幾年的發(fā)展歷程,今后的發(fā)展趨勢就是從通訊錄發(fā)展為名片夾,也就是在一個聯(lián)系人之下有手機號碼、固話號碼、公司、住址、郵箱、備注等內(nèi)容。手機通訊錄扮演著與用戶直接交互并且提供服務(wù)的重要角色,它需要提供良好的用戶體驗,方便用戶操作,接收用戶的操作并把這些操作轉(zhuǎn)換成相應(yīng)的命令,采用用戶活動的方式完成各個服務(wù)的邏輯流程。其功能主要包括增加、刪除、編輯聯(lián)系人,查找聯(lián)系人,通訊功能

2.1.1增加、刪除、編輯聯(lián)系人

點擊通信錄界面中的增加按鈕,進入增加聯(lián)系人界面。輸入聯(lián)系人的基本信息,并可根據(jù)用戶需求增加個性化信息如頭像、姓名、手機號碼、辦公室電話、家庭電話、職務(wù)職稱、單位名稱、地址、郵政編碼、Email、其他聯(lián)系方式、備注這些信息,單擊確認(rèn)返回主界面。點擊通信錄中一個已存在的聯(lián)系人,進入聯(lián)系人編輯界面,可修改聯(lián)系人的資料或進行刪除聯(lián)系人操作,完成后退回到主界面。對列表中聯(lián)系人的標(biāo)記,點擊menu鍵彈出功能界面上的刪除按鍵也可進行刪除。還可以在菜單上選擇刪除全部聯(lián)系人來清空通訊錄。在刪除聯(lián)系人的過程中,系統(tǒng)將提示用戶是否繼續(xù)操作,若放棄操作,則聯(lián)系人信息將繼續(xù)保存。

2.1.2通訊功能

用戶在通訊錄選擇聯(lián)系人進入聯(lián)系人詳細信息界面,選擇打電話、發(fā)信息還是發(fā)郵件的功能進行操作。

2.2數(shù)據(jù)庫設(shè)計

2.2.1Android數(shù)據(jù)庫概述

Android自帶了SQLite數(shù)據(jù)庫,是一款輕型的數(shù)據(jù)庫,是遵守ACID的關(guān)聯(lián)式數(shù)據(jù)庫管理系統(tǒng),它的設(shè)計目標(biāo)是嵌入式的,而且目前已經(jīng)在很多嵌入式產(chǎn)品中使用了它,它占用資源非常的低,在嵌入式設(shè)備中,可能只需要幾百K的內(nèi)存就夠了。它能夠支持Windows/Linux/Unix等等主流的操作系統(tǒng),同時能夠跟很多程序語言相結(jié)合,比如 Tcl、C#、PHP、Java等,還有ODBC接口,同樣比起Mysql、PostgreSQL這兩款開源世界著名的數(shù)據(jù)庫管理系統(tǒng)來講,它的處理速度比他們都快。

關(guān)于Sqlite的數(shù)據(jù)類型,你會驚訝:Typelessness(無類型). 對! SQLite是無類型的. 這意味著你可以保存任何類型的數(shù)據(jù)到你所想要保存的任何表的任何列中, 無論這列聲明的數(shù)據(jù)類型是什么. 對于SQLite來說對字段不指定類型是完全有效的。

SQLite有五個特點,分別是獨立性、非服務(wù)式、零配置、元處理、開放性。

獨立性:sqlite使用標(biāo)準(zhǔn)C語言實現(xiàn),它只需要很少的系統(tǒng)支持,這使得它很容易移植進嵌入式設(shè)備,因此,它能夠應(yīng)用于更廣泛的軟件環(huán)境。Sqlite使用一個虛擬文件系統(tǒng)完成和磁盤的交互,在不同的系統(tǒng)中完成這個交互層是很簡單的。

非服務(wù)式:極大多數(shù)的數(shù)據(jù)庫都是以服務(wù)的方式實現(xiàn),這要求客戶必須通過某種中間接口來連接數(shù)據(jù)庫。然而slqite可以直接訪問數(shù)據(jù)庫,不需要任何中間接口來完成。

零配置:因為sqlite不需要中間接口,所以我們不需要安裝其他配置。

元處理:sqlite的數(shù)據(jù)庫操作具有原子性、孤立性,程序或系統(tǒng)崩潰不會引發(fā)數(shù)據(jù)錯誤。

開放性:任何人可以自由獲得和使用sqlite的源碼。

因為sqlite有這么多的優(yōu)點,已經(jīng)有非常多的網(wǎng)站和軟件開始使用sqlite數(shù)據(jù)庫,大大方便了開發(fā)人員進行開發(fā)。已知的有:Goolge、QQ、Iphone、Mac電腦等。

2.2.2數(shù)據(jù)庫表詳細設(shè)計

對系統(tǒng)所需功能需求分析通過了設(shè)計確定了系統(tǒng)數(shù)據(jù)庫中表的設(shè)計,該系統(tǒng)有一張表電話薄表,下面為表的詳細設(shè)計。

表user:

字段名類型是否可為空是否為主鍵描述NameString否否用戶名sexString是否電子郵箱Phoneint否是聯(lián)系電話QQString是否QQ號碼companyString是否公司jobString是否工作

2.3系統(tǒng)界面設(shè)計

2.3.1界面布局

Android的資源文件保存在/res的子目錄中。其中/res/drawable/目錄中保存的是圖像文件,/res/values目錄中保存的是用來自定義字符串和顏色的文件,/res/xml目錄中保存的是XML格式的數(shù)據(jù)文件。所有在程序開發(fā)階段可以被調(diào)用的資源都保存在這些目錄中,在對界面進行繪制時要考慮到不同手機屏幕大小可能不一樣,應(yīng)盡量兼容大多數(shù)手機屏幕尺寸,使之顯示無障礙。


登錄界面代碼

//登錄界面

public class LoginActivity extends Activity {

private EditText et_id, et_name;

private Button btn_regist, btn_login_user,btn_login_manager;

//SQLite的聲明

SQLiteOpenHelper helper;

//密碼

private String _pword;

//用戶名

private String _name;

//控件初始

public void initView(){

et_id = findViewById(R.id.editText1);

et_name = findViewById(R.id.editText2);

btn_regist = findViewById(R.id.button1);

btn_login_user = findViewById(R.id.button2);

}

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_login);

//初始化

initView();

//數(shù)據(jù)庫的創(chuàng)建,及調(diào)用

helper = new Sqliteopenhelper(this);

//獲取可讀數(shù)據(jù)

helper.getWritableDatabase();

//注冊用戶監(jiān)聽事件

btn_regist.setOnClickListener(new OnClickListener() {

@Override

public void onClick(View v) {

//跳轉(zhuǎn)到注冊界面

Intent intent = new Intent(LoginActivity.this, registerActivity.class);

//啟動

startActivity(intent);

}

});

//普通用戶登陸按鈕監(jiān)聽事件

btn_login_user.setOnClickListener(new OnClickListener() {

@Override

public void onClick(View v) {

_name = et_id.getText().toString();

_pword = et_name.getText().toString();

//判斷賬號和密碼是否都為空

if (_name.equals("") || _pword.equals("")) {

Toast.makeText(getApplicationContext(), "請輸入用戶賬號密碼!", Toast.LENGTH_SHORT).show();

} else {

//方法:數(shù)據(jù)庫的操作,查詢

sureuser();

}

}

});

}

private void sureuser() {

//數(shù)據(jù)庫的操作,查詢

SQLiteDatabase sdb = helper.getReadableDatabase();

try {

String sql = "select * from user where name=? and pword=?";

// 實現(xiàn)遍歷id和name

Cursor cursor = sdb.rawQuery(sql, new String[] { _name, _pword });

//判斷數(shù)據(jù)是否大于0

if (cursor.getCount() > 0) {

BaseApplication.getInstance().setName(_name);

BaseApplication.getInstance().setPassword(_pword);

//跳轉(zhuǎn)到通訊錄界面

Intent intent = new Intent(LoginActivity.this, MailListActivity.class);

//獲取數(shù)據(jù)

Bundle bundle = new Bundle();

bundle.putString("name", _name);

intent.putExtras(bundle);

//啟動

startActivity(intent);

} else {

Toast.makeText(getApplicationContext(), "用戶登錄失敗,賬號密碼錯誤或者選擇正確的登錄類型!",

Toast.LENGTH_SHORT).show();

}

//游標(biāo)關(guān)閉

cursor.close();

//數(shù)據(jù)關(guān)閉

sdb.close();

} catch (SQLiteException e) {

Toast.makeText(getApplicationContext(), "親,請注冊!", Toast.LENGTH_SHORT).show();

}

}

}

注冊界面代碼

//注冊界面

public class registerActivity extends Activity {

//文本編輯:id,用戶名

private EditText etid,etname;

//按鈕:取消,確定

private Button btn_qu,btn_sure;

//聲明數(shù)據(jù)庫

SQLiteOpenHelper helper;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_register);

//創(chuàng)建Sqliteopenhelper對象

helper=new Sqliteopenhelper(this);

//獲取可寫數(shù)據(jù)

helper.getWritableDatabase();

etid=findViewById(R.id.etid);

etname=findViewById(R.id.etname);

btn_qu=findViewById(R.id.btn_qu);

btn_sure=findViewById(R.id.btn_sure);

//確定按鈕監(jiān)聽事件

btn_sure.setOnClickListener(new sureListener());

//取消按鈕監(jiān)聽事件

btn_qu.setOnClickListener(new quListener());

}

//確定按鈕監(jiān)聽事件

class sureListener implements OnClickListener {

@Override

public void onClick(View v) {

try{

//創(chuàng)建數(shù)據(jù)庫對象進行獲取可寫數(shù)據(jù)

SQLiteDatabase sdb=helper.getWritableDatabase();

//創(chuàng)建內(nèi)容鍵值對對象

ContentValues values=new ContentValues();

values.put("name",etid.getText().toString());

values.put("pword",etname.getText().toString());

//插入值

sdb.insert("user",null, values);

Toast.makeText(getApplicationContext(), "注冊成功", Toast.LENGTH_SHORT).show();

//跳轉(zhuǎn)到登錄界面

Intent intent=new Intent(registerActivity.this,LoginActivity.class);

//創(chuàng)建Bundle對象

Bundle bundle=new Bundle();

//放置字符串文本

bundle.putString("name",etname.getText().toString());

intent.putExtras(bundle);

//啟動

startActivity(intent);

//結(jié)束

finish();

}

catch(SQLiteException e)

{

Toast.makeText(getApplicationContext(), "注冊失敗", Toast.LENGTH_SHORT).show();}

}

}

//取消按鈕監(jiān)聽事件

class quListener implements OnClickListener {

@Override

public void onClick(View v) {

//結(jié)束

finish();

}

}

}

首頁代碼

public class MailListActivity extends AppCompatActivity implements NavigationView.OnNavigationItemSelectedListener {

private TabLayout mTabLayout;

private Fragment[] mFragmensts;

private DrawerLayout mDrawerLayout;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);

NavigationView navigationView = findViewById(R.id.nav_view);

navigationView.setNavigationItemSelectedListener(this);

//DataGenerator控制fragment的分頁

mFragmensts = DataGenerator.getFragments("TabLayout Tab");

initView();

}

@Override

public boolean onNavigationItemSelected(@NonNull MenuItem item) {

if (mDrawerLayout.isDrawerOpen(GravityCompat.START)) {

mDrawerLayout.closeDrawer(GravityCompat.START);

}

int id = item.getItemId();

switch (id) {

case R.id.nav_info:

startActivity(new Intent(this, MoreActivity.class));

break;

case R.id.nav_exit:

startActivity(new Intent(this, LoginActivity.class));

finish();

break;

}

return true;

}

private void initView() {

//分頁功能是通過tablayout和fragment實現(xiàn)的

mTabLayout = (TabLayout) findViewById(R.id.bottom_tab_layout);

mTabLayout.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {

@Override

public void onTabSelected(TabLayout.Tab tab) {

onTabItemSelected(tab.getPosition());

// Tab 選中之后,改變各個Tab的狀態(tài)

for (int i = 0; i < mTabLayout.getTabCount(); i++) {

View view = mTabLayout.getTabAt(i).getCustomView();

ImageView icon = view.findViewById(R.id.tab_content_image);

TextView text = view.findViewById(R.id.tab_content_text);

if (i == tab.getPosition()) { // 選中狀態(tài)

icon.setImageResource(DataGenerator.mTabResPressed[i]);

text.setTextColor(getResources().getColor(android.R.color.black));

} else {// 未選中狀態(tài)

icon.setImageResource(DataGenerator.mTabRes[i]);

text.setTextColor(getResources().getColor(android.R.color.darker_gray));

}

}

}

@Override

public void onTabUnselected(TabLayout.Tab tab) {

}

@Override

public void onTabReselected(TabLayout.Tab tab) {

}

});

// 提供自定義的布局添加Tab

for (int i = 0; i < 2; i++) {

mTabLayout.addTab(mTabLayout.newTab().setCustomView(DataGenerator.getTabView(this, i)));

}

}

private void onTabItemSelected(int position) {

Fragment fragment = null;

switch (position) {

case 0:

fragment = mFragmensts[0];

break;

case 1:

fragment = mFragmensts[1];

break;

}

if (fragment != null) {

//切換分頁

getSupportFragmentManager().beginTransaction().replace(R.id.home_container, fragment).addToBackStack(null).commit();

}

}

}

網(wǎng)絡(luò)請求代碼

/**

* 更多工具界面

*/

public class MoreActivity extends AppCompatActivity {

private EditText edtNum;

private TextView tvAdress;

private Button btnQuery;

private RecyclerView rv_data;

private PhoneModel resultModel;

private List<InfoModel> goodsModels = new ArrayList<>();

MyAdapter mAdapter;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_photo_num);

x.Ext.init(getApplication());

x.Ext.setDebug(BuildConfig.DEBUG); // 是否輸出debug日志, 開啟debug會影響性能.

init();

//recyclerview初始化

rv_data = findViewById(R.id.rv_data);

mAdapter = new MyAdapter(goodsModels);

rv_data.setLayoutManager(new LinearLayoutManager(this));

rv_data.setAdapter(mAdapter);

}

//控制初始化

private void init() {

edtNum = findViewById(R.id.edt_num);

btnQuery = findViewById(R.id.btn_query);

tvAdress = findViewById(R.id.tv_adress);

rv_data = findViewById(R.id.rv_data);

//點擊查詢按鈕

btnQuery.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View v) {

String num = edtNum.getText().toString();

if (!TextUtils.isEmpty(num)) {

getData(num);

} else {

Toast.makeText(MoreActivity.this, "請輸入號碼", Toast.LENGTH_SHORT).show();

}

}

});

}

//請求聚合數(shù)據(jù)api 獲取電話號碼信息

private void getData(final String num) {

RequestParams params = new RequestParams("apis.juhe.cn/mobile/get?"+num +"&key=2b83ed20642560618b61847b0cd526e5");

// params.setSslSocketFactory(...); // 如果需要自定義SSL

params.addQueryStringParameter("wd", "xUtils");

x.http().get(params, new Callback.CommonCallback<String>() {

@Override

public void onSuccess(String result) {

resultModel = new Gson().fromJson(result, PhoneModel.class);

runOnUiThread(new Runnable() {

@Override

public void run() {

String info = num + " "+ resultModel.getResult().getProvince() + " " + resultModel.getResult().getCity();

tvAdress.setText(info);

//更新列表數(shù)據(jù)

goodsModels.add(new InfoModel(num,resultModel.getResult().getProvince(),resultModel.getResult().getCity()));

mAdapter.notifyDataSetChanged();

}

});

}

@Override

public void onError(Throwable ex, boolean isOnCallback) {

Toast.makeText(x.app(), ex.getMessage(), Toast.LENGTH_LONG).show();

}

@Override

public void onCancelled(org.xutils.common.Callback.CancelledException cex) {

Toast.makeText(x.app(), "cancelled", Toast.LENGTH_LONG).show();

}

@Override

public void onFinished() {

}

});

}

}

數(shù)據(jù)相關(guān)代碼

//新建類Sqliteopenhelper 繼承于SQLiteOpenHelper

public class Sqliteopenhelper extends SQLiteOpenHelper {

//數(shù)據(jù)庫名:

private static final String DBNAME="test.db";

//用戶表名

private static final String TABLENAME = "user";

//版本號:具體我也不知道是什么,照著寫就行了

private static final int TESTVERSION = 1;

public Sqliteopenhelper(Context context) {

super(context, DBNAME, null, TESTVERSION);

}

//初始化,創(chuàng)建表

@Override

public void onCreate(SQLiteDatabase db) {

String sql1="create table" + " " + TABLENAME + "(_id varchar,name text,pword text)";

db.execSQL(sql1);

}

//失敗后刪除,重新創(chuàng)建

@Override

public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

if(newVersion>oldVersion)

{

String sql1=" drop table"+" " + TABLENAME;

db.execSQL(sql1);

this.onCreate(db);

}

}

}

4.3測試總結(jié)

通過對本系統(tǒng)進行的多次的測試,系統(tǒng)正確實現(xiàn)了對聯(lián)系人增加、修改、備份、發(fā)信息、打電話、等操作,實現(xiàn)了用戶對通訊錄的基本要求。在測試過程中對程序細節(jié)上出現(xiàn)的漏洞進行修補,系統(tǒng)運行的穩(wěn)定性基本達到要求,運行結(jié)果比較良好。在整個工程的構(gòu)思方面還存在著不足,這些問題還需要今后逐一解決。與此同時,這個軟件還可以進一步擴展,帶給用戶更好的體驗與生活的便捷。


安卓APP源碼和設(shè)計報告——個人通訊錄的評論 (共 條)

分享到微博請遵守國家法律
府谷县| 三亚市| 聊城市| 库尔勒市| 襄城县| 克拉玛依市| 集贤县| 双峰县| 江陵县| 邵东县| 苍溪县| 高州市| 梁平县| 浏阳市| 松滋市| 南康市| 巨野县| 钦州市| 达州市| 大邑县| 大新县| 邵阳县| 定日县| 六盘水市| 晋宁县| 新和县| 西和县| 安仁县| 封开县| 曲周县| 广饶县| 南汇区| 莲花县| 宜宾市| 独山县| 南丰县| 留坝县| 承德县| 稻城县| 桦川县| 都匀市|