(完整word版)Android实验报告_基于SQLite的通信录
使用sqliteopenhelper实现简易通讯录实训报告
实训报告:使用SQLiteOpenHelper实现简易通讯录一、实训目标通过本次实训,掌握SQLite数据库的基本操作,使用SQLiteOpenHelper类创建、打开、升级数据库,以及在Android应用程序中实现简易通讯录功能。
二、实训步骤1.创建SQLite数据库2.使用SQLiteOpenHelper类创建数据库。
首先,创建一个继承自SQLiteOpenHelper的类,并重写onCreate()和onUpgrade()方法。
在onCreate()方法中执行创建表的SQL语句,onUpgrade()方法用于升级数据库时执行更新表的SQL语句。
3.实现通讯录功能4.在通讯录界面上,显示联系人列表。
当用户点击某个联系人时,显示该联系人的详细信息。
实现添加、删除、修改和查询联系人操作。
5.实现数据绑定6.使用Data Binding库将数据绑定到界面上。
在布局文件中定义变量,通过布局文件与Java代码的双向绑定,将联系人数据显示在界面上。
7.实现增删改查操作8.通过SQLiteOpenHelper类提供的insert()、update()、delete()和query()方法实现增删改查操作。
将操作封装在DAO(Data Access Object)类中,方便进行数据操作。
9.测试应用程序10.运行应用程序,测试通讯录功能是否正常工作。
检查添加、删除、修改和查询联系人操作是否能够正确执行。
三、实训总结通过本次实训,我掌握了SQLite数据库的基本操作,了解了如何使用SQLiteOpenHelper 类创建、打开和升级数据库。
同时,我也学会了在Android应用程序中实现简易通讯录功能,包括数据绑定和增删改查操作。
通过实际操作,我对Android应用程序开发有了更深入的理解。
在未来的学习和工作中,我将继续深入学习Android开发技术,提高自己的技能水平。
Android开发实验---通讯录
实验报告通讯录姓名:学号:课程名称:移动应用开发所在学院:信息科学与工程学院专业班级:计算机任课教师:主要功能分析:1、增加、删除、编联系人点击通信录界面中的增加按钮,入增加联系人面。
输入联系人的基本信息,并可根据用户需求增加个性化信息如头像、姓名、手机号码、办室电话、家庭电话、职务职称、单位名称、地址、邮政编码、Email、其他联系方式、备注这些信息,击确认返回主界面。
点击通信录中一个已存在的联系人,进入联系人编辑界面,可修改系人的资料或进行删除联系人操作,完成后退回到主界面。
对列表中联系人的标记,点mnu键弹出功能界面上的删除按键也可进行删除。
还可以在菜单上选择删除全部联系人清空通讯录。
在删除联系人的过程中,系统将提示用户是否继续操作,若放弃操作,则系人信息将继续保存。
2、查找联系人用户点击menu键打开底部菜单框,底部菜单框为查询系人提供入口,进入通讯录的缺省页面为联系人列表,在列表中看到所有联系人的姓名、电话息排列,用户点击查找按键输入联系人基本信息,,通讯录显所有符合查询条件的联系人列表,用户选择一个联系人进入联系人基本信息页面进行其他操作;查询完成,用户按返回键返回主界面。
3、通功能用户在通录选择联系人进入联系详细信息界面,这时点击menu键打开通信功能框,选择打电话、发信息的功能进行操作。
4、菜单能通过对menu按的点击,显示底部菜框,包含有增加查找、除、菜单、返回功能,菜单按键则包含显示所有、删除所有等实用功能。
增加联系人:这个功能由ContactAdder类完成,具体实现不是比较麻烦,保存动作由ContentResolver类解决,但实现方式有所不同,可分为一次性批量增加与挨个增加。
由于界面设置繁琐,代码页过多,所以挑出其中的一部分进行说明首先是DB数据库建库过程:package com.xample.hivian.my_contact_manager.models.db;import android.content.ContentValues;import android.database.Cursor;import android.database.sqlite.SQLiteOpenHelper;import android.content.Context;import android.database.sqlite.SQLiteDatabase;import com.example.hivian.my_contact_manager.models.Contact;import com.example.hivian.my_contact_manager.models.Sms;import java.util.ArrayList;import java.util.List;public class DBHandler extends SQLiteOpenHelper {// Database Versionprivate static final int DB_VERSION = 1;// Database Nameprivate static final String DB_NAME = "DB";// Contacts table nameprivate static final String CONTACTS_TABLE = "contacts";//通讯录private static final String SMS_TABLE = "sms";// Shops Table Columns names private static final String KEY_ID = "id";private static final String KEY_IMAGE = "image";//图片private static final String KEY_NAME = "name";//姓名private static final String KEY_PHONE = "phone";//电话号码private static final String KEY_EMAIL = "email";//邮箱private static final String KEY_ADDRESS = "address";//联系人地址private static final String KEY_SMS_HEADER = "sms_header";private static final String KEY_SMS_CONTENT = "sms_content";private static final String KEY_CONTACT_ID = "contact_id";private static final String KEY_SMS_TYPE = "sms_type";private static final String CONTACTS_TABLE_CREATE ="CREATE TABLE " + CONTACTS_TABLE + " (" + KEY_ID + " INTEGER PRIMARY KEY, " + KEY_IMAGE + " BLOB, " + KEY_NAME + " TEXT, " + KEY_PHONE + " TEXT, " +KEY_EMAIL + " TEXT, " + KEY_ADDRESS + " TEXT)";private static final String SMS_TABLE_CREATE ="CREATE TABLE " + SMS_TABLE + " (" + KEY_ID + " INTEGER PRIMARY KEY, " +KEY_SMS_HEADER + " TEXT, " + KEY_SMS_CONTENT + " TEXT, " +KEY_CONTACT_ID + " INTEGER," + KEY_SMS_TYPE + " INTEGER)";private static DBHandler dbInstance= null;public static DBHandlergetInstance(Context context) {if (dbInstance== null) {dbInstance= new DBHandler(context, DB_NAME, DB_VERSION);}return dbInstance;}DBHandler(Context context, String dbName, int dbVersion) {super(context, dbName, null, dbVersion);}@Overridepublic void onCreate(SQLiteDatabasedb) {db.execSQL(CONTACTS_TABLE_CREATE);db.execSQL(SMS_TABLE_CREATE);}@Overridepublic void onUpgrade(SQLiteDatabasedb, int oldVersion, int newVersion) {// Drop older table if existeddb.execSQL("DROP TABLE IF EXISTS " + CONTACTS_TABLE);db.execSQL("DROP TABLE IF EXISTS " + SMS_TABLE);// 重新创建表onCreate(db);}//新增联系人public void addContact(Contact contact) {SQLiteDatabasedb = this.getWritableDatabase();ContentValues values = new ContentValues();values.put(KEY_IMAGE, contact.getImage());values.put(KEY_NAME, contact.getName());values.put(KEY_PHONE, contact.getPhone());values.put(KEY_EMAIL, contact.getEmail());values.put(KEY_ADDRESS, contact.getAddress());db.insert(CONTACTS_TABLE, null, values);}// Adding new smspublic void addSms(Smssms) {SQLiteDatabasedb = this.getWritableDatabase();ContentValues values = new ContentValues();values.put(KEY_SMS_HEADER, sms.getHeader());values.put(KEY_SMS_CONTENT, sms.getContent());values.put(KEY_CONTACT_ID, sms.getContactId());values.put(KEY_SMS_TYPE, sms.getType());db.insert(SMS_TABLE, null, values);}// Getting one contactpublic Contact getContact(int id) {SQLiteDatabasedb = this.getReadableDatabase();Cursor cursor = db.query(CONTACTS_TABLE, new String[]{ KEY_ID, KEY_IMAGE, KEY_NAME, KEY_PHONE, KEY_EMAIL, KEY_ADDRESS }, KEY_ID + "=?", new String[] { String.valueOf(id) }, null, null, null, null);if (cursor != null)cursor.moveToFirst();Contact contact = new Contact(cursor.getBlob(1), cursor.getString(2), cursor.getString(3), cursor.getString(4), cursor.getString(5));contact.setId(cursor.getInt(0));cursor.close();return contact;}// Getting one contact by namepublic Contact getContactByName(String name) {SQLiteDatabasedb = this.getReadableDatabase();Cursor cursor = db.query(CONTACTS_TABLE, new String[]{ KEY_ID, KEY_IMAGE, KEY_NAME, KEY_PHONE, KEY_EMAIL, KEY_ADDRESS }, KEY_NAME + "=?", new String[] { name }, null, null, null, null);if (cursor != null)cursor.moveToFirst();Contact contact = new Contact(cursor.getBlob(1), cursor.getString(2),cursor.getString(3), cursor.getString(4), cursor.getString(5));contact.setId(cursor.getInt(0));cursor.close();return contact;}// Getting one contact by phonepublic Contact getContactByPhone(String phone) {SQLiteDatabasedb = this.getReadableDatabase();Cursor cursor = db.query(CONTACTS_TABLE, new String[]{ KEY_ID, KEY_IMAGE, KEY_NAME, KEY_PHONE, KEY_EMAIL, KEY_ADDRESS }, KEY_PHONE + "=?", new String[] { phone }, null, null, null, null);if (!cursor.moveToFirst())return null;Contact contact = new Contact(cursor.getBlob(1), cursor.getString(2),cursor.getString(3), cursor.getString(4), cursor.getString(5));contact.setId(cursor.getInt(0));cursor.close();return contact;}// Getting one sms by contact idpublic List<Sms>getSmsByContactId(Integer id) {SQLiteDatabasedb = this.getReadableDatabase();Cursor cursor = db.query(SMS_TABLE, new String[]{ KEY_ID, KEY_SMS_HEADER, KEY_SMS_CONTENT, KEY_CONTACT_ID,KEY_SMS_TYPE },KEY_CONTACT_ID + "=?", new String[] { String.valueOf(id) }, null, null, null, null);List<Sms>allSms = new ArrayList<>();if (cursor.moveToFirst()) {do {Smssms = new Sms();sms.setId(Integer.parseInt(cursor.getString(0)));sms.setHeader(cursor.getString(1));sms.setContent(cursor.getString(2));sms.setContactId(cursor.getInt(3));sms.setType(cursor.getInt(4));allSms.add(sms);} while (cursor.moveToNext());}cursor.close();return allSms;}// Getting all contactspublic List<Contact>getAllContacts() {String selectQuery = "SELECT * FROM " + CONTACTS_TABLE; SQLiteDatabasedb = this.getReadableDatabase();Cursor cursor = db.rawQuery(selectQuery, null);List<Contact>allContacts = new ArrayList<>();if (cursor.moveToFirst()) {do {Contact contact = new Contact();contact.setId(Integer.parseInt(cursor.getString(0)));contact.setImage(cursor.getBlob(1));contact.setName(cursor.getString(2));contact.setPhone(cursor.getString(3));contact.setEmail(cursor.getString(4));contact.setAddress(cursor.getString(5));allContacts.add(contact);} while (cursor.moveToNext());}cursor.close();return allContacts;}// Getting all smspublic List<Sms>getAllSms() {String selectQuery = "SELECT * FROM " + SMS_TABLE; SQLiteDatabasedb = this.getReadableDatabase();Cursor cursor = db.rawQuery(selectQuery, null);List<Sms>allSms = new ArrayList<>();if (cursor.moveToFirst()) {do {Smssms = new Sms();sms.setId(Integer.parseInt(cursor.getString(0)));sms.setHeader(cursor.getString(1));sms.setContent(cursor.getString(2));sms.setContactId(cursor.getInt(3));sms.setType(cursor.getInt(4));allSms.add(sms);} while (cursor.moveToNext());}cursor.close();return allSms;}// Getting all sms from contactpublic List<Sms>getAllSmsFromContact(int id) {String selectQuery = "SELECT * FROM " + SMS_TABLE + " WHERE " + KEY_CONTACT_ID + " = " + id;SQLiteDatabasedb = this.getReadableDatabase();Cursor cursor = db.rawQuery(selectQuery, null);List<Sms>allSms = new ArrayList<>();if (cursor.moveToFirst()) {do {Smssms = new Sms();sms.setId(Integer.parseInt(cursor.getString(0)));sms.setHeader(cursor.getString(1));sms.setContent(cursor.getString(2));sms.setContactId(cursor.getInt(3));sms.setType(cursor.getInt(4));allSms.add(sms);} while (cursor.moveToNext());}cursor.close();return allSms;}// Getting contacts countpublic Integer getContactsCount() {String countQuery = "SELECT * FROM " + CONTACTS_TABLE; SQLiteDatabasedb = this.getReadableDatabase();Cursor cursor = db.rawQuery(countQuery, null);return cursor.getCount();}// Checking duplicates in tablepublic boolean isDuplicate(DBHandlerdb, String name) {List<Contact> contacts = db.getAllContacts();for (Contact cont : contacts) {if (cont.getName().equals(name))return true;}return false;}// Updating a contactpublic Integer updateContact(Contact contact) {SQLiteDatabasedb = this.getWritableDatabase();ContentValues values = new ContentValues();values.put(KEY_IMAGE, contact.getImage());values.put(KEY_NAME, contact.getName());values.put(KEY_PHONE, contact.getPhone());values.put(KEY_EMAIL, contact.getEmail());values.put(KEY_ADDRESS, contact.getAddress());return db.update(CONTACTS_TABLE, values, KEY_ID + " = ?", new String[]{String.valueOf(contact.getId())});}// Updating a smspublic Integer updateSms(Smssms) {SQLiteDatabasedb = this.getWritableDatabase(); ContentValues values = new ContentValues();values.put(KEY_SMS_HEADER, sms.getHeader());values.put(KEY_SMS_CONTENT, sms.getContent());values.put(KEY_CONTACT_ID, sms.getContactId());values.put(KEY_SMS_TYPE, sms.getType());return db.update(SMS_TABLE, values, KEY_ID + " = ?",new String[]{String.valueOf(sms.getId())});}// Deleting a contactpublic void deleteContact(Contact contact) { SQLiteDatabasedb = this.getWritableDatabase();db.delete(CONTACTS_TABLE, KEY_ID + " = ?",new String[] { String.valueOf(contact.getId()) });}// Deleting a contactpublic void deleteSms(Smssms) {SQLiteDatabasedb = this.getWritableDatabase();db.delete(SMS_TABLE, KEY_ID + " = ?",new String[] { String.valueOf(sms.getId()) });}// Deleting all contactspublic void deleteAllContacts(DBHandlerdb) {List<Contact> contacts = db.getAllContacts();for (Contact cont : contacts) {db.deleteContact(cont);}}// Deleting all smspublic void deleteAllSms(DBHandlerdb) {List<Sms>allSms = db.getAllSms();for (Smssms : allSms) {db.deleteSms(sms);}}}界面切换:package com.example.hivian.my_contact_manager.views.activities;import android.app.Activity;import android.content.Intent;import android.os.Bundle;import android.view.WindowManager;import com.example.hivian.my_contact_manager.R;import java.util.Timer;import java.util.TimerTask;public class SplashActivity extends Activity {private static final long DELAY = 1000;private boolean scheduled = false;private Timer splashTimer;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(yout.activity_splash);this.getWindow().setFlags(youtParams.FLAG_FULLSCREEN, youtParams.FLAG_FULLSCREEN);splashTimer= new Timer();splashTimer.schedule(new TimerTask(){@Overridepublic void run(){Intent intent = new Intent(SplashActivity.this, MainActivity.class); intent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);startActivity(intent);overridePendingTransition(0, 0);SplashActivity.this.finish();}}, DELAY);scheduled = true;}@Overrideprotected void onDestroy() {super.onDestroy();if (scheduled) {splashTimer.cancel();}splashTimer.purge();}}按钮设计:package com.example.hivian.my_contact_manager.views.fragments; import android.Manifest;import android.app.AlertDialog;import android.content.DialogInterface;import android.content.Intent;import android.content.pm.PackageManager;import android.graphics.Bitmap;import android.graphics.Color;import android.graphics.Typeface;import .Uri;import android.os.Bundle;import android.support.annotation.Nullable;import android.support.v4.content.ContextCompat;import android.support.v4.content.res.ResourcesCompat;import android.support.v7.app.ActionBar;import android.support.v7.app.AppCompatActivity;import android.util.TypedValue;import youtInflater;import android.view.Menu;import android.view.MenuInflater;import android.view.MenuItem;import android.view.MotionEvent;import android.view.View;import android.view.ViewGroup;import android.widget.Button;import android.widget.FrameLayout;import android.widget.ImageView;import android.widget.ScrollView;import android.widget.TextView;import android.widget.Toast;import android.support.v4.app.Fragment;import com.example.hivian.my_contact_manager.R;import com.example.hivian.my_contact_manager.models.Contact;import com.example.hivian.my_contact_manager.models.Sms;import com.example.hivian.my_contact_manager.models.db.DBHandler;import com.example.hivian.my_contact_manager.utilities.BitmapUtility;import com.example.hivian.my_contact_manager.views.activities.ContactEditionActivity; import com.example.hivian.my_contact_manager.views.activities.ContactSmsActivity;import com.example.hivian.my_contact_manager.views.activities.MainActivity;import com.oguzdev.circularfloatingactionmenu.library.FloatingActionMenu;import com.oguzdev.circularfloatingactionmenu.library.SubActionButton;import java.util.List;public class ContactInfoFragment extends Fragment implements View.OnClickListener, View.OnTouchListener {private TextView name;private TextView phone;public FloatingActionMenu actionMenu;private DBHandler db;@Nullable@Overridepublic View onCreateView(LayoutInflaterinflater, @Nullable ViewGroup container, Bundle savedInstanceState) {View view = inflater.inflate(yout.fragment_contact_info, container, false);setHasOptionsMenu(true);ActionBar ab = ((AppCompatActivity) getActivity()).getSupportActionBar();if (ab != null) {ab.setTitle("Options");ab.setDisplayHomeAsUpEnabled(true);}db= DBHandler.getInstance(getActivity());Contact receivedContact = (Contact) getArguments().getSerializable("contact");if (receivedContact != null) {ImageViewimageView = (ImageView) view.findViewById(_image);name = (TextView) view.findViewById(_name);phone = (TextView) view.findViewById(_phone);TextView email = (TextView) view.findViewById(_email);TextView address = (TextView) view.findViewById(_address);if (receivedContact.getImage() != null) {Bitmap imageBm = BitmapUtility.getImage(receivedContact.getImage());imageView.setImageBitmap(imageBm);}name.setText(receivedContact.getName());phone.setText(receivedContact.getPhone());if (receivedContact.getEmail().equals("")) {email.setTypeface(null, Typeface.ITALIC);email.setTextColor(Color.GRAY);email.setTextSize(PLEX_UNIT_DIP, 18f);email.setText(R.string.placeholder_none);}elseemail.setText(receivedContact.getEmail());if (receivedContact.getAddress().equals("")) {address.setTypeface(null, Typeface.ITALIC);address.setTextColor(Color.GRAY);address.setTextSize(PLEX_UNIT_DIP, 18f);address.setText(R.string.placeholder_none);}elseaddress.setText(receivedContact.getAddress());}return view;}@Overridepublic void onViewCreated(View view, @Nullable Bundle savedInstanceState) { initInfoMenu(view);ScrollViewscrollView = (ScrollView) view.findViewById(R.id.scrollview_contact_info); scrollView.setOnTouchListener(this);super.onViewCreated(view, savedInstanceState);}@Overridepublic boolean onTouch(View v, MotionEvent event) {actionMenu.close(true);return false;}@Overridepublic void onClick(View v) {switch (v.getId()) {case R.id.itemId1:toSmsManager();break;case R.id.itemId2:callContact();break;case R.id.itemId3:editContact();break;case R.id.itemId4:deleteContact();break;}actionMenu.close(true);}@Overridepublic void onCreateOptionsMenu(Menu menu, MenuInflaterinflater) {inflater.inflate(R.menu.menu_main, menu);super.onCreateOptionsMenu(menu,inflater);}@Overridepublic boolean onOptionsItemSelected(MenuItem item) {switch (item.getItemId()) {case android.R.id.home:actionMenu.close(true);getFragmentManager().popBackStack();return true;default:return super.onOptionsItemSelected(item);}}private void initInfoMenu(View view) {ImageView menuIcon1 = new ImageView(getActivity());ImageView menuIcon2 = new ImageView(getActivity());ImageView menuIcon3 = new ImageView(getActivity());ImageView menuIcon4 = new ImageView(getActivity());menuIcon1.setImageDrawable(ResourcesCompat.getDrawable(getResources(), R.drawable.ic_message_black_24dp, null));menuIcon2.setImageDrawable(ResourcesCompat.getDrawable(getResources(), R.drawable.ic_call_black_24dp, null));menuIcon3.setImageDrawable(ResourcesCompat.getDrawable(getResources(), R.drawable.ic_mode_edit_black_24dp, null));menuIcon4.setImageDrawable(ResourcesCompat.getDrawable(getResources(), R.drawable.ic_delete_black_24dp, null));menuIcon1.setBackground(ResourcesCompat.getDrawable(getResources(), R.drawable.circle_opacity, null));menuIcon2.setBackground(ResourcesCompat.getDrawable(getResources(), R.drawable.circle_opacity, null));menuIcon3.setBackground(ResourcesCompat.getDrawable(getResources(),R.drawable.circle_opacity, null));menuIcon4.setBackground(ResourcesCompat.getDrawable(getResources(),R.drawable.circle_opacity, null));menuIcon1.setColorFilter(ContextCompat.getColor(getActivity(), android.R.color.white));menuIcon2.setColorFilter(ContextCompat.getColor(getActivity(), android.R.color.white));menuIcon3.setColorFilter(ContextCompat.getColor(getActivity(), android.R.color.white));menuIcon4.setColorFilter(ContextCompat.getColor(getActivity(), android.R.color.white));menuIcon1.setPadding(15,15,15,15);menuIcon2.setPadding(15,15,15,15);menuIcon3.setPadding(15,15,15,15); //设置的是各个控件之间的距离menuIcon4.setPadding(15,15,15,15);SubActionButton.BuilderitemBuilder = new SubActionButton.Builder(getActivity()); itemBuilder.setLayoutParams(new youtParams(160,160));ImageViewmenuInfo = (ImageView) view.findViewById(_menu);actionMenu= new FloatingActionMenu.Builder(getActivity()).addSubActionView(itemBuilder.setContentView(menuIcon1).build()) .addSubActionView(itemBuilder.setContentView(menuIcon2).build()) .addSubActionView(itemBuilder.setContentView(menuIcon3).build()) .addSubActionView(itemBuilder.setContentView(menuIcon4).build()) .attachTo(menuInfo).setStartAngle(100).setEndAngle(260).build();menuIcon1.setId(R.id.itemId1);menuIcon1.setOnClickListener(this);menuIcon2.setId(R.id.itemId2);menuIcon2.setOnClickListener(this);menuIcon3.setId(R.id.itemId3);menuIcon3.setOnClickListener(this);menuIcon4.setId(R.id.itemId4);menuIcon4.setOnClickListener(this);}private void toSmsManager() {name = (TextView) getActivity().findViewById(_name);phone = (TextView) getActivity().findViewById(_phone);Intent intent = new Intent(getActivity(), ContactSmsActivity.class);intent.putExtra("name", name.getText().toString());intent.putExtra("phone", phone.getText().toString());startActivity(intent);}private void callContact() {phone = (TextView) getActivity().findViewById(_phone);Intent callIntent = new Intent(Intent.ACTION_CALL);callIntent.setData(Uri.parse("tel:" + phone.getText().toString()));if (ContextCompat.checkSelfPermission(getActivity(),Manifest.permission.CALL_PHONE) == PackageManager.PERMISSION_GRANTED) {startActivity(callIntent);} else {Toast toast = Toast.makeText(getActivity(), R.string.alert_no_call_perm, Toast.LENGTH_LONG);toast.show();}}private void editContact() {name = (TextView) getActivity().findViewById(_name);Contact contact = db.getContactByName(name.getText().toString());Intent intent = new Intent(getActivity(), ContactEditionActivity.class);intent.putExtra("contact", contact);startActivity(intent);}private void deleteContact() {AlertDialog dialog = new AlertDialog.Builder(getActivity()).setMessage(getResources().getString(R.string.alert_delete_message)).setCancelable(false).setPositiveButton(getResources().getString(R.string.alert_delete_ok),new DialogInterface.OnClickListener() {public void onClick(DialogInterface dialog, int id) {TextViewtextView = (TextView) getActivity().findViewById(_name);Contact contact =db.getContactByName(textView.getText().toString());db.deleteContact(contact);List<Sms>allSms = db.getAllSmsFromContact(contact.getId());for (Smssms : allSms) {db.deleteSms(sms);}Intent intent = new Intent(getActivity(), MainActivity.class); intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);startActivity(intent);}}).setNegativeButton(getResources().getString(R.string.alert_delete_cancel), null).show();Button buttonPositive = dialog.getButton(DialogInterface.BUTTON_POSITIVE);Button buttonNegative = dialog.getButton(DialogInterface.BUTTON_NEGATIVE);buttonPositive.setTextColor(ContextCompat.getColor(getActivity(),R.color.colorPrimary));buttonNegative.setTextColor(ContextCompat.getColor(getActivity(),R.color.colorPrimary));}}Main程序:package com.example.hivian.my_contact_manager.views.activities;import android.os.Bundle;import android.support.v7.app.AppCompatActivity;import android.support.v7.widget.Toolbar;import com.example.hivian.my_contact_manager.R;import com.example.hivian.my_contact_manager.models.Contact;import com.example.hivian.my_contact_manager.utilities.Utility;import com.example.hivian.my_contact_manager.views.fragments.ContactInfoFragment;import com.example.hivian.my_contact_manager.views.fragments.ContactListFragment;public class MainActivity extends AppCompatActivity implementsContactListFragment.DataPassListener {private ContactListFragment fragmentA;private ContactInfoFragment fragmentB;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(yout.main_activity);if (findViewById(R.id.fragment_holder) != null) {Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); setSupportActionBar(toolbar);if (savedInstanceState != null) {fragmentA= new ContactListFragment();fragmentB= new ContactInfoFragment();return;}fragmentA= new ContactListFragment();fragmentB= new ContactInfoFragment();getSupportFragmentManager().beginTransaction().add(R.id.fragment_holder, fragmentA).commit();Utility.changeStatusBarColor(this);}}@Overridepublic void onBackPressed() {int count = getSupportFragmentManager().getBackStackEntryCount();if (count == 0) {super.onBackPressed();} else {if (fragmentB.actionMenu!= null) {fragmentB.actionMenu.close(true);}getSupportFragmentManager().popBackStack();}}@Overridepublic void passData(Contact contact) {if (fragmentB!= null) {Bundle args = new Bundle();args.putSerializable("contact", contact);fragmentB.setArguments(args);getSupportFragmentManager().beginTransaction().setCustomAnimations(android.R.anim.slide_in_left, android.R.anim.slide_out_right).replace(R.id.fragment_holder, fragmentB).addToBackStack(null)五、实验数据(现象)处理分析下面是程序的截图:软件界面以及各个自文件目录示意图:通讯录在Android手机功能界面上的显示图标以及图标在工程里存放的位置:进入通讯录时的初界面以及图标的配置过程:刚开始运行通讯录时,出现几个权限选择:开始界面(按加号):创建一个新的联系人:会弹出键盘创建联系人的过程中如果格式不规范会有错误提示:比如Email格式错误创建好后的界面(多创建几个联系人),头像可以更改:修改头像时出现的错误如下(照相机和相册里选择合适的头像):接下来进行对通讯录的基本功能测试。
安卓通讯录实训报告
安卓实训设计报告安卓通讯录设计题目:安卓通讯录班级:姓名:学号:指导老师:日期: 2012年6月7日容要求一、题目分析,功能要求。
1.1 实验目的熟悉Android软件开发的基本架构利用Eclipse和ADT插件设计通讯录1.2 功能本手机通讯录工具主要实现五大功能:联系人的查询:字段查询,分组查询,字母排序查询;增加、删除联系人以及修改联系人信息;导入、导出联系人;发送联系人信息;设置。
二、实验设计2.1 UI设计我们用一个ListView来显示整个通讯录,其中用TextView显示每一记录,他们的xml文件分别为:main.xml(通讯录主界面),addres.xml(添加联系人界面),list_item.xml(浏览联系人界面),find.xml(查找联系人界面)。
2.2功能的设计为了在主界面中浏览联系人的信息,并且创建主要菜单栏,我们设计了MainActivity类,主要用于显示联系人信息和菜单栏,通过菜单栏,实现通讯录的相关功能。
AddressBook类主要是为了实现联系人的添加功能,并且实现信息的保存后跳转到主界面。
Findactivity类主要是为了实现联系人的查找功能,输入联系人的,点击查找按钮,显示所查联系人的相关信息。
三、实验程序四、实验效果图五、总结通过设计该通讯录,主要学习了UI设计、数据库的综合操作、动态菜单的使用以及各种权限的注册。
通过本次设计,使我对Android平台的数据库操作有了更进一步的理解,同时也对Android系统有了更深入的了解。
附录一//定义数据public class ContactColumn implements BaseColumns{public ContactColumn(){}//列名public static final String NAME = "name"; //public static final String MOBILENUM = "mobileNumber"; //移动public static final String HOMENUM = "homeNumber"; //家庭public static final String ADDRESS = "address"; //地址public static final String EMAIL = "email"; //public static final String BLOG = "blog"; //博客//列索引值public static final int_ID_COLUMN = 0;public static final int NAME_COLUMN = 1;public static final int MOBILENUM_COLUMN = 2;public static final int HOMENUM_COLUMN = 3;public static final int ADDRESS_COLUMN = 4;public static final int EMAIL_COLUMN = 5;public static final int BLOG_COLUMN = 6;//查询结果public static final String[] PROJECTION ={_ID,NAME,MOBILENUM,HOMENUM,ADDRESS,EMAIL,BLOG,};}public class DBHelper extends SQLiteOpenHelper{public static final String DATABASE_NAME = "mycontacts.db";//数据库名public static final int DATABASE_VERSION = 2; //版本public static final String CONTACTS_TABLE = "contacts"; //表名//创建表private static final String DATABASE_CREATE ="CREATE TABLE " + CONTACTS_TABLE +" ("+ ContactColumn._ID+" integer primary key autoincrement,"+ +" text,"+ ContactColumn.MOBILENUM+" text,"+ ContactColumn.HOMENUM+" text,"+ ContactColumn.ADDRESS+" text,"+ ContactColumn.EMAIL+" text,"+ ContactColumn.BLOG+" text);";public DBHelper(Context context){super(context, DATABASE_NAME, null, DATABASE_VERSION);}public void onCreate(SQLiteDatabase db){db.execSQL(DATABASE_CREATE);}public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion){db.execSQL("DROP TABLE IF EXISTS " + CONTACTS_TABLE);onCreate(db);}}// URI类型转换public String getType(Uri uri){switch (uriMatcher.match(uri)){case CONTACTS:return"vnd.android.cursor.dir/vnd.yarin.android.mycontacts";case CONTACT_ID:return"vnd.android.cursor.item/vnd.yarin.android.mycontacts";default:throw new IllegalArgumentException("Unsupported URI: " + uri);}}// 删除指定数据列Overridepublic int delete(Uri uri, String where, String[] selectionArgs){int count;switch (uriMatcher.match(uri)){case CONTACTS:count = contactsDB.delete(CONTACTS_TABLE, where, selectionArgs);break;case CONTACT_ID:String contactID = uri.getPathSegments().get(1);count = contactsDB.delete(CONTACTS_TABLE,ContactColumn._ID+ "=" + contactID+ (!TextUtils.isEmpty(where) ? " AND (" + where + ")" : ""),selectionArgs);break;default:throw new IllegalArgumentException("Unsupported URI: " + uri);}getContext().getContentResolver().notifyChange(uri, null);return count;}// 插入数据public Uri insert(Uri uri, ContentValues initialValues){if (uriMatcher.match(uri) != CONTACTS){throw new IllegalArgumentException("Unknown URI " + uri);}ContentValues values;if (initialValues != null){values = new ContentValues(initialValues);Log.e(TAG + "insert", "initialValues is not null");}else{values = new ContentValues();}// 设置默认值if (values.containsKey() == false){values.put(, "");}if (values.containsKey(ContactColumn.MOBILENUM) == false){values.put(ContactColumn.MOBILENUM, "");}if (values.containsKey(ContactColumn.HOMENUM) == false){values.put(ContactColumn.HOMENUM, "");}if (values.containsKey(ContactColumn.ADDRESS) == false){values.put(ContactColumn.ADDRESS, "");}if (values.containsKey(ContactColumn.EMAIL) == false){values.put(ContactColumn.EMAIL, "");}if (values.containsKey(ContactColumn.BLOG) == false){values.put(ContactColumn.BLOG, "");}Log.e(TAG + "insert", values.toString());long rowId = contactsDB.insert(CONTACTS_TABLE, null, values);if (rowId > 0){Uri noteUri = ContentUris.withAppendedId(CONTENT_URI, rowId);getContext().getContentResolver().notifyChange(noteUri, null);Log.e(TAG + "insert", noteUri.toString());return noteUri;}throw new SQLException("Failed to insert row into " + uri);}// 更新数据库public int update(Uri uri, ContentValues values, String where, String[] selectionArgs){int count;Log.e(TAG + "update", values.toString());Log.e(TAG + "update", uri.toString());Log.e(TAG + "update :match", "" + uriMatcher.match(uri));switch (uriMatcher.match(uri)){case CONTACTS:Log.e(TAG + "update", CONTACTS + "");count = contactsDB.update(CONTACTS_TABLE, values, where, selectionArgs);break;case CONTACT_ID:String contactID = uri.getPathSegments().get(1);Log.e(TAG + "update", contactID + "");count = contactsDB.update(CONTACTS_TABLE, values, ContactColumn._ID + "=" + contactID+ (!TextUtils.isEmpty(where) ? " AND (" + where + ")" : ""), selectionArgs);break;default:throw new IllegalArgumentException("Unsupported URI: " + uri);}getContext().getContentResolver().notifyChange(uri, null);return count;}}public boolean onPrepareOptionsMenu(Menu menu){super.onPrepareOptionsMenu(menu);final boolean haveItems = getListAdapter().getCount() > 0;if (haveItems){Uri uri = ContentUris.withAppendedId(getIntent().getData(), getSelectedItemId());Intent[] specifics = new Intent[2];specifics[0] = new Intent(Intent.ACTION_EDIT, uri);specifics[1] = new Intent(Intent.ACTION_VIEW, uri);MenuItem[] items = new MenuItem[2];//添加满足条件的菜单Intent intent = new Intent(null, uri);intent.addCategory(Intent.CATEGORY_ALTERNATIVE);menu.addIntentOptions(Menu.CATEGORY_ALTERNATIVE, 0, 0, null, specifics, intent, 0, items);if (items[0] != null){//编辑联系人items[0].setShortcut('1', 'e').setIcon(R.drawable.edituser).setTitle(R.string.editor_user);}if (items[1] != null){//查看联系人items[1].setShortcut('2', 'f').setTitle(R.string.view_user).setIcon(R.drawable.viewuser);}}else{menu.removeGroup(Menu.CATEGORY_ALTERNATIVE);}return true;}<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="schemas.android./apk/res/android"package=".yarin.android.MyContacts"android:versionCode="1"android:versionName="1.0"><application android:icon="drawable/icon" android:label="string/app_name"><provider android:name="ContactsProvider"android:authorities=".yarin.android.provider.ContactsProvider"/><activity android:name=".MyContacts"android:label="string/app_name"><intent-filter><action android:name="android.intent.action.MAIN"/><category android:name="UNCHER"/></intent-filter></activity><activity android:name=".ContactEditor"android:label="string/editor_user"><intent-filter><action android:name="android.intent.action.EDIT"/><category android:name="android.intent.category.DEF AULT"/><data android:mimeType="vnd.android.cursor.item/vnd.yarin.android.mycontacts"/> </intent-filter><intent-filter><action android:name="android.intent.action.INSERT"/><category android:name="android.intent.category.DEF AULT"/><data android:mimeType="vnd.android.cursor.dir/vnd.yarin.android.mycontacts"/> </intent-filter></activity><activity android:name=".ContactView"android:label="string/view_user"><intent-filter><action android:name="android.intent.action.VIEW"/><category android:name="android.intent.category.DEF AULT"/><data android:mimeType="vnd.android.cursor.item/vnd.yarin.android.mycontacts"/> </intent-filter><intent-filter><category android:name="android.intent.category.DEF AULT"/><data android:mimeType="vnd.android.cursor.dir/vnd.yarin.android.mycontacts"/> </intent-filter></activity></application><uses-permission android:name="android.permission.CALL_PHONE"></uses-permission><uses-permission android:name="android.permission.SEND_SMS"></uses-permission><uses-permission android:name="android.permission.RECEIVE_SMS"/><uses-sdk android:minSdkVersion="5"/></manifest>。
Android实验报告—网络通信(word文档良心出品)
实验三Android网络通信实验目的:本实验的目的是使学生深入了解利用Intent实现进程间的通信过程。
学会利用Intent进行Activity的跳转,以及链接网页信息;学会利用Intent将其他Activity 的信息返回到Activity中的方法。
体会Activity间通信的过程。
实验要求:编程实现下述功能:主界面上有一个“登录”按钮和“链接网页”按钮,点击“登录”按钮后打开一个新的Activity;新的Activity上面有输入用户名和密码的控件(如下图所示)点击“链接网页”按钮,新的Activity上面有输入Uri信息的控件,可以链接到相应的网站,在用户关闭这个Activity后,返回到主界面中程序界面如下图所示:[实现提示]1、建立Android工程,其中工程名称:WebCommunication579包名称:.bistu.dj1001. WebCommunication579Activity名称:WebCommunication5792、工程建立完毕后,首先进行界面设计,建立相应的子Layout界面3、在工程中添加相应的.java文件,处理各个Activity的事件响应4、在Manifest中添加新建的Activity信息,进行注册。
程序源码:主界面java文件代码:package cn.deu.bistu.dj1001.WebCommunication579;import android.app.Activity;import android.content.Intent;import .Uri;import android.os.Bundle;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.TextView;public class WebCommunication579 extends Activity { private Button btnLogin,btnGoToWeb;private TextView show;private static final int SUBACTIVITY1 = 1;@Overridepublic void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);setContentView(yout.main);btnLogin=(Button) findViewById(R.id.btnLogin); btnGoToWeb=(Button) findViewById(R.id.btnGoToWeb); show=(TextView) findViewById(R.id.A1show);btnLogin.setOnClickListener(new OnClickListener(){ public void onClick(View v) {Intent intent = new Intent(WebCommunication592.this, activity1.class);startActivityForResult(intent, SUBACTIVITY1);}});btnGoToWeb.setOnClickListener(new OnClickListener(){ public void onClick(View v) {Intent intent = new Intent(WebCommunication592.this, activity2.class);startActivity(intent);}});}protected void onActivityResult(int requestCode, intresultCode, Intent data) {super.onActivityResult(requestCode, resultCode, data);switch(requestCode){case SUBACTIVITY1:if(resultCode == RESULT_OK){Uri uriData = data.getData();show.setText(uriData.toString());}break;}};}界面一java文件代码:package cn.deu.bistu.dj1001.WebCommunication579;import android.app.Activity;import android.content.Intent;import .Uri;import android.os.Bundle;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.EditText;public class activity1 extends Activity {private Button btnOK,btnCancel;private EditText edtInput;public void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(yout.activity1);edtInput=(EditText) findViewById(R.id.edtA1Input);btnOK=(Button) findViewById(R.id.btnA1OK);btnCancel=(Button) findViewById(R.id.btnA1Cancel);btnOK.setOnClickListener(new OnClickListener(){public void onClick(View v) {String uriString = edtInput.getText().toString();Uri data = Uri.parse(uriString);Intent result = new Intent(null, data);setResult(RESULT_OK, result);finish();}});btnCancel.setOnClickListener(new OnClickListener(){public void onClick(View view){finish();}});}}界面二java文件代码:package cn.deu.bistu.dj1001.WebCommunication579;import android.app.Activity;import android.content.Intent;import .Uri;import android.os.Bundle;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.EditText;public class activity2 extends Activity {private EditText edtInput;private Button btnOK,btnCancel;public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);setContentView(yout.activity2);edtInput=(EditText) findViewById(R.id.edtA2Input);btnOK=(Button) findViewById(R.id.btnA2OK);btnCancel=(Button) findViewById(R.id.btnA2Cancel);btnOK.setOnClickListener(new OnClickListener(){ public void onClick(View v) {Intent intent = new Intent(Intent.ACTION_VIEW,Uri.parse(edtInput.getText().toString()));startActivity(intent);}});btnCancel.setOnClickListener(new OnClickListener(){public void onClick(View v) {finish();}});}}主界面的xml文件代码:<LinearLayoutxmlns:android="/apk/res/android" android:orientation="Horizontal"android:layout_width="fill_parent"android:layout_height="fill_parent"><Buttonandroid:text="登录"android:id="@+id/btnLogin"android:layout_width="wrap_content"android:layout_height="wrap_content"></Button><Buttonandroid:text="链接网页"android:id="@+id/btnGoToWeb"android:layout_width="wrap_content"android:layout_height="wrap_content"></Button><TextViewandroid:text=""android:id="@+id/A1show"android:layout_width="wrap_content"android:layout_height="wrap_content"></TextView></LinearLayout>界面一的xml文件代码:<LinearLayoutandroid:orientation="Horizontal"android:layout_width="fill_parent"android:layout_height="fill_parent"xmlns:android="/apk/res/android"> <LinearLayoutandroid:layout_width="wrap_content"android:layout_height="wrap_content"><TextViewandroid:text="用户名和密码:"android:layout_width="wrap_content"android:layout_height="wrap_content"></TextView><EditTextandroid:text=""android:id="@+id/edtA1Input"android:layout_width="wrap_content"android:layout_height="wrap_content"></EditText></LinearLayout><LinearLayoutandroid:layout_width="wrap_content"android:layout_height="wrap_content"><Buttonandroid:text="确定"android:id="@+id/btnA1OK"android:layout_width="wrap_content"android:layout_height="wrap_content"></Button><Buttonandroid:text="取消 "android:id="@+id/btnA1Cancel"android:layout_width="wrap_content"android:layout_height="wrap_content"></Button></LinearLayout></LinearLayout>界面二的xml文件代码:<LinearLayoutandroid:id="@+id/LinearLayout01"android:orientation="Horizontal"android:layout_width="fill_parent"android:layout_height="fill_parent"xmlns:android="/apk/res/android"> <EditTextandroid:text=""android:id="@+id/edtA2Input"android:layout_width="match_parent"android:layout_height="wrap_content"></EditText><Buttonandroid:text="确定"android:id="@+id/btnA2OK"android:layout_width="wrap_content"android:layout_height="wrap_content"></Button><Buttonandroid:text="取消"android:id="@+id/btnA2Cancel"android:layout_width="wrap_content"android:layout_height="wrap_content"></Button></LinearLayout>程序运行结果:程序包:主界面:点击登录按钮后:点击确定按钮后:点击链接网页按钮后:点击确定按钮后:实验心得体会:通过本次实验深入了解了Intent实现进程间的通信过程。
Android报告 _通讯录
计算机技术与工程学院课程设计报告课程名称:移动互联网设备程序设计设计题目:手机通讯录学生姓名:**学号:**********专业班级:软件1242指导教师:王文涛张东辉起止时间:9月21日至10月10日内容表现成果报告总评成绩目录1.前言 (01)2.设计主要功能 (03)3.技术介绍 (04)4.总体设计 (04)5.程序数据库的表格代码 (07)6.详细设计 (07)7.分组的业务处理 (08)8.添加分组 (09)9.删除分组 (10)10.重命名 (10)11.添加联系人 (11)12.联系人的业务处理 (12)13.删除联系人 (13)14.移动联系人 (14)15.联系人功能 (15)16.设计总结 (16)17.参考文献 (16)前言1.智能手机的市场(1)功能多样化的智能手机挑战全球PC出货量移动互联网时代的来临,直接促进了搭载智能操作系统、具有强大扩展性的智能手机、平板电脑等移动终端产业的蓬勃发展。
来自美国最大的风险投资机构KPCB 的数据显示,全球智能手机出货量正在以远高于台式电脑、笔记本电脑出货量的速度快速增长,该机构预计2011年全球智能手机出货量将达到4.13亿,超过台式电脑与笔记本电脑出货量的总和。
(2)智能手机的用户使用数量正在高速增长。
据市场调研机构Gartner信息,2011年全球智能手机的总出货量将会达到4.68亿部,相比2010年实现了57.7%的增长,而谷歌Android操作系统将会在今年之内成为全球最大的智能手机操作系统。
另外,全球市场调研机构IDC预计未来5年中国手机市场上,智能手机替代传统功能手机的趋势将日益明显,未来5年中国智能手机市场复合增长率将达到34.1%,人们对IT设备智能化的向往是这一增长率能够实现的主要因素,并且与其他国家相比,中国智能手机市场的发展空间更加广阔。
(3)操作系统格局预测:Android有望成为智能手机市场主导力量搭载Android操作系统的智能手机目前已经成为市场上最炙手可热的智能产品。
Android实验报告_基于SQLite的通信录
第一次实验Android界面设计一、实验目的及实验环境1、实验目的1)掌握SQLiteOpenHelper类结构2)掌握基于SQLite数据库的应用开发过程3)掌握Content Provider发布数据的方法4)掌握Content Resolver获取数据的方法2、实验环境系统开发平Android Studio 3、0系统开发平台:Android 7、1运行平台:Windows10 x64运行环境:Microsoft、NET Framework SDK 2、0二、实验教材、组织方式、实验内容1、实验教材: Andorid开发与应用2、组织方式:个人独立完成2、实验内容:实现基于SQLite数据库的通信录应用,通过单击增加图标打开添加通信录界面,通过单击通信录中的各条信息可删除选中项。
三.方案设计Android系统中集成了SQLite数据库,并且为数据库的操作提供了相关的类与方法,便于没有数据库开发经验的开发者编写程序。
另外,Android平台中利用Content Provider机制来实现跨应用程序数据共享。
一个应用程序可以通过Content Provider来发布自己的数据,其她的应用程序可以通过Content Resolver来获取共享数据。
四.运行结果五.总结通过这次实验掌握了SQLite OpenHelper类结构,掌握了基于SQLite数据库的应用开发过程以及Content Provider发布数据的方法与掌握Content Resolver获取数据的方法。
六.附录:源代码主布局文件activity_main、xml:<LinearLayout xmlns:android="、android、com/apk/res/android"<TextViewandroid:id="@+id/title"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="通信录"/><ListViewandroid:id="@+id/listView"android:layout_width="wrap_content"android:layout_height="wrap_content"></ListView> <Buttonandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:onClick="add"/></LinearLayout>添加联系人布局文件addrelation、xml:<?xml version="1、0"encoding="utf-8"?><LinearLayout xmlns:android="、android、com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="姓名"/><EditTextandroid:id="@+id/addName"android:layout_width="wrap_content"android:layout_height="wrap_content"/><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="电话"/><EditTextandroid:id="@+id/addTel"android:layout_width="wrap_content"android:layout_height="wrap_content"/><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="所属组"/><Spinnerandroid:id="@+id/addGroup"android:layout_width="wrap_content"android:layout_height="wrap_content"android:entries="@array/test"></Spinner><Buttonandroid:id="@+id/save"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_gravity="center"android:text=" 保存 "/></LinearLayout>主Activity文件MainActivity、java:import android、support、v7、app、ActionBarActivity;import android、app、AlertDialog;import android、app、Application;import android、content、DialogInterface;import android、content、Intent;import android、database、Cursor;import android、os、Bundle;import android、view、Menu;import android、view、MenuItem;import android、view、View;import android、widget、AdapterView;import android、widget、ListView;import android、widget、SimpleCursorAdapter;public class MainActivity extends ActionBarActivity {private ListView listView;protected void onCreate(Bundle savedInstanceState) {super、onCreate(savedInstanceState);setContentView(R、layout、activity_main);listView = (ListView) findViewById(R、id、listView);// getRelationFromDB();}private void getRelationFromDB() {final DatabaseHelper dbHelper = new DatabaseHelper(this);Cursor cursor = dbHelper、query();String[] from = { "_id", "name", "tel", "groupName" };int[] to = { R、id、_id, R、id、name, R、id、tel, R、id、group };SimpleCursorAdapter scadapter = new SimpleCursorAdapter(this,R、layout、relationlist, cursor, from, to);listView、setAdapter(scadapter);listView、setOnItemClickListener(new AdapterView、OnItemClickListener() {public void onItemClick(AdapterView<?> adapter, View view,int position, long id) {final long temp = id;AlertDialog、Builder adBuilder = new AlertDialog、Builder(MainActivity、this);adBuilder、setMessage("确认要删除记录不?")、setPositiveButton("确认",new DialogInterface、OnClickListener() {@Overridepublic void onClick(DialogInterface dialog,int which) {// TODO Auto-generated method stubdbHelper、del((int) temp);Cursor cursor = dbHelper、query();String[] from = { "_id", "name", "tel","groupName" };int[] to = { R、id、_id, R、id、name,R、id、tel, R、id、group };SimpleCursorAdapter scadapter = new SimpleCursorAdapter (getApplicationContext(),R、layout、relationlist, cursor,from, to);MainActivity、this、listView、setAdapter(scadapter);}})、setNegativeButton("取消",new DialogInterface、OnClickListener() {@Overridepublic void onClick(DialogInterface dialog,int which) {}});AlertDialog aleraDialog = adBuilder、create();aleraDialog、show();}});dbHelper、close();}public void add(View view) {Intent intent = new Intent(MainActivity、this, AddrelationActivity、class);startActivityForResult(intent, 0x111);}protected void onActivityResult(int requestCode, int resultCode, Intent data) {super、onActivityResult(requestCode, resultCode, data);if (requestCode == 0x111 && resultCode == 0x111) {getRelationFromDB();}}@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) {// Handle action bar item clicks here、 The action bar will// automatically handle clicks on the Home/Up button, so long// as you specify a parent activity in AndroidManifest、xml、int id = item、getItemId();if (id == R、id、action_settings) {return true;}return super、onOptionsItemSelected(item);}}添加联系人AddrelationActivity、javaimport android、app、Activity;import android、app、AlertDialog;import android、content、ContentValues;import android、content、DialogInterface;import android、content、Intent;import android、os、Bundle;import android、view、View;import android、widget、EditText;import android、widget、Spinner;public class AddrelationActivity extends Activity {private EditText addName, addTel;private Spinner addGroup;protected void onCreate(Bundle savedInstanceState) {super、onCreate(savedInstanceState);setContentView(R、layout、addrelation);addName = (EditText) findViewById(R、id、addName);addTel = (EditText) findViewById(R、id、addTel);addGroup = (Spinner) findViewById(R、id、addGroup);}public void save(View view) {final ContentValues values = new ContentValues();values、put("name", addName、getText()、toString());values、put("tel", addTel、getText()、toString());values、put("groupName", addGroup、getSelectedItem()、toString());final DatabaseHelper dbHelper = new DatabaseHelper(getApplicationContext());final AlertDialog、Builder adBuilder = new AlertDialog、Builder(this);adBuilder、setMessage("确认保存记录不?")、setPositiveButton("确认", new DialogInterface、OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {// TODO Auto-generated method stubdbHelper、insert(values);Intent intent = getIntent();setResult(0x111, intent);AddrelationActivity、this、finish();}})、setNegativeButton("取消", new DialogInterface、OnClickListener() {public void onClick(DialogInterface dialog, int which) {}});AlertDialog aleraDialog = adBuilder、create();aleraDialog、show();}}。
安卓实验报告书docx2024
引言:本文是关于安卓实验的报告书,主要对实验过程、实验结果和实验总结进行详细阐述。
本次实验的目的是学习和实践安卓开发的基础知识和技能,通过实验掌握安卓应用的开发流程以及常用控件和功能的实现方法。
概述:正文内容:1.控件的使用1.1Button按钮的使用1.2EditText文本输入框的使用1.3TextView文本显示控件的使用1.4ImageView图片显示控件的使用1.5CheckBox复选框的使用1.6RadioButton单选按钮的使用1.7Spinner下拉列表的使用1.8ListView列表控件的使用1.9ProgressBar进度条控件的使用2.布局的设计2.1LinearLayout线性布局的使用2.2RelativeLayout相对布局的使用2.3FrameLayout帧布局的使用2.4TableLayout表格布局的使用2.5ConstrntLayout约束布局的使用2.6ScrollView滚动布局的使用2.7GridLayout网格布局的使用2.8DrawerLayout抽屉布局的使用2.9CoordinatorLayout协调布局的使用3.数据存储与读取3.1SharedPreferences轻量级数据存储的使用3.2文件存储与读取的方法3.3SQLite数据库的使用3.4ContentProvider内容提供者的使用3.5数据库升级与版本管理4.网络通信4.4Retrofit的使用4.5JSON数据的解析与封装4.6网络请求的异步处理4.7WebSocket的实现方法4.8WebView的使用5.应用调试与测试5.1Logcat日志调试工具的使用5.2AndroidProfiler性能分析工具的使用5.3Monkey测试工具的使用5.4JUnit测试框架的使用5.5Espresso自动化测试的使用5.6MonkeyRunner自动化测试的使用5.7UIAutomator自动化测试的使用5.8Appium跨平台测试框架的使用5.9FirebaseTestLab云端测试的使用总结:通过本次实验,我对安卓开发的基础知识和技能有了更深入的了解。
Android手机通讯录实验报告
Android手机通讯录实验报告学院:安徽机电职业技术学院专业:软件技术班级:软件3141姓名:张程庆小分组指导老师:范宏宇小组分组详细信息组长:张程庆文档:赵晶蓉编程:蔡婷、刘朝群、宋昱昊界面:江晓雨测试:王健康目录1.系统描述1.1问题描述 (1)1.2功能描述 (2)1.3数据需求 (3)1.4设计意义 (4)2.界面设计2.1主界面 (5)2.2新建界面 (6)2.3修改界面 (7)2.4查询界面 (8)2.5添加界面 (9)3.运用的组件4.java代码部分截图5.xml代码部分截图6.设计总结与收获1.系统描述1.1问题描述在我们学习完Android的相关知识以及软件技术这门学科所涉及的不同编程语言,让我们在现在这个学习阶段对软件编程有了一定的了解,这次的实验是做我们都很熟悉的通讯录,实现手机通讯录的基本功能,包括添加手机联系人,查询手机联系人,删除手机联系人等最基本操作。
这次的手机通讯录是以java语言为主体,xml布局,结合Android 的移动开发平台等实现安卓手机通讯录的基本操作,做到基本的操作都能够完好的运行,在数据丢失后也能够及时的找回。
1.2功能描述1.3数据需求本程序是编程通讯录的相关信息,包括联系人姓名、手机号码、公司号码、存储信息等,在我们的通讯录中利用客户输入的相关用户信息进行保存从而传输到数据库中。
1.4设计意义我们设计的通讯录包括添加联系人、删除联系人、修改联系人信息、存储联系人信息等基本的手机通讯录的功能,在现在的信息和现代化社会环境下,为了更加方便的找到我们的朋友或家人,我们需要更加简洁方便手机通讯录来方便我们联系他人,随着手机的不断更新换代我们的通讯录也向着更加人性化的方向发展着。
在未来的发展中,通讯录作为手机最基本的功能,对人们的影响也有了一定的程度,人们也越发多的使用着手机通讯录,相信在今后的发展中我们会做到更好,更方便他们的生活。
实现人与人更亲密的互动。
Android 实验报告 Sqlite 数据库操作
String sql = "create table if not exists user_info (_id integer "
+ " primary key autoincrement,"
+ " username varchar(255),"
+ " password varchar(255)"
View rootView = inflater.inflate(yout.show_question, container, false);
intent.putExtra("user",username);
startActivity(intent);
}else{
Toast.makeText(LoginActivity.this,"不可以登录",Toast.LENGTH_SHORT).show();
}
}
});
}
}
content_entry.xml:
Button login = (Button)findViewById(R.id.login);
login.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String username = ((EditText)findViewById(ername)).getText().toString();
/**/
Button register = (Button)findViewById(R.id.register);
关于android studio sqlite数据库实验总结
关于android studio sqlite数据库实验总结作为一个Android Studio的SQLite数据库实验,以下是一些总结:1. 安装SQLite驱动程序:要在Android Studio中使用SQLite,需要安装SQLite驱动程序。
可以使用Android SDK中的工具包安装,具体步骤可以参考SQLite官方文档。
2. 创建SQLite数据库:在Android Studio中创建一个SQLite 数据库,可以在Project--> Database中创建。
在创建数据库时,需要提供一个数据库名称和密码,并设置数据库连接的用户名和密码。
3. 连接SQLite数据库:可以使用Android Studio提供的SQLite 连接工具,在Project--> Database中选择创建的SQLite数据库,然后选择连接工具。
连接时需要提供数据库名称和密码,以及连接服务器的地址和端口号。
4. 创建和保存数据库表:在Android Studio中创建和保存数据库表可以使用SQL语句。
可以使用SQLite的CREATE TABLE语句来创建表,也可以使用INSERT、SELECT等语句来创建、更新和删除表的数据。
5. 操作数据库表:在Android Studio中可以通过SQL语句和Android API来操作数据库表。
可以使用Android Studio提供的SQLite API来执行SELECT、INSERT、UPDATE、DELETE等SQL操作,也可以使用Java API来执行这些操作。
6. 保存和备份数据库:在完成数据库操作后,需要保存和备份数据库。
可以使用Android Studio提供的SQLite连接工具来保存数据库,也可以使用其他工具来备份数据库。
7. 调试数据库操作:在Android Studio中可以通过SQLite连接工具和Android API来调试数据库操作。
安卓开发实验报告2024
引言概述:第一大点: 安卓界面设计1. 设计布局:介绍如何使用安卓的布局来创建用户界面,并讨论线性布局、相对布局和表格布局等常用的布局方式。
2. 视图和控件:详细说明安卓的视图和控件的概念,如文本框、按钮、图像视图等,并讨论如何使用这些视图和控件来构建用户界面。
3. 事件处理:解释如何处理各种用户事件,如点击事件、滑动事件等,并介绍如何使用事件处理来实现用户和应用程序的交互。
第二大点: 安卓数据存储1. SQLite数据库:介绍SQLite数据库在安卓开发中的应用,包括数据库的创建、插入、查询和更新等操作,并讨论如何使用SQLite数据库来存储和管理应用程序的数据。
2. SharedPreferences:解释SharedPreferences的概念和使用方法,讨论如何使用SharedPreferences来存储应用程序的偏好设置和配置信息。
3. 文件存储:详细说明在安卓中如何使用文件来存储和读取数据,并讨论内部存储和外部存储的区别以及如何处理文件读写操作的权限问题。
第三大点: 安卓网络通信2. 网络状态监测:解释如何使用安卓提供的API来监测设备的网络状态,并讨论如何在没有网络连接的情况下做出适当的处理。
3. JSON和XML解析:详细介绍如何解析JSON和XML格式的数据,并讨论如何使用解析后的数据进行相关操作。
第四大点: 安卓多媒体开发1. 音频播放:介绍如何在安卓应用中播放音频文件,包括本地音频文件和网络音频流的播放,并讨论如何控制音频播放的各种属性。
2. 视频播放:解释如何在安卓应用中播放视频文件,包括本地视频文件和网络视频流的播放,并讨论如何实现视频播放的控制功能。
3. 图像处理:详细说明如何在安卓应用中处理图像,包括加载图片、缩放图片、裁剪图片等操作,并讨论如何处理图像的格式和大小的问题。
第五大点: 安卓性能优化1. 内存管理:介绍如何合理地使用安卓的内存,包括减少内存占用和处理内存泄漏的方法,并讨论如何使用其他工具来监控和优化应用程序的内存使用情况。
基于ANDROID+SQLITE的手机通讯录管理器
数据库课程设计基于Android+SQLite的手机通讯录管理器课程名称____数据库系统_____学生学院____计算机学院______专业班级___学号___________学生姓名_______________指导教师________________2013年1月3日目录一、系统定义 (1)二、需求分析 (1)三、系统设计 (5)四、详细设计 (13)五、课程设计总结 (20)六、参考文献 (21)七、附录 (22)一、选择这个课题的理由学了数据库系统整整一个学期,在大学以来学了这么多门课说实话数据库系统这门我觉得是为数不多的随着手机移动端的日益普及,手机成为人们生活中不可缺少的一部分。
二、需求分析(一)系统综合需求系统开发的总体任务是要实现企业人事信息关系的系统化,规范化和自动化。
系统功能分析是在系统开发的总体任务的基础之上完成的。
人事管理系统主要有以下几项功能:1.员工档案的管理:包括员工基本信息,所在部门,工作信息和工作简历的输入,员工信息的查询和修改。
2.员工考勤的管理:包括考勤的添加,查询,修改和删除。
3.员工工资的管理:包括工资的添加,工资报表的查询,修改和删除。
4.员工评价的管理:包括评价的输入,查询和修改。
5.人事变动的详细记录,包括岗位和部门的调整,便于掌握人员的动向,及时调整人才的分配。
6.企业所有部门的查询与管理。
7.管理员以及其它功能模块。
(二)系统逻辑模型1.数据流程图根据系统功能的要求,可以将系统分解成几个功能模块来分别设计,功能模块如图2-1所示:企业人事管理系统员工管理人事变动部门管理图2-1系统功能模块图2.数据字典该软件的数据库由下述四张数据表组成:员工信息表:PERSONNEL.DBF基础工资设置表:COURSE.DBF岗位工资设置表:RANK.DBF工龄工资设置表:GONGLING.DBF1、员工信息表:PERSONNEL.DBF字段字段名类型宽度说明1员工号字符型3数字2员工姓名字符型10小于等于5个汉字3员工性别字符型2“男”或“女”4岗位名称字符型14小于等于7个汉字5工龄数值型21-99之间6工资等级数值型21-99之间2、基础工资设置表:COURSE.DBF字段字段名类型宽度说明1工资等级数值型21-99之间2工资标准数值型41-9999之间3、岗位工资设置表:RANK.DBF字段字段名类型宽度说明1岗位名称字符型14小于等于7个汉字2工资标准数值型41-9999之间4、工龄工资设置表:GONGLING.DBF字段字段名类型宽度说明1工资等级数值型21-99之间2工资标准数值型41-9999之间5、管理员注册表:ADMINER.DBF字段字段名类型宽度说明1注册名字符型10任意字符2口令字符型10英文字母或数字三、系统设计(一)数据库概念设计分析前面的系统功能要求,需要一个表来存储和管理员工信息,使系统能够接受员工原始的各项数据,以实现数据录入、查询或统计员工信息等功能。
Android报告 _通讯录
计算机技术与工程学院课程设计报告课程名称:移动互联网设备程序设计设计题目:手机通讯录学生姓名:**学号:**********专业班级:软件1242指导教师:王文涛张东辉起止时间:9月21日至10月10日内容表现成果报告总评成绩目录1.前言 (01)2.设计主要功能 (03)3.技术介绍 (04)4.总体设计 (04)5.程序数据库的表格代码 (07)6.详细设计 (07)7.分组的业务处理 (08)8.添加分组 (09)9.删除分组 (10)10.重命名 (10)11.添加联系人 (11)12.联系人的业务处理 (12)13.删除联系人 (13)14.移动联系人 (14)15.联系人功能 (15)16.设计总结 (16)17.参考文献 (16)前言1.智能手机的市场(1)功能多样化的智能手机挑战全球PC出货量移动互联网时代的来临,直接促进了搭载智能操作系统、具有强大扩展性的智能手机、平板电脑等移动终端产业的蓬勃发展。
来自美国最大的风险投资机构KPCB 的数据显示,全球智能手机出货量正在以远高于台式电脑、笔记本电脑出货量的速度快速增长,该机构预计2011年全球智能手机出货量将达到4.13亿,超过台式电脑与笔记本电脑出货量的总和。
(2)智能手机的用户使用数量正在高速增长。
据市场调研机构Gartner信息,2011年全球智能手机的总出货量将会达到4.68亿部,相比2010年实现了57.7%的增长,而谷歌Android操作系统将会在今年之内成为全球最大的智能手机操作系统。
另外,全球市场调研机构IDC预计未来5年中国手机市场上,智能手机替代传统功能手机的趋势将日益明显,未来5年中国智能手机市场复合增长率将达到34.1%,人们对IT设备智能化的向往是这一增长率能够实现的主要因素,并且与其他国家相比,中国智能手机市场的发展空间更加广阔。
(3)操作系统格局预测:Android有望成为智能手机市场主导力量搭载Android操作系统的智能手机目前已经成为市场上最炙手可热的智能产品。
android程序设计报告(手机通讯录)
Android实验报告课程名称 Android应用程序开发题目名称 Android通讯录学生学院计算机学院班级学号学生姓名指导教师2012年06 月11日一.程序名称:Android通讯录二.主要功能:本手机通讯录工具主要实现五大功能:联系人的查询:字段查询,分组查询,字母排序查询;增加、删除联系人以及修改联系人信息;导入、导出联系人;发送联系人信息;设置。
三.功能实现概述:2.1 UI设计我们用一个ListView来显示整个通讯录,其中用TextView显示每一记录,他们的xml文件分别为:通讯录主界面,添加联系人界面,浏览联系人界面,查找联系人界面。
2.2 数据库的设计Android中的android.database.sqlite.SQLiteOpenHelper 类是一个专门用于数据库创建和版本管理的辅助类。
因此,为了更好的管理数据库,这里我们创建一个继承自SQLiteOpenHelper的辅助类DBHelper来维护和更新数据库。
2.3功能的设计为了在主界面中浏览联系人的信息,并且创建主要菜单栏,我们设计了MainActivity类,主要用于显示联系人信息和菜单栏,通过菜单栏,实现通讯录的相关功能。
AddressBook类主要是为了实现联系人的添加功能,并且实现信息的保存后跳转到主界面。
Findactivity类主要是为了实现联系人的查找功能,输入联系人的姓名,点击查找按钮,显示所查联系人的相关信息。
四.程序截图:测试手机:三星Galaxy Nexus手机系统版本:4.0.2模拟环境:安卓4.0.3图1:主界面 1 图2:主界面2图3:主界面3 图4:创建联系人图5:编辑联系人 图6:删除联系人五. 课程总结通过设计该通讯录,主要学习了UI 设计、数据库的综合操作、动态菜单的使用以及各种权限的注册。
通过本次设计,使我对Android 平台的数据库操作有了更进一步的理解,同时也对Android 系统有了更深入的了解。
手机通讯录实验报告及使用说明(附源代码)
手机通讯录实验报告及使用说明(附源代码)自查报告。
标题,手机通讯录实验报告及使用说明(附源代码)。
自查报告:
在进行手机通讯录实验及使用说明的撰写过程中,我仔细阅读
了实验要求,并按照要求完成了实验报告的撰写和源代码的整理。
在此过程中,我遇到了一些困难,但通过查阅资料和请教老师同学,最终顺利完成了任务。
在实验报告中,我详细描述了手机通讯录的功能和使用方法,
包括添加联系人、查找联系人、编辑联系人信息、删除联系人等操作。
我还附上了源代码,并对关键部分进行了解释和注释,以便他
人能够理解和使用。
在整个实验过程中,我学习到了许多关于手机通讯录的知识,
包括数据库的设计和操作、用户界面的设计和实现等。
通过动手实践,我加深了对这些知识的理解,并提升了自己的编程能力。
在撰写实验报告的过程中,我也注意到了一些自己的不足之处,比如在代码注释和格式上还有待改进。
因此,我会继续努力学习,
不断提升自己的编程水平和文档撰写能力。
总的来说,通过这次实验和撰写实验报告,我收获颇丰,不仅
掌握了手机通讯录的设计和实现方法,还提升了自己的综合能力。
我会继续努力,为以后更多的实验和项目做好准备。
自查人,XXX。
日期,XXXX年XX月XX日。
(完整word版)android实验报告范文模板
(完整word版)android实验报告范文模板移动应用开发实验报告实验名称音乐播放器班级学号姓名指导教师实验成绩2022年04月一、实验目的本项目是一款基于Android手机平台的音乐播放器,使Android手机拥有个性的多媒体播放器,使手机显得更生动灵活化,与人们更为接近,让手机主人随时随地处于音乐视频的旋律之中。
使人们的生活更加多样化。
也使设计者更加熟练Android的技术和其它在市场上的特点。
二、实验内容及要求在其中写清楚这个实验具体要你做什么,怎么做,要达到什么样的效果等。
本设计实现的主要功能是播放Mp3,Wav多种格式的音乐文件,并且能够控制播放,暂停,停止,,下一首,上一首播放列等基本播放控制功能,界面简明,操作简单。
三、实验方案设计在其中写清楚你的程序的详细设计,用流程图配文字的形式描述。
如果其中涉及到算法,一定要把算法阐述清楚。
3.1.1假设安装了音乐播放器的用户是系统的主要设计对象,其拥有以下操作,启动软件、播放音乐、暂停播放、停止播放、退出软件,其用例图如下图2.1播放器基本用例图3.1.2用例分析2用例名称:启动软件参与者:用户目标:使得用户启动软件并加载手机和d卡上的音频文件到播放列表前置条件:无基本事件流:1.用户启动软件2.播放器将播放列表中的当前的歌曲用例名称:播放参与者:用户目标:使得用户可以播放在播放列表中选中的歌曲前置条件:播放器正在运行基本事件流:1.用户单击“播放”按钮2.播放器将播放列表中的当前的歌曲用例名称:暂停参与者:用户目标:使得用户可以暂停正在播放的歌曲前置条件:歌曲正在播放且未停止和暂停基本事件流:1.用户单击“暂停”按钮2.播放器将暂停当前的歌曲④用例名称:停止参与者:用户目标:使得用户可以停止正在播放的歌曲前置条件:歌曲正在播放或暂停基本事件流:1.用户单击“停止”按钮2.播放器将停止当前播放的歌曲⑤用例名称:推出参与者:用户目标:使得用户退出或者后台播放音乐前置条件:程序在运行基本事件流:1.用户按返回键2.播放器退出或者进入后台播放四、实验测试Step1.启动软件后,软件自动检索手机和d卡的音频文件,并组织显示成列表.Step2.点击列表的歌曲名字。
Android编写的通讯录以及实验报告
课程名称Android高级编程班级11sf01 实验日期2013-09-10姓名学号指导教师周景实验成绩95一、实验名称Android开发基础实验二、实验目的及要求1,创建一个联系人的类Contact作为联系人对象的抽象,联系人类的可以包含属性包括:姓名,电话,手机号码,Email,QQ号码,备注信息等等;2,利用联系人类可以实例化联系人对象,例如一个联系人对象的信息可以是:(姓名,张三),(电话,12345678),(手机号码,133****5678),(Email,******************),其他的信息为空。
3,使用XML布局文件创建一个显示联系人信息的界面,在Activity中使用代码加载这个界面。
三、实验环境PC, Android SDK, Eclipse四、实验内容创建一个显示联系人信息的界面五、过程及实验结果1, 任务一:在Eclipse中创建一个Android Application Project,选择合适的应用名称,例如:Contacts、AddressBook或者其他有自己特色的名字,选择合适的Package名称,例如:su.contacts。
2,在工程中创建一个新的Class,名称是Contact,下面是Contact 类的参考实现。
3,实例化一个Contact对象。
4,任务三:使用XML布局文件创建一个显示联系人信息的界面,参考实现如下(注意:用于显示姓名,手机和电子邮件的三个TextView 控件设置了android:id属性,该属性的值作为参数来调用Activity 的findViewById方法就可以获取这三个TextView控件的引用)。
5,任务四:通过findViewById方法获取三个TextView对象,然后调用TextView的setText方法设置显示的文字信息。
六、实验小结1、任务一:在Eclipse中创建一个Android Application Project,名称:Contact;Package,名称:su.contacts。
SQLite应用——通信录_Android应用程序设计_[共6页]
78 删改查”功能的例子代码如下。
public void insert(Contact contact){db.execSQL("insert into contact(name, phone, email, street, city) values (?,?,?,?,?)",new Object[]{contact.getName(),contact.getPhone(),contact.getEmail(),contact.getStreet(),contact.getCity()});}public void delete(long id){db.execSQL("delete from contact where _id="+id);}public void update(Contact contact){db.execSQL("update contact set name=?,phone=?,email=?,street=?,city=? where _id=?",new Object[]{contact.getName(),contact.getPhone(),contact.getEmail(),contact.getStreet(),contact.getCity(),contact.getId()});}public Contact findById(long id){Contact contact = new Contact();Cursor cursor = db.rawQuery("select *from contact where _id=?", new String[]{Long. toString(id)});if(cursor.moveToNext()){contact.setId(cursor.getLong(0));contact.setName(cursor.getString(cursor.getColumnIndex("name")));contact.setPhone(cursor.getString(cursor.getColumnIndex("phone")));contact.setEmail(cursor.getString(cursor.getColumnIndex("email")));contact.setStreet(cursor.getString(cursor.getColumnIndex("street")));contact.setCity(cursor.getString(cursor.getColumnIndex("city")));}cursor.close();return contact;}public Cursor findAll(){return db.rawQuery("select _id, name from contact order by name", null);}6.3.4 SQLite应用——通信录本节以通信录应用为例,讲解在实际的Android应用中如何进行数据库开发。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第一次实验Android界面设计一. 实验目的及实验环境1. 实验目的1)掌握SQLiteOpenHelper类结构2)掌握基于SQLite数据库的应用开发过程3)掌握Content Provider发布数据的方法4)掌握Content Resolver获取数据的方法2.实验环境系统开发平Android Studio 3.0系统开发平台:Android 7.1运行平台:Windows10 x64运行环境: Framework SDK 2.0二. 实验教材、组织方式、实验内容1.实验教材:Andorid开发与应用2.组织方式:个人独立完成2.实验内容:实现基于SQLite数据库的通信录应用,通过单击增加图标打开添加通信录界面,通过单击通信录中的各条信息可删除选中项。
三.方案设计Android系统中集成了SQLite数据库,并且为数据库的操作提供了相关的类和方法,便于没有数据库开发经验的开发者编写程序。
另外,Android平台中利用Content Provider机制来实现跨应用程序数据共享。
一个应用程序可以通过Content Provider来发布自己的数据,其他的应用程序可以通过Content Resolver 来获取共享数据。
四.运行结果五.总结通过这次实验掌握了SQLite OpenHelper类结构,掌握了基于SQLite数据库的应用开发过程以及Content Provider发布数据的方法和掌握Content Resolver获取数据的方法。
六.附录:源代码主布局文件activity_main.xml:<LinearLayoutxmlns:android="/apk/res/android"<TextViewandroid:id="@+id/title"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="通信录"/><ListViewandroid:id="@+id/listView"android:layout_width="wrap_content"android:layout_height="wrap_content"></ListView> <Buttonandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:onClick="add"/></LinearLayout>添加联系人布局文件addrelation.xml:<?xml version="1.0"encoding="utf-8"?><LinearLayoutxmlns:android="/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="姓名"/><EditTextandroid:id="@+id/addName"android:layout_width="wrap_content"android:layout_height="wrap_content"/><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="电话"/><EditTextandroid:id="@+id/addTel"android:layout_width="wrap_content"android:layout_height="wrap_content"/><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="所属组"/><Spinnerandroid:id="@+id/addGroup"android:layout_width="wrap_content"android:layout_height="wrap_content"android:entries="@array/test"></Spinner><Buttonandroid:id="@+id/save"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_gravity="center"android:text=" 保存 "/></LinearLayout>主Activity文件MainActivity.java:import android.support.v7.app.ActionBarActivity;import android.app.AlertDialog;import android.app.Application;import android.content.DialogInterface;import android.content.Intent;import android.database.Cursor;import android.os.Bundle;import android.view.Menu;import android.view.MenuItem;import android.view.View;import android.widget.AdapterView;import android.widget.ListView;import android.widget.SimpleCursorAdapter;public class MainActivity extends ActionBarActivity {private ListView listView;protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(yout.activity_main);listView = (ListView) findViewById(R.id.listView);// getRelationFromDB();}private void getRelationFromDB() {final DatabaseHelper dbHelper = new DatabaseHelper(this);Cursor cursor = dbHelper.query();String[] from = { "_id", "name", "tel", "groupName" };int[] to = { R.id._id, , R.id.tel, R.id.group };SimpleCursorAdapter scadapter = new SimpleCursorAdapter(this, yout.relationlist, cursor, from, to);listView.setAdapter(scadapter);listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {public void onItemClick(AdapterView<?> adapter, View view,int position, long id) {final long temp = id;AlertDialog.Builder adBuilder = new AlertDialog.Builder(MainActivity.this);adBuilder.setMessage("确认要删除记录吗?").setPositiveButton("确认",new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog,int which) {// TODO Auto-generated method stubdbHelper.del((int) temp);Cursor cursor = dbHelper.query();String[] from = { "_id", "name", "tel","groupName" };int[] to = { R.id._id, ,R.id.tel, R.id.group };SimpleCursorAdapter scadapter = new SimpleCursorAdapter (getApplicationContext(),yout.relationlist, cursor,from, to);MainActivity.this.listView.setAdapter(scadapter);}}).setNegativeButton("取消",new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog,int which) {}});AlertDialog aleraDialog = adBuilder.create();aleraDialog.show();}});dbHelper.close();}public void add(View view) {Intent intent = new Intent(MainActivity.this,AddrelationActivity.class);startActivityForResult(intent, 0x111);}protected void onActivityResult(int requestCode, int resultCode, Intent data) {super.onActivityResult(requestCode, resultCode, data);if (requestCode == 0x111 && resultCode == 0x111) {getRelationFromDB();}}@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) {// Handle action bar item clicks here. The action bar will// automatically handle clicks on the Home/Up button, so long// as you specify a parent activity in AndroidManifest.xml.int id = item.getItemId();if (id == R.id.action_settings) {return true;}return super.onOptionsItemSelected(item);}}添加联系人AddrelationActivity.javaimport android.app.Activity;import android.app.AlertDialog;import android.content.ContentValues;import android.content.DialogInterface;import android.content.Intent;import android.os.Bundle;import android.view.View;import android.widget.EditText;import android.widget.Spinner;public class AddrelationActivity extends Activity {private EditText addName, addTel;private Spinner addGroup;protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(yout.addrelation);addName = (EditText) findViewById(R.id.addName);addTel = (EditText) findViewById(R.id.addTel);addGroup = (Spinner) findViewById(R.id.addGroup);}public void save(View view) {final ContentValues values = new ContentValues();values.put("name", addName.getText().toString());values.put("tel", addTel.getText().toString());values.put("groupName", addGroup.getSelectedItem().toString());final DatabaseHelper dbHelper = new DatabaseHelper(getApplicationContext());final AlertDialog.Builder adBuilder = new AlertDialog.Builder(this);adBuilder.setMessage("确认保存记录吗?").setPositiveButton("确认", newDialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {// TODO Auto-generated method stubdbHelper.insert(values);Intent intent = getIntent();setResult(0x111, intent);AddrelationActivity.this.finish();}}).setNegativeButton("取消", newDialogInterface.OnClickListener() {public void onClick(DialogInterface dialog, int which) {}});AlertDialog aleraDialog = adBuilder.create();aleraDialog.show();}}。