Android 简明教程

Android - SQLite Database

SQLite 是一个开源 SQL 数据库,它将数据存储到设备上的一个文本文件中。Android 内置了 SQLite 数据库实现。

SQLite 支持所有关系数据库功能。要访问此数据库,您不需要为其建立任何类型的连接,如 JDBC、ODBC 等。

Database - Package

主要包是 android.database.sqlite,它包含用于管理您自己的数据库的类。

Database - Creation

要创建一个数据库,您只需调用此方法,并以数据库名称和模式作为参数。openOrCreateDatabase 返回一个 SQLite 数据库实例,您必须在自己的对象中接收它。其语法如下所示:

SQLiteDatabase mydatabase = openOrCreateDatabase("your database name",MODE_PRIVATE,null);

除此之外,数据库包中还提供了其他执行此工作的函数。它们列在下面:

Sr.No

Method & Description

1

openDatabase(String path, SQLiteDatabase.CursorFactory factory, int flags, DatabaseErrorHandler errorHandler) 此方法仅使用适当的标志模式打开现有数据库。常见的标志模式可能是 OPEN_READWRITE OPEN_READONLY

2

openDatabase(String path, SQLiteDatabase.CursorFactory factory, int flags) 它类似于上述方法,因为它也打开现有的数据库,但它没有定义任何处理数据库错误的处理程序。

3

openOrCreateDatabase(String path, SQLiteDatabase.CursorFactory factory) 它不仅打开数据库,而且在不存在数据库的情况下创建数据库。此方法等效于 openDatabase 方法。

4

openOrCreateDatabase(File file, SQLiteDatabase.CursorFactory factory) 此方法类似于上述方法,但它将 File 对象作为路径而不是字符串。它等效于 file.getPath()。

Database - Insertion

我们可以使用 SQLiteDatabase 类中定义的 execSQL 方法创建表或将数据插入到表中。其语法如下:

mydatabase.execSQL("CREATE TABLE IF NOT EXISTS TutorialsPoint(Username VARCHAR,Password VARCHAR);");
mydatabase.execSQL("INSERT INTO TutorialsPoint VALUES('admin','admin');");

这会将一些值插入到数据库中的表中。另一种也执行相同工作但采用一些附加参数的方法如下:

Sr.No

Method & Description

1

execSQL(String sql, Object[] bindArgs) 此方法不仅可以插入数据,还可以使用绑定参数更新或修改数据库中已存在的数据。

Database - Fetching

我们可以使用 Cursor 类的一个对象从数据库中检索任何内容。我们将调用此类的一个名为 rawQuery 的方法,它将返回一个结果集,其中光标指向该表。我们可以向前移动光标并检索数据。

Cursor resultSet = mydatbase.rawQuery("Select * from TutorialsPoint",null);
resultSet.moveToFirst();
String username = resultSet.getString(0);
String password = resultSet.getString(1);

Cursor 类中提供了其他函数,使我们能够有效地检索数据。其中包括:

Sr.No

Method & Description

1

getColumnCount() 此方法返回表的总列数。

2

getColumnIndex(String columnName) 此方法通过指定列的名称返回列的索引号。

3

getColumnName(int columnIndex) 此方法通过指定列的索引返回列的名称。

4

getColumnNames() 此方法返回表中所有列名称的数组。

5

getCount() 此方法返回光标中的总行数。

6

getPosition() 此方法返回光标在表中的当前位置。

7

isClosed() 此方法如果光标已关闭则返回 true,否则返回 false

Database - Helper class

为了管理与数据库相关的所有操作,已给出一个名为 SQLiteOpenHelper 的帮助程序类。它会自动管理数据库的创建和更新。它其语法如下所示

public class DBHelper extends SQLiteOpenHelper {
   public DBHelper(){
      super(context,DATABASE_NAME,null,1);
   }
   public void onCreate(SQLiteDatabase db) {}
   public void onUpgrade(SQLiteDatabase database, int oldVersion, int newVersion) {}
}

Example

以下是一个展示 SQLite 数据库使用的示例。它创建了一个基本的联系人应用程序,用于允许插入、删除和修改联系人。

要试验该示例,您需要在支持相机的实际设备上运行它。

Steps

Description

1

你将使用 Android Studio 在包 com.example.sairamkrishna.myapplication 下创建 Android 应用程序。

2

修改 src/MainActivity.java 文件以获取所有 XML 组件的引用并在 listView 中填充联系人信息。

3

在 src/DBHelper.java 中创建一个将管理数据库任务的新文件

4

创建一个 DisplayContact.java 作为新活动,用于在屏幕上显示联系人

5

修改 res/layout/activity_main 以添加各自的 XML 组件

6

修改 res/layout/activity_display_contact.xml 以添加相应的 XML 组件

7

修改 res/values/string.xml 以添加必要的字符串组件

8

修改 res/menu/display_contact.xml 以添加必要的菜单组件

9

创建一个 res/menu/mainmenu.xml 作为新菜单,以添加添加联系人的选项

10

运行该应用程序,选择一个正在运行的安卓设备,并在该设备上安装应用程序并验证结果。

下面是已修改的 MainActivity.java 的内容。

package com.example.sairamkrishna.myapplication;

import android.content.Context;
import android.content.Intent;
import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;

import android.view.KeyEvent;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;

import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ListView;

import java.util.ArrayList;
import java.util.List;

public class MainActivity extends ActionBarActivity {
   public final static String EXTRA_MESSAGE = "MESSAGE";
   private ListView obj;
   DBHelper mydb;

   @Override
   protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_main);

      mydb = new DBHelper(this);
      ArrayList array_list = mydb.getAllCotacts();
      ArrayAdapter arrayAdapter=new ArrayAdapter(this,android.R.layout.simple_list_item_1, array_list);

      obj = (ListView)findViewById(R.id.listView1);
      obj.setAdapter(arrayAdapter);
      obj.setOnItemClickListener(new OnItemClickListener(){
         @Override
         public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,long arg3) {
            // TODO Auto-generated method stub
            int id_To_Search = arg2 + 1;

            Bundle dataBundle = new Bundle();
            dataBundle.putInt("id", id_To_Search);

            Intent intent = new Intent(getApplicationContext(),DisplayContact.class);

            intent.putExtras(dataBundle);
            startActivity(intent);
         }
      });
   }

   @Override
   public boolean onCreateOptionsMenu(Menu menu) {
      // Inflate the menu; this adds items to the action bar if it is present.
      getMenuInflater().inflate(R.menu.menu_main, menu);
      return true;
   }

   @Override
   public boolean onOptionsItemSelected(MenuItem item){
      super.onOptionsItemSelected(item);

      switch(item.getItemId()) {
         case R.id.item1:Bundle dataBundle = new Bundle();
         dataBundle.putInt("id", 0);

         Intent intent = new Intent(getApplicationContext(),DisplayContact.class);
         intent.putExtras(dataBundle);

         startActivity(intent);
         return true;
         default:
         return super.onOptionsItemSelected(item);
      }
   }

   public boolean onKeyDown(int keycode, KeyEvent event) {
      if (keycode == KeyEvent.KEYCODE_BACK) {
         moveTaskToBack(true);
      }
      return super.onKeyDown(keycode, event);
   }
}

以下是对显示联系人活动的修改内容 DisplayContact.java

package com.example.sairamkrishna.myapplication;

import android.os.Bundle;
import android.app.Activity;
import android.app.AlertDialog;

import android.content.DialogInterface;
import android.content.Intent;
import android.database.Cursor;

import android.view.Menu;
import android.view.MenuItem;
import android.view.View;

import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;

public class DisplayContact extends Activity {
   int from_Where_I_Am_Coming = 0;
   private DBHelper mydb ;

   TextView name ;
   TextView phone;
   TextView email;
   TextView street;
   TextView place;
   int id_To_Update = 0;

   @Override
   protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_display_contact);
      name = (TextView) findViewById(R.id.editTextName);
      phone = (TextView) findViewById(R.id.editTextPhone);
      email = (TextView) findViewById(R.id.editTextStreet);
      street = (TextView) findViewById(R.id.editTextEmail);
      place = (TextView) findViewById(R.id.editTextCity);

      mydb = new DBHelper(this);

      Bundle extras = getIntent().getExtras();
      if(extras !=null) {
         int Value = extras.getInt("id");

         if(Value>0){
            //means this is the view part not the add contact part.
            Cursor rs = mydb.getData(Value);
            id_To_Update = Value;
            rs.moveToFirst();

            String nam = rs.getString(rs.getColumnIndex(DBHelper.CONTACTS_COLUMN_NAME));
            String phon = rs.getString(rs.getColumnIndex(DBHelper.CONTACTS_COLUMN_PHONE));
            String emai = rs.getString(rs.getColumnIndex(DBHelper.CONTACTS_COLUMN_EMAIL));
            String stree = rs.getString(rs.getColumnIndex(DBHelper.CONTACTS_COLUMN_STREET));
            String plac = rs.getString(rs.getColumnIndex(DBHelper.CONTACTS_COLUMN_CITY));

            if (!rs.isClosed())  {
               rs.close();
            }
            Button b = (Button)findViewById(R.id.button1);
            b.setVisibility(View.INVISIBLE);

            name.setText((CharSequence)nam);
            name.setFocusable(false);
            name.setClickable(false);

            phone.setText((CharSequence)phon);
            phone.setFocusable(false);
            phone.setClickable(false);

            email.setText((CharSequence)emai);
            email.setFocusable(false);
            email.setClickable(false);

            street.setText((CharSequence)stree);
            street.setFocusable(false);
            street.setClickable(false);

            place.setText((CharSequence)plac);
            place.setFocusable(false);
            place.setClickable(false);
         }
      }
   }

   @Override
   public boolean onCreateOptionsMenu(Menu menu) {
      // Inflate the menu; this adds items to the action bar if it is present.
      Bundle extras = getIntent().getExtras();

      if(extras !=null) {
         int Value = extras.getInt("id");
         if(Value>0){
            getMenuInflater().inflate(R.menu.display_contact, menu);
         } else{
            getMenuInflater().inflate(R.menu.menu_main menu);
         }
      }
      return true;
   }

   public boolean onOptionsItemSelected(MenuItem item) {
      super.onOptionsItemSelected(item);
      switch(item.getItemId()) {
         case R.id.Edit_Contact:
         Button b = (Button)findViewById(R.id.button1);
         b.setVisibility(View.VISIBLE);
         name.setEnabled(true);
         name.setFocusableInTouchMode(true);
         name.setClickable(true);

         phone.setEnabled(true);
         phone.setFocusableInTouchMode(true);
         phone.setClickable(true);

         email.setEnabled(true);
         email.setFocusableInTouchMode(true);
         email.setClickable(true);

         street.setEnabled(true);
         street.setFocusableInTouchMode(true);
         street.setClickable(true);

         place.setEnabled(true);
         place.setFocusableInTouchMode(true);
         place.setClickable(true);

         return true;
         case R.id.Delete_Contact:

         AlertDialog.Builder builder = new AlertDialog.Builder(this);
         builder.setMessage(R.string.deleteContact)
            .setPositiveButton(R.string.yes, new DialogInterface.OnClickListener() {
               public void onClick(DialogInterface dialog, int id) {
                  mydb.deleteContact(id_To_Update);
                  Toast.makeText(getApplicationContext(), "Deleted Successfully",
                     Toast.LENGTH_SHORT).show();
                  Intent intent = new Intent(getApplicationContext(),MainActivity.class);
                  startActivity(intent);
               }
         })
         .setNegativeButton(R.string.no, new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int id) {
               // User cancelled the dialog
            }
         });

         AlertDialog d = builder.create();
         d.setTitle("Are you sure");
         d.show();

         return true;
         default:
         return super.onOptionsItemSelected(item);

      }
   }

   public void run(View view) {
      Bundle extras = getIntent().getExtras();
      if(extras !=null) {
         int Value = extras.getInt("id");
         if(Value>0){
            if(mydb.updateContact(id_To_Update,name.getText().toString(),
               phone.getText().toString(), email.getText().toString(),
				   street.getText().toString(), place.getText().toString())){
               Toast.makeText(getApplicationContext(), "Updated", Toast.LENGTH_SHORT).show();
               Intent intent = new Intent(getApplicationContext(),MainActivity.class);
               startActivity(intent);
            } else{
               Toast.makeText(getApplicationContext(), "not Updated", Toast.LENGTH_SHORT).show();
            }
         } else{
            if(mydb.insertContact(name.getText().toString(), phone.getText().toString(),
				   email.getText().toString(), street.getText().toString(),
				   place.getText().toString())){
                  Toast.makeText(getApplicationContext(), "done",
						   Toast.LENGTH_SHORT).show();
            } else{
               Toast.makeText(getApplicationContext(), "not done",
					   Toast.LENGTH_SHORT).show();
            }
            Intent intent = new Intent(getApplicationContext(),MainActivity.class);
            startActivity(intent);
         }
      }
   }
}

以下是对数据库类的内容 DBHelper.java

package com.example.sairamkrishna.myapplication;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Hashtable;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.DatabaseUtils;
import android.database.sqlite.SQLiteOpenHelper;
import android.database.sqlite.SQLiteDatabase;

public class DBHelper extends SQLiteOpenHelper {

   public static final String DATABASE_NAME = "MyDBName.db";
   public static final String CONTACTS_TABLE_NAME = "contacts";
   public static final String CONTACTS_COLUMN_ID = "id";
   public static final String CONTACTS_COLUMN_NAME = "name";
   public static final String CONTACTS_COLUMN_EMAIL = "email";
   public static final String CONTACTS_COLUMN_STREET = "street";
   public static final String CONTACTS_COLUMN_CITY = "place";
   public static final String CONTACTS_COLUMN_PHONE = "phone";
   private HashMap hp;

   public DBHelper(Context context) {
      super(context, DATABASE_NAME , null, 1);
   }

   @Override
   public void onCreate(SQLiteDatabase db) {
      // TODO Auto-generated method stub
      db.execSQL(
         "create table contacts " +
         "(id integer primary key, name text,phone text,email text, street text,place text)"
      );
   }

   @Override
   public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
      // TODO Auto-generated method stub
      db.execSQL("DROP TABLE IF EXISTS contacts");
      onCreate(db);
   }

   public boolean insertContact (String name, String phone, String email, String street,String place) {
      SQLiteDatabase db = this.getWritableDatabase();
      ContentValues contentValues = new ContentValues();
      contentValues.put("name", name);
      contentValues.put("phone", phone);
      contentValues.put("email", email);
      contentValues.put("street", street);
      contentValues.put("place", place);
      db.insert("contacts", null, contentValues);
      return true;
   }

   public Cursor getData(int id) {
      SQLiteDatabase db = this.getReadableDatabase();
      Cursor res =  db.rawQuery( "select * from contacts where id="+id+"", null );
      return res;
   }

   public int numberOfRows(){
      SQLiteDatabase db = this.getReadableDatabase();
      int numRows = (int) DatabaseUtils.queryNumEntries(db, CONTACTS_TABLE_NAME);
      return numRows;
   }

   public boolean updateContact (Integer id, String name, String phone, String email, String street,String place) {
      SQLiteDatabase db = this.getWritableDatabase();
      ContentValues contentValues = new ContentValues();
      contentValues.put("name", name);
      contentValues.put("phone", phone);
      contentValues.put("email", email);
      contentValues.put("street", street);
      contentValues.put("place", place);
      db.update("contacts", contentValues, "id = ? ", new String[] { Integer.toString(id) } );
      return true;
   }

   public Integer deleteContact (Integer id) {
      SQLiteDatabase db = this.getWritableDatabase();
      return db.delete("contacts",
      "id = ? ",
      new String[] { Integer.toString(id) });
   }

   public ArrayList<String> getAllCotacts() {
      ArrayList<String> array_list = new ArrayList<String>();

      //hp = new HashMap();
      SQLiteDatabase db = this.getReadableDatabase();
      Cursor res =  db.rawQuery( "select * from contacts", null );
      res.moveToFirst();

      while(res.isAfterLast() == false){
         array_list.add(res.getString(res.getColumnIndex(CONTACTS_COLUMN_NAME)));
         res.moveToNext();
      }
      return array_list;
   }
}

以下是对 res/layout/activity_main.xml 的内容

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
   xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
   android:layout_height="match_parent"
   android:paddingLeft="@dimen/activity_horizontal_margin"
   android:paddingRight="@dimen/activity_horizontal_margin"
   android:paddingTop="@dimen/activity_vertical_margin"
   android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity">

   <TextView
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:id="@+id/textView"
      android:layout_alignParentTop="true"
      android:layout_centerHorizontal="true"
      android:textSize="30dp"
      android:text="Data Base" />

   <TextView
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:text="Tutorials Point"
      android:id="@+id/textView2"
      android:layout_below="@+id/textView"
      android:layout_centerHorizontal="true"
      android:textSize="35dp"
      android:textColor="#ff16ff01" />

   <ImageView
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:id="@+id/imageView"
      android:layout_below="@+id/textView2"
      android:layout_centerHorizontal="true"
      android:src="@drawable/logo"/>

   <ScrollView
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:id="@+id/scrollView"
      android:layout_below="@+id/imageView"
      android:layout_alignParentLeft="true"
      android:layout_alignParentStart="true"
      android:layout_alignParentBottom="true"
      android:layout_alignParentRight="true"
      android:layout_alignParentEnd="true">

      <ListView
         android:id="@+id/listView1"
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
         android:layout_centerHorizontal="true"
         android:layout_centerVertical="true" >
      </ListView>

   </ScrollView>

</RelativeLayout>

以下是对 res/layout/activity_display_contact.xml 的内容

<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
   xmlns:tools="http://schemas.android.com/tools"
   android:id="@+id/scrollView1"
   android:layout_width="match_parent"
   android:layout_height="wrap_content"
   tools:context=".DisplayContact" >

   <RelativeLayout
      android:layout_width="match_parent"
      android:layout_height="370dp"
      android:paddingBottom="@dimen/activity_vertical_margin"
      android:paddingLeft="@dimen/activity_horizontal_margin"
      android:paddingRight="@dimen/activity_horizontal_margin"
      android:paddingTop="@dimen/activity_vertical_margin">

      <EditText
         android:id="@+id/editTextName"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:layout_alignParentLeft="true"
         android:layout_marginTop="5dp"
         android:layout_marginLeft="82dp"
         android:ems="10"
         android:inputType="text" >
      </EditText>

      <EditText
         android:id="@+id/editTextEmail"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:layout_alignLeft="@+id/editTextStreet"
         android:layout_below="@+id/editTextStreet"
         android:layout_marginTop="22dp"
         android:ems="10"
         android:inputType="textEmailAddress" />

      <TextView
         android:id="@+id/textView1"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:layout_alignBottom="@+id/editTextName"
         android:layout_alignParentLeft="true"
         android:text="@string/name"
         android:textAppearance="?android:attr/textAppearanceMedium" />

      <Button
         android:id="@+id/button1"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:layout_alignLeft="@+id/editTextCity"
         android:layout_alignParentBottom="true"
         android:layout_marginBottom="28dp"
         android:onClick="run"
         android:text="@string/save" />

      <TextView
         android:id="@+id/textView2"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:layout_alignBottom="@+id/editTextEmail"
         android:layout_alignLeft="@+id/textView1"
         android:text="@string/email"
         android:textAppearance="?android:attr/textAppearanceMedium" />

      <TextView
         android:id="@+id/textView5"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:layout_alignBottom="@+id/editTextPhone"
         android:layout_alignLeft="@+id/textView1"
         android:text="@string/phone"
         android:textAppearance="?android:attr/textAppearanceMedium" />

      <TextView
         android:id="@+id/textView4"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:layout_above="@+id/editTextEmail"
         android:layout_alignLeft="@+id/textView5"
         android:text="@string/street"
         android:textAppearance="?android:attr/textAppearanceMedium" />

      <EditText
         android:id="@+id/editTextCity"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:layout_alignRight="@+id/editTextName"
         android:layout_below="@+id/editTextEmail"
         android:layout_marginTop="30dp"
         android:ems="10"
         android:inputType="text" />

      <TextView
         android:id="@+id/textView3"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:layout_alignBaseline="@+id/editTextCity"
         android:layout_alignBottom="@+id/editTextCity"
         android:layout_alignParentLeft="true"
         android:layout_toLeftOf="@+id/editTextEmail"
         android:text="@string/country"
         android:textAppearance="?android:attr/textAppearanceMedium" />

      <EditText
         android:id="@+id/editTextStreet"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:layout_alignLeft="@+id/editTextName"
         android:layout_below="@+id/editTextPhone"
         android:ems="10"
         android:inputType="text" >

         <requestFocus />
      </EditText>

      <EditText
         android:id="@+id/editTextPhone"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:layout_alignLeft="@+id/editTextStreet"
         android:layout_below="@+id/editTextName"
         android:ems="10"
         android:inputType="phone|text" />

   </RelativeLayout>
</ScrollView>

以下是对 res/value/string.xml 的内容

<?xml version="1.0" encoding="utf-8"?>
<resources>
   <string name="app_name">Address Book</string>
   <string name="action_settings">Settings</string>
   <string name="hello_world">Hello world!</string>
   <string name="Add_New">Add New</string>
   <string name="edit">Edit Contact</string>
   <string name="delete">Delete Contact</string>
   <string name="title_activity_display_contact">DisplayContact</string>
   <string name="name">Name</string>
   <string name="phone">Phone</string>
   <string name="email">Email</string>
   <string name="street">Street</string>
   <string name="country">City/State/Zip</string>
   <string name="save">Save Contact</string>
   <string name="deleteContact">Are you sure, you want to delete it.</string>
   <string name="yes">Yes</string>
   <string name="no">No</string>
</resources>

以下是对 res/menu/main_menu.xml 的内容

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android" >

   <item android:id="@+id/item1"
      android:icon="@drawable/add"
      android:title="@string/Add_New" >
   </item>

</menu>

以下是对 res/menu/display_contact.xml 的内容

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
   <item
      android:id="@+id/Edit_Contact"
      android:orderInCategory="100"
      android:title="@string/edit"/>

   <item
      android:id="@+id/Delete_Contact"
      android:orderInCategory="100"
      android:title="@string/delete"/>

</menu>

这是该项目的默认 AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
   package="com.example.sairamkrishna.myapplication" >

   <application
      android:allowBackup="true"
      android:icon="@mipmap/ic_launcher"
      android:label="@string/app_name"
      android:theme="@style/AppTheme" >

      <activity
         android:name=".MainActivity"
         android:label="@string/app_name" >

         <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
         </intent-filter>

      </activity>

      <activity android:name=".DisplayContact"/>

   </application>
</manifest>

我们尝试运行该应用程序。我假设您已将实际 Android 计算机设备连接到您的计算机。要从 Android Studio 运行该应用,请打开项目的活动文件之一并从工具栏中单击运行图标。在启动您的应用程序之前,Android Studio 将显示以下窗口以选择您想要运行 Android 应用程序的位置。

choose device

选择你的移动设备作为选项,然后检查你的移动设备,它将显示以下屏幕 −

data base

现在打开您的可选菜单,它将显示如下图像:可选菜单在不同版本中显示的位置不同

data base1

点击菜单屏幕的添加按钮以添加新联系人。它将显示以下屏幕 −

data1

它将显示以下字段。请输入所需的信息,然后点击保存联系人。它将使您返回主屏幕。

data base2

现在我们的联系人 sai 已被添加。为了了解数据库创建在何处。打开您的 android studio,连接您的移动设备。进入 tools/android/android device monitor 。现在浏览文件管理器选项卡。现在浏览这个文件夹 /data/data/<your.package.name>/databases<database-name>.