Android App中各种数据保存方式的使用实例总结

少量数据保存之SharedPreferences接口实例
SharedPreferences数据保存主要是通过键值的方式存储在xml文件中
xml文件在data/此程序的包名/XX.xml。
格式:

<?xml version='1.0' encoding='utf-8' standalone='yes' ?>
<map>
<int name="count" value="3" />
<string name="time">写入日期:2013年10月07日,时间:11:28:09</string>
</map>

SharedPreferences读写的基本步骤:
读:
 1.通过Context的getSharedPreferences获取SharedPreferences接口的对象share:SharedPreferences share = this.getSharedPreferences("share",Context.MODE_PRIVATE);
"shre"保存的xml文件名 ,Context.MODE_PRIVATE 保存的类型为只被本程序访问 (还有MODE_WORLD_READABLE表示其余的程序能够读不能写,MODE
_WORLD_WRITEBLE能读写 这两个都在api17的时候被废了)
2.通过share的getXXX的方法获取指定key的值 :  share.getInt("count", 0);
写:
1.通过SharedPreferences对象的edit()方法获取Edit对象:Edit   editor = share.edit();
2.通过editor对象的putXXX方法来写入值 :editor.putInt("count", 1);
3.调用Editor的commit()方法提交修改值 :editor.commit();

访问其他程序的SharedPreferences
访问其他程序的SharedPreferences 的读写唯一不同的是先的获取该程序的Context接口对象:this.createPackageContext(packageName, flags)
packageName为要该目标程序的包名,flags访问类型
其余的就和上面的步骤差不多 就不再概叙

实例

<LinearLayout 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:orientation="vertical"
 tools:context=".MainActivity" > 

 <Button
  android:id="@+id/write"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
   android:layout_gravity="center_horizontal"
  android:text="写入数据" /> 

 <Button
  android:id="@+id/read"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
   android:layout_gravity="center_horizontal"
  android:text="读入数据" />
 <TextView
  android:id="@+id/txtCount"
  android:layout_width="match_parent"
  android:layout_height="wrap_content"/> 

 <TextView
  android:id="@+id/txt1"
  android:layout_width="match_parent"
  android:layout_height="wrap_content" /> 

</LinearLayout>
package com.android.xiong.sharepreferencestest; 

import java.text.SimpleDateFormat;
import java.util.Date; 

import android.app.Activity;
import android.content.Context;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
import android.os.Bundle;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView; 

public class MainActivity extends Activity { 

 private Button write;
 private Button read; 

 private TextView txt1;
 private TextView countTxt; 

 SharedPreferences share ; 

 Editor editor; 

 int countO=0;
 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_main);
  //获取SharedPreferences对象
  share = this.getSharedPreferences("share",
    Context.MODE_PRIVATE);
  //获取Editor对象
  editor = share.edit();
  write = (Button) findViewById(R.id.write);
  read = (Button) findViewById(R.id.read);
  txt1 = (TextView) findViewById(R.id.txt1);
  countTxt=(TextView)findViewById(R.id.txtCount);
  //获取share中key为count的值
  countO=share.getInt("count", 0);
  countO++;
  //修改share中key为count的值
  editor.putInt("count", countO);
  //提交修改
  editor.commit();
  System.out.println("该应用程序使用了:"+countO+"次");
  countTxt.setText("该应用程序使用了:"+countO+"次"); 

  OnClickListener writeListener = new OnClickListener() { 

   @Override
   public void onClick(View v) {
    // TODO Auto-generated method stub 

    SimpleDateFormat data = new SimpleDateFormat(
      "写入日期:yyyy年MM月dd日,时间:hh:mm:ss");
    editor.putString("time",
      data.format(new Date()));
    editor.commit(); 

   }
  };
  OnClickListener readListener=new OnClickListener() { 

   @Override
   public void onClick(View v) {
    // TODO Auto-generated method stub
    if(!share.contains("share")){
     txt1.setText(share.getString("time", null));
    } 

   }
  };
  write.setOnClickListener(writeListener);
  read.setOnClickListener(readListener); 

 } 

 @Override
 public 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;
 } 

}

机身内存数据读写(Internal Storage)
1.机身内存读取主要用个两个类文件输入流(FileInputStream)和文件输出流(FileOutputStream): FileInputStream fileInput = this.openFileInput("test.txt") 第一个参数为 data/此程序包名/data/test.txt 文件下 的文件名 ;
FileOutputStream fileOut = this.openFileOutput("test.txt",this.MODE_APPEND)第一个参数表示文件名 第二个参数表示打开的方式 
2.获取了文件输入输出流之后 其后的文件的读写和基本的IO操作一样
机身内存数据读写实例

<LinearLayout 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:layout_gravity="center_horizontal"
 android:orientation="vertical"
 tools:context=".MainActivity" >
 <EditText
  android:layout_width="match_parent"
  android:layout_height="wrap_content"
  android:id="@+id/ed1"
  android:inputType="textMultiLine"/>
 <Button
  android:id="@+id/write"
  android:text="写入"
  android:layout_width="match_parent"
  android:layout_height="wrap_content"/>
 <Button
  android:id="@+id/read"
  android:layout_width="match_parent"
  android:layout_height="wrap_content"
  android:text="读入"/>
 <EditText
  android:id="@+id/ed2"
  android:layout_width="match_parent"
  android:layout_height="wrap_content"
  android:inputType="textMultiLine"/>
 <Button
  android:id="@+id/delete"
  android:layout_width="match_parent"
  android:layout_height="wrap_content"
  android:text="删除指定的文件"
  />
 <EditText
  android:id="@+id/ed3"
  android:layout_width="match_parent"
  android:layout_height="wrap_content"
  /> 

</LinearLayout>
package com.android.xiong.fileiotest; 

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStreamReader;
import java.lang.reflect.Array;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List; 

import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText; 

public class MainActivity extends Activity { 

 private Button read;
 private Button write;
 private EditText ed1;
 private EditText ed2;
 private EditText ed3;
 private Button delete; 

 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_main);
  read = (Button) findViewById(R.id.read);
  write = (Button) findViewById(R.id.write);
  delete = (Button) findViewById(R.id.delete);
  ed3 = (EditText) findViewById(R.id.ed3);
  ed2 = (EditText) findViewById(R.id.ed2);
  ed1 = (EditText) findViewById(R.id.ed1);
  write.setOnClickListener(new OnClickListener() {
   @Override
   public void onClick(View v) {
    String str = ed1.getText().toString();
    if (!str.equals("")) {
     write(str);
    } 

   }
  });
  read.setOnClickListener(new OnClickListener() { 

   @Override
   public void onClick(View v) {
    read(); 

   }
  });
  delete.setOnClickListener(new OnClickListener() {
   @Override
   public void onClick(View v) {
    String str = ed3.getText().toString();
    if (!str.equals("")) {
     deleteFiles(str);
    } else {
     ed3.setText(str + ":该文件输入错误或不存在!");
    } 

   }
  }); 

 } 

 private void write(String content) {
  try {
   // 以追加的方式打开文件输出流
   FileOutputStream fileOut = this.openFileOutput("test.txt",
     this.MODE_APPEND);
   // 写入数据
   fileOut.write(content.getBytes());
   // 关闭文件输出流
   fileOut.close(); 

  } catch (Exception e) {
   e.printStackTrace();
  }
 } 

 private void read() {
  try {
   ed2.setText("");
   // 打开文件输入流
   FileInputStream fileInput = this.openFileInput("test.txt");
   BufferedReader br = new BufferedReader(new InputStreamReader(
     fileInput));
   String str = null;
   StringBuilder stb = new StringBuilder();
   while ((str = br.readLine()) !=null ) {
    stb.append(str);
   }
   ed2.setText(stb);
  } catch (Exception e) {
   e.printStackTrace();
  } 

 } 

 //删除指定的文件
 private void deleteFiles(String fileName) {
  try {
   // 获取data文件中的所有文件列表
   List<String> name = Arrays.asList(this.fileList());
   if (name.contains(fileName)) {
    this.deleteFile(fileName);
    ed3.setText(fileName + ":该文件成功删除!");
   } else
    ed3.setText(fileName + ":该文件输入错误或不存在!"); 

  } catch (Exception e) {
   e.printStackTrace();
  }
 } 

 @Override
 public boolean onCreateOptionsMenu(Menu menu) {
  getMenuInflater().inflate(R.menu.main, menu);
  return true;
 } 

}

SDcard(External Storage)读写数据实例
1.SDcard数据读写需要注定的先要在Androidmainfest.xml文件中注册新建删除和读写的权限 :

<!-- 在SD卡上创建与删除权限 -->
<uses-permission Android:name="android.permission.MOUNT_FORMAT_FILESYSTEMS" />
<!-- 向SD卡上写入权限 -->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

2.读写的基本流程就是:
2.1 通过Environment类的getExternalStorageState()方法来判断手机是否有SDcard:

Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)

2.2 最通过getExternalStorageDirectory()方法来获取文件目录:

代码如下:

File file = new File(Environment.getExternalStorageDirectory().getCanonicalPath() + "/test.txt");

读写的文件都在sdcrad文件夹中 通过File Explorer可以导出来
2.3 其后就和基本IO操作相同了
2.4还有要注意一点的是 在运行的模拟器的时候要附带虚拟的SDcard时  要在Run as->Run Configurations 中要关联一下 如下图

SDcard数据读写实例

<LinearLayout 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:gravity="center_horizontal"
 android:orientation="vertical"
 tools:context=".MainActivity" >
 <EditText
  android:id="@+id/ed1"
  android:layout_width="match_parent"
  android:layout_height="wrap_content"
  android:inputType="textMultiLine"/>
 <Button
  android:id="@+id/write"
  android:layout_width="match_parent"
  android:layout_height="wrap_content"
  android:text="写入SD卡中"/>
 <Button
  android:id="@+id/read"
  android:layout_width="match_parent"
  android:layout_height="wrap_content"
  android:text="读取SD文件"/>
 <TextView
  android:id="@+id/txt1"
  android:layout_width="match_parent"
  android:layout_height="wrap_content"/>
</LinearLayout>
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
 package="com.android.xiong.sdcardtest"
 android:versionCode="1"
 android:versionName="1.0" > 

 <uses-sdk
  android:minSdkVersion="14"
  android:targetSdkVersion="17" />
 <!-- 在SD卡上创建与删除权限 -->
 <uses-permission android:name="android.permission.MOUNT_FORMAT_FILESYSTEMS" />
 <!-- 向SD卡上写入权限 -->
 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 

 <application
  android:allowBackup="true"
  android:icon="@drawable/ic_launcher"
  android:label="@string/app_name"
  android:theme="@style/AppTheme" >
  <activity
   android:name="com.android.xiong.sdcardtest.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>
 </application> 

</manifest>
package com.android.xiong.sdcardtest; 

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStreamReader; 

import android.app.Activity;
import android.os.Bundle;
import android.os.Environment;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView; 

public class MainActivity extends Activity { 

 private Button write;
 private Button read; 

 private EditText ed1;
 private TextView txt1; 

 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_main);
  write = (Button) findViewById(R.id.write);
  read = (Button) findViewById(R.id.read);
  ed1 = (EditText) findViewById(R.id.ed1);
  txt1 = (TextView) findViewById(R.id.txt1);
  write.setOnClickListener(new OnClickListener() { 

   @Override
   public void onClick(View v) {
    // TODO Auto-generated method stub
    writeSDcard(ed1.getText().toString()); 

   }
  });
  read.setOnClickListener(new OnClickListener() { 

   @Override
   public void onClick(View v) {
    // TODO Auto-generated method stub 

    txt1.setText(readSDcard());
   }
  });
 } 

 // 把数据写入SD卡 

 private void writeSDcard(String str) { 

  try {
   // 判断是否存在SD卡
   if (Environment.getExternalStorageState().equals(
     Environment.MEDIA_MOUNTED)) {
    // 获取SD卡的目录
    File file = Environment.getExternalStorageDirectory();
    FileOutputStream fileW = new FileOutputStream(file.getCanonicalPath() + "/test.txt");
    fileW.write(str.getBytes());
    fileW.close();
   }
  } catch (Exception e) {
   e.printStackTrace();
  } 

 } 

 // 从SD卡中读取数据
 private String readSDcard() {
  StringBuffer str = new StringBuffer();
  try {
   // 判断是否存在SD
   if (Environment.getExternalStorageState().equals(
     Environment.MEDIA_MOUNTED)) {
    File file = new File(Environment.getExternalStorageDirectory()
      .getCanonicalPath() + "/test.txt");
    // 判断是否存在该文件
    if (file.exists()) {
     // 打开文件输入流
     FileInputStream fileR = new FileInputStream(file);
     BufferedReader reads = new BufferedReader(
       new InputStreamReader(fileR));
     String st = null;
     while ((st =reads.readLine())!=null ) {
      str.append(st);
     }
     fileR.close();
    } else {
     txt1.setText("该目录下文件不存在");
    }
   } 

  } catch (Exception e) {
   e.printStackTrace();
  }
  return str.toString();
 } 

 @Override
 public 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;
 } 

}

SQLite简介和简单的登录与注册源代码
1.获取SQLiteDatabase对象db创建数据库或连接数据库:SQLiteDatabasedb = SQLiteDatabase.openOrCreateDatabase(MainActivity.this.getFilesDir().toString()+ "/test.dbs", null);如果目录下有test.dbs数据库则是连接没有就是创建
2.用对象db的方法来执行sql语句:db.execSQL(String sql) 此方法木有返回值 所以查询不好弄。查询一般用db.rawQuery返回一个Cursor对象(相当与jdbc中的ResultSet),Cursor有如下几个方法来查询数据:
  2.1 move ToFirst 将记录指针跳到第一行
  2.2 moveToLast将记录指针跳到最后一行
  2.3 moveNext将记录指针移到下一行
  2.4moveToPosition( int ss)将记录指针跳到指定的ss行
  2.5moveToPrevious将记录指针跳到上一行
将记录指针跳到指定的行之后就可以通过对象的getXXX方法来获取数据 :如 Cursor cursor = db.rawQuery("select  na,pw from user where na=? and pw=?", new String []{name,pwd});
3.回收资源close
当然以SQLiteDatabase对象还可以调用许多方法来操作数据库,不过俺是觉得这几个方法基本够了

简单的登录与注册源代码:
(仅此来练习SQLite的操作  一般注册的信息都样上传到服务器而不会是存储在手机数据库)

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
  package="com.android.xiong.sqlitelogin"
  android:versionCode="1"
  android:versionName="1.0" > 

  <uses-sdk
    android:minSdkVersion="8"
    android:targetSdkVersion="14" /> 

  <application
    android:allowBackup="true"
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme" >
    <activity
      android:name="com.android.xiong.sqlitelogin.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="com.android.xiong.sqlitelogin.RegistersActivity"
      android:label="@string/app_name" >
    </activity>
  </application> 

</manifest>
<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"
  tools:context=".MainActivity" > 

  <TextView
    android:id="@+id/login"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_margin="30dp"
    android:gravity="center_horizontal"
    android:textColor="#8a2be2"
    android:textSize="35dp"
    android:text="登录界面" />
  <TextView
    android:id="@+id/txtname"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_below="@id/login"
    android:layout_marginRight="5dp"
    android:layout_marginBottom="30dp"
    android:textSize="28dp"
    android:text="用户帐号:"/>
  <EditText
    android:id="@+id/edname"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginBottom="30dp"
    android:layout_below="@id/login"
    android:layout_toRightOf="@id/txtname"
    android:layout_alignParentRight="true"
     android:hint="请输入用户帐号"/>
    <TextView
    android:id="@+id/txtpassword"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_below="@id/txtname"
    android:layout_marginRight="5dp"
    android:textSize="28dp"
    android:text="用户密码:"/>
  <EditText
    android:id="@+id/edpassword"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_below="@id/edname"
    android:layout_toRightOf="@id/txtpassword"
    android:layout_alignParentRight="true"
    android:inputType="textPassword"
    android:hint="请输入用户密码"/>
  <LinearLayout
    android:layout_below="@id/edpassword"
    android:orientation="horizontal"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_marginTop="30dp"
    android:gravity="center_horizontal" >
  <Button
    android:id="@+id/btregister"
    android:layout_height="wrap_content"
    android:layout_width="wrap_content"
    android:layout_marginRight="20dp"
    android:text="用户注册"/>
   <Button
    android:id="@+id/btlogin"
    android:layout_height="wrap_content"
    android:layout_width="wrap_content"
    android:text="用户登录"/>
   </LinearLayout> 

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

  <TextView
    android:id="@+id/txt1"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_margin="30dp"
    android:gravity="center_horizontal"
    android:text="注册界面"
    android:textColor="#8a2be2"
    android:textSize="35dp" /> 

  <TextView
    android:id="@+id/txtname1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_below="@id/txt1"
    android:layout_marginBottom="30dp"
    android:layout_marginRight="5dp"
    android:text="帐号:"
    android:textSize="28dp" /> 

  <EditText
    android:id="@+id/edname1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentRight="true"
    android:layout_below="@id/txt1"
     android:layout_toRightOf="@id/txtname1"
    android:layout_marginBottom="30dp" /> 

  <TextView
    android:id="@+id/txtpassword1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_below="@id/txtname1"
    android:layout_marginRight="5dp"
    android:text="密码:"
    android:textSize="28dp" /> 

  <EditText
    android:id="@+id/edpassword1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentRight="true"
    android:layout_below="@id/edname1"
    android:layout_toRightOf="@id/txtpassword1" /> 

  <LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_below="@id/edpassword1"
    android:layout_marginTop="30dp"
    android:gravity="center_horizontal"
    android:orientation="horizontal" > 

    <Button
      android:id="@+id/btregister1"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:layout_marginRight="20dp"
      android:text="提交数据" />
  </LinearLayout>
</RelativeLayout>
package com.android.xiong.sqlitelogin; 

import android.app.Activity;
import android.app.AlertDialog;
import android.content.Intent;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteException;
import android.os.Bundle;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText; 

public class MainActivity extends Activity { 

  // 帐号和密码
  private EditText edname;
  private EditText edpassword; 

  private Button btregister;
  private Button btlogin;
  // 创建SQLite数据库
  public static SQLiteDatabase db; 

  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    edname = (EditText) findViewById(R.id.edname);
    edpassword = (EditText) findViewById(R.id.edpassword);
    btregister = (Button) findViewById(R.id.btregister);
    btlogin = (Button) findViewById(R.id.btlogin);
    db = SQLiteDatabase.openOrCreateDatabase(MainActivity.this.getFilesDir().toString()
        + "/test.dbs", null);
    // 跳转到注册界面
    btregister.setOnClickListener(new OnClickListener() { 

      @Override
      public void onClick(View v) {
        // TODO Auto-generated method stub
        Intent intent = new Intent();
        intent.setClass(MainActivity.this, RegistersActivity.class);
        startActivity(intent);
      }
    });
    btlogin.setOnClickListener(new LoginListener());
  } 

  @Override
  protected void onDestroy() {
    // TODO Auto-generated method stub
    super.onDestroy();
    db.close();
  } 

  class LoginListener implements OnClickListener { 

    @Override
    public void onClick(View v) {
      // TODO Auto-generated method stub
      String name = edname.getText().toString();
      String password = edpassword.getText().toString();
      if (name.equals("") || password.equals("")) {
        // 弹出消息框
        new AlertDialog.Builder(MainActivity.this).setTitle("错误")
            .setMessage("帐号或密码不能空").setPositiveButton("确定", null)
            .show();
      } else {
        isUserinfo(name, password);
      }
    } 

    // 判断输入的用户是否正确
    public Boolean isUserinfo(String name, String pwd) {
      try{
        String str="select * from tb_user where name=? and password=?";
        Cursor cursor = db.rawQuery(str, new String []{name,pwd});
        if(cursor.getCount()<=0){
          new AlertDialog.Builder(MainActivity.this).setTitle("错误")
          .setMessage("帐号或密码错误!").setPositiveButton("确定", null)
          .show();
          return false;
        }else{
          new AlertDialog.Builder(MainActivity.this).setTitle("正确")
          .setMessage("成功登录").setPositiveButton("确定", null)
          .show();
          return true;
        } 

      }catch(SQLiteException e){
        createDb();
      }
      return false;
    } 

  }
  // 创建数据库和用户表
  public void createDb() {
    db.execSQL("create table tb_user( name varchar(30) primary key,password varchar(30))");
  }
  @Override
  public 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;
  } 

}
package com.android.xiong.sqlitelogin; 

import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText; 

public class RegistersActivity extends Activity { 

  private EditText edname1;
  private EditText edpassword1;
  private Button btregister1;
  SQLiteDatabase db; 

  @Override
  protected void onDestroy() {
    // TODO Auto-generated method stub
    super.onDestroy();
    db.close();
  } 

  @Override
  protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    setContentView(R.layout.register);
    edname1 = (EditText) findViewById(R.id.edname1);
    edpassword1 = (EditText) findViewById(R.id.edpassword1);
    btregister1 = (Button) findViewById(R.id.btregister1);
    btregister1.setOnClickListener(new OnClickListener() { 

      @Override
      public void onClick(View v) {
        // TODO Auto-generated method stub
        String name = edname1.getText().toString();
        String password = edpassword1.getText().toString();
        if (!(name.equals("") && password.equals(""))) {
          if (addUser(name, password)) {
            DialogInterface.OnClickListener ss = new DialogInterface.OnClickListener() {
              @Override
              public void onClick(DialogInterface dialog,
                  int which) {
                // TODO Auto-generated method stub
                // 跳转到登录界面
                Intent in = new Intent();
                in.setClass(RegistersActivity.this,
                    MainActivity.class);
                startActivity(in);
                // 销毁当前activity
                RegistersActivity.this.onDestroy();
              }
            };
            new AlertDialog.Builder(RegistersActivity.this)
                .setTitle("注册成功").setMessage("注册成功")
                .setPositiveButton("确定", ss).show(); 

          } else {
            new AlertDialog.Builder(RegistersActivity.this)
                .setTitle("注册失败").setMessage("注册失败")
                .setPositiveButton("确定", null);
          }
        } else {
          new AlertDialog.Builder(RegistersActivity.this)
              .setTitle("帐号密码不能为空").setMessage("帐号密码不能为空")
              .setPositiveButton("确定", null);
        } 

      }
    }); 

  } 

  // 添加用户
  public Boolean addUser(String name, String password) {
    String str = "insert into tb_user values(?,?) ";
    MainActivity main = new MainActivity();
    db = SQLiteDatabase.openOrCreateDatabase(this.getFilesDir().toString()
        + "/test.dbs", null);
    main.db = db;
    try {
      db.execSQL(str, new String[] { name, password });
      return true;
    } catch (Exception e) {
      main.createDb();
    }
    return false;
  } 

}
(0)

相关推荐

  • Android编程中的5种数据存储方式

    本文介绍Android平台进行数据存储的五大方式,分别如下: 1 使用SharedPreferences存储数据 2 文件存储数据      3 SQLite数据库存储数据 4 使用ContentProvider存储数据 5 网络存储数据 下面详细讲解这五种方式的特点 第一种: 使用SharedPreferences存储数据 适用范围:保存少量的数据,且这些数据的格式非常简单:字符串型.基本类型的值.比如应用程序的各种配置信息(如是否打开音效.是否使用震动效果.小游戏的玩家积分等),解锁口 令密

  • android开发基础教程—文件存储功能实现

    文件存储: 复制代码 代码如下: public class MainActivity extends Activity { EditText mname, mage; TextView mtv; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mname = (Edit

  • Android APP与媒体存储服务的交互

    简介:本文介绍如何在 Android 中,开发者的 APP 如何使用媒体存储服务(包含MediaScanner.MediaProvider以及媒体信息解析等部分),包括如何把 APP 新增或修改的文件更新到媒体数据库.如何在多媒体应用中隐藏 APP 产生的文件.如何监听媒体数据库的变化等等.Android 原生有一套媒体存储服务,进程名是 android.process.media,主要负责把磁盘中的文件信息保存到数据库当中,供其他 APP 使用以及 MTP 模式使用.因此 APP 可以随时快速

  • Android调用相机并将照片存储到sd卡上实现方法

    Android中实现拍照有两种方法,一种是调用系统自带的相机,然后使用其返回的照片数据. 还有一种是自己用Camera类和其他相关类实现相机功能,这种方法定制度比较高,洗染也比较复杂,一般平常的应用只需使用第一种即可. 用Intent启动相机的代码: 复制代码 代码如下: Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); startActivityForResult(intent, 1);拍完照后就可以在onActivity

  • Android应用开发SharedPreferences存储数据的使用方法

    SharedPreferences是Android中最容易理解的数据存储技术,实际上SharedPreferences处理的就是一个key-value(键值对).SharedPreferences常用来存储一些轻量级的数据. 复制代码 代码如下: //实例化SharedPreferences对象(第一步) SharedPreferences mySharedPreferences= getSharedPreferences("test", Activity.MODE_PRIVATE);

  • Android开发笔记之: 数据存储方式详解

    无论是神马平台,神马开发环境,神马软件程序,数据都是核心.对于开发平台来讲,如果对数据的存储有良好的支持,那么对应用程序的开发将会有很大的促进作用.总体的来讲,数据存储方式有三种:一个是文件,一个是数据库,另一个则是网络.其中文件和数据库可能用的稍多一些,文件用起来较为方便,程序可以自己定义格式:数据库用起稍烦锁一些,但它有它的优点,比如在海量数据时性能优越,有查询功能,可以加密,可以加锁,可以跨应用,跨平台等等:网络,则用于比较重要的事情,比如科研,勘探,航空等实时采集到的数据需要马上通过网络

  • 关于Android SDCard存储的问题

    使用Activit的openFileOutput()方法保存文件,文件是放在手机内在上:注:模拟器中创建SDCard卡镜像文件,可以在创建模拟器是创建,也可以在Dos窗口中进行android SDK安装路径tools目录,输入如下命令:mksdcard 2048M D:\AndroidTool\sdcard.img在程序中访问SDCard,需要如下权限:在SDCard中创建与删除文件的权限<uses-permission android:name="android.permission.M

  • android中使用SharedPreferences进行数据存储的操作方法

    很多时候我们开发的软件需要向用户提供软件参数设置功能,例如我们常用的QQ,用户可以设置是否允许陌生人添加自己为好友.对于软件配置参数的保存,如果是window软件通常我们会采用ini文件进行保存,如果是 j2se应用,我们会采用properties属性文件或者xml进行保存.如果是Android应用,我们最适合采用什么方式保存软件配置参数呢?Android 平台给我们提供了一个SharedPreferences类,它是一个轻量级的存储类,特别适合用于保存软件配置参数.使用 SharedPrefe

  • Android编程实现手机自带内部存储路径的获取方法

    本文实例讲述了Android编程实现手机自带内部存储路径的获取方法.分享给大家供大家参考,具体如下: 我有一台中兴的Android手机,型号是 ZTE U930HD,手机没有插入外置SD卡(也就是Micro SD Card,原名Trans-flash Card(TF卡),2004年正式更名为Micro SD Card),但是机身自带了一个内置存储卡(也就是eMMC存储,大小为2G). 我把这个手机用数据线插到电脑上,也会看到盘符,通过安装「R.E 管理器」等文件管理应用,也可以管理文件,并且能看

  • 在android开发中进行数据存储与访问的多种方式介绍

    数据存储与访问 很多时候我们的软件需要对处理后的数据进行存储或再次访问.Android为数据存储提供了多种方式,分别有如下几种: 文件 SharedPreferences SQLite数据库 内容提供者(Content provider) 网络 使用文件进行数据存储 首先给大家介绍使用文件如何对数据进行存储,Activity提供了openFileOutput()方法可以用于把数据输出到文件中,具体的实现过程与在J2SE环境中保存数据到文件中是一样的. 复制代码 代码如下: public clas

随机推荐