多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

國內最全IT社區平臺 聯系我們 | 收藏本站
阿里云優惠2
您當前位置:首頁 > php開源 > 綜合技術 > Android數據存儲與IO

Android數據存儲與IO

來源:程序員人生   發布時間:2017-02-13 08:37:07 閱讀次數:3037次

這里寫圖片描述 實例1
這里寫圖片描述 實例2
這里寫圖片描述 實例3
這里寫圖片描述 實例4

SharedPredferences與Editor簡介

SharedPreferences本身是1個接口,沒法直接創建,只能通過getSharedPreferences(String name,int mode)方法獲得。

提供以下經常使用方法:

  1. boolean contains(String key):
  2. abstract Map<String , ? >getAll():
  3. boolean getXxx(String key,xxx defValue):其中xxx可以是boolean,float,int ,long ,String.
  4. SharedPreferences.Editor clear():
  5. SharedPreference.Editor putXxx();
  6. SharedPreference.Editor remove(String key);
  7. boolean commit();

使用方法:

  1. SharedPreferences preferences = getSharedPreferences(“aserbao”,MODE_PRIVATE);
  2. SharedPreferences.Editor edit = preferences.edit();

獲得數據代碼;

String time = preferences.getString("time", null);
                // 讀取int類型的數據
                int randNum = preferences.getInt("random", 0);

存儲數據代碼:

SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 "+ "hh:mm:ss");
                // 存入當前時間
                editor.putString("time", sdf.format(new Date()));
                // 存入1個隨機數
                editor.putInt("random", (int) (Math.random() * 100));
                // 提交所有存入的數據
                editor.commit();

File存儲

實例1代碼:

public class MainActivity extends Activity
{
    final String FILE_NAME = "crazyit.bin";
    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        System.out.println(new StringBuilder("a").append("b").append("c")
                .toString());
        // 獲得兩個按鈕
        Button read = (Button) findViewById(R.id.read);
        Button write = (Button) findViewById(R.id.write);
        // 獲得兩個文本框
        final EditText edit1 = (EditText) findViewById(R.id.edit1);
        final EditText edit2 = (EditText) findViewById(R.id.edit2);
        // 為write按鈕綁定事件監聽器
        write.setOnClickListener(new OnClickListener()
        {
            @Override
            public void onClick(View source)
            {
                // 將edit1中的內容寫入文件中
                write(edit1.getText().toString());
                edit1.setText("");
            }
        });
        read.setOnClickListener(new OnClickListener()
        {
            @Override
            public void onClick(View v)
            {
                // 讀取指定文件中的內容,并顯示出來
                edit2.setText(read());
            }
        });
    }
    private String read()
    {
        try
        {
            // 打開文件輸入流
            FileInputStream fis = openFileInput(FILE_NAME);
            byte[] buff = new byte[1024];
            int hasRead = 0;
            StringBuilder sb = new StringBuilder("");
            // 讀取文件內容
            while ((hasRead = fis.read(buff)) > 0)
            {
                sb.append(new String(buff, 0, hasRead));
            }
            // 關閉文件輸入流
            fis.close();
            return sb.toString();
        }
        catch (Exception e)
        {
            e.printStackTrace();
        }
        return null;
    }
    private void write(String content)
    {
        try
        {
            // 以追加模式打開文件輸出流
            FileOutputStream fos = openFileOutput(FILE_NAME, MODE_APPEND);
            // 將FileOutputStream包裝成PrintStream
            PrintStream ps = new PrintStream(fos);
            // 輸出文件內容
            ps.println(content);
            // 關閉文件輸出流
            ps.close();
        }
        catch (Exception e)
        {
            e.printStackTrace();
        }
    }
}

讀取SD卡上的文件

讀取SD卡文件的步驟

  1. 調用Enviroment的getExternalStorageState()方法判斷手機是不是插入SD卡,并且利用程序具有讀寫SD卡的權限
  2. 調用Enviroment的getExternalStorageDirectory()方法來獲得外部存儲器,也就是SD卡目錄
  3. 使用FileInputStream,FileOutputStream,FileReader或FileWriter讀寫SD卡里的文件。
如果不想使用Enviroment的getExternalStorageState()方法,完全可使用/mnt/sdcard/路徑代表SD卡的路徑,然后通過判斷/mnt/sdcard/路徑是不是存在就知道手機是不是插入SD卡。

權限:

<!-- 在SD卡中創建與刪除文件權限 -->
    <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>
    <!-- 向SD卡寫入數據權限 -->
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

實例2

代碼:

public class MainActivity extends Activity
{
    final String FILE_NAME = "/crazyit.bin";
    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        // 獲得兩個按鈕
        Button read = (Button) findViewById(R.id.read);
        Button write = (Button) findViewById(R.id.write);
        // 獲得兩個文本框
        final EditText edit1 = (EditText) findViewById(R.id.edit1);
        final EditText edit2 = (EditText) findViewById(R.id.edit2);
        // 為write按鈕綁定事件監聽器
        write.setOnClickListener(new OnClickListener()
        {
            @Override
            public void onClick(View source)
            {
                // 將edit1中的內容寫入文件中
                write(edit1.getText().toString());
                edit1.setText("");
            }
        });
        read.setOnClickListener(new OnClickListener()
        {
            @Override
            public void onClick(View v)
            {
                // 讀取指定文件中的內容,并顯示出來
                edit2.setText(read());
            }
        });
    }
    private String read()
    {
        try
        {
            // 如果手機插入了SD卡,而且利用程序具有訪問SD的權限
            if (Environment.getExternalStorageState().equals(
                    Environment.MEDIA_MOUNTED))
            {
                // 獲得SD卡對應的存儲目錄
                File sdCardDir = Environment.getExternalStorageDirectory();
                System.out.println("----------------" + sdCardDir);
                // 獲得指定文件對應的輸入流
                FileInputStream fis = new FileInputStream(
                        sdCardDir.getCanonicalPath() + FILE_NAME);
                // 將指定輸入流包裝成BufferedReader
                BufferedReader br = new BufferedReader(new
                        InputStreamReader(fis));
                StringBuilder sb = new StringBuilder("");
                String line = null;
                // 循環讀取文件內容
                while ((line = br.readLine()) != null)
                {
                    sb.append(line);
                }
                // 關閉資源
                br.close();
                return sb.toString();
            }
        }
        catch (Exception e)
        {
            e.printStackTrace();
        }
        return null;
    }
    private void write(String content)
    {
        try
        {
            // 如果手機插入了SD卡,而且利用程序具有訪問SD的權限
            if (Environment.getExternalStorageState().equals(
                    Environment.MEDIA_MOUNTED))
            {
                // 獲得SD卡的目錄
                File sdCardDir = Environment.getExternalStorageDirectory();
                File targetFile = new File(sdCardDir
                        .getCanonicalPath() + FILE_NAME);
                // 以指定文件創建 RandomAccessFile對象
                RandomAccessFile raf = new RandomAccessFile(
                        targetFile, "rw");
                // 將文件記錄指針移動到最后
                raf.seek(targetFile.length());
                // 輸出文件內容
                raf.write(content.getBytes());
                // 關閉RandomAccessFile
                raf.close();
            }
        }
        catch (Exception e)
        {
            e.printStackTrace();
        }
    }
}

SQLite數據庫

使用SQLiteDatabase進行數據庫操作步驟以下:

  1. 獲得SQLiteDatabase對象,它代表與數據庫的連接
  2. 調用SQLiteDatabase的方法來履行SQL語句
  3. 調用SQL語句履行結果,比如用SimpleCursorAdapter封裝Cursor.
  4. 關閉SQLiteDatabase,回收資源

創建數據庫和表

db = SQLiteDatabase.openOrCreateDatabase(
                this.getFilesDir().toString()
                        + "/my.db3", null); 

上面代碼返回1個SQLiteDatabase對象,該對象的execSQL()可履行任意的SQL語句,可通過以下代碼在利用程序中創建表:

db.execSQL("create table news_inf(_id integer"
+ " primary key autoincrement,"+ " news_title varchar(50),"+ " news_content varchar(255))");

實例3代碼:

public class MainActivity extends Activity
{
    SQLiteDatabase db;
    Button bn = null;
    ListView listView;
    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        // 創建或打開數據庫(此處需要使用絕對路徑)
        db = SQLiteDatabase.openOrCreateDatabase(
                this.getFilesDir().toString()
                        + "/my.db3", null); // ①
        listView = (ListView) findViewById(R.id.show);
        bn = (Button) findViewById(R.id.ok);
        bn.setOnClickListener(new OnClickListener()
        {
            @Override
            public void onClick(View source)
            {
                // 獲得用戶輸入
                String title = ((EditText) findViewById(
                        R.id.title)).getText().toString();
                String content = ((EditText) findViewById(R.id.content))
                        .getText().toString();
                try
                {
                    insertData(db, title, content);
                    Cursor cursor = db.rawQuery("select * from news_inf"
                            , null);
                    inflateList(cursor);
                }
                catch (SQLiteException se)
                {
                    // 履行DDL創建數據表
                    db.execSQL("create table news_inf(_id integer"
                            + " primary key autoincrement,"
                            + " news_title varchar(50),"
                            + " news_content varchar(255))");
                    // 履行insert語句插入數據
                    insertData(db, title, content);
                    // 履行查詢
                    Cursor cursor = db.rawQuery("select * from news_inf"
                            , null);
                    inflateList(cursor);
                }
            }
        });
    }
    private void insertData(SQLiteDatabase db
            , String title, String content)  // ②
    {
        // 履行插入語句
        db.execSQL("insert into news_inf values(null , ? , ?)"
                , new String[] {title, content });
    }
    private void inflateList(Cursor cursor)
    {
        // 填充SimpleCursorAdapter
        SimpleCursorAdapter adapter = new SimpleCursorAdapter(
                MainActivity.this,
                R.layout.line, cursor,
                new String[] { "news_title", "news_content" }
                , new int[] {R.id.my_title, R.id.my_content },
                CursorAdapter.FLAG_REGISTER_CONTENT_OBSERVER);  // ③
        // 顯示數據
        listView.setAdapter(adapter);
    }
    @Override
    public void onDestroy()
    {
        super.onDestroy();
        // 退出程序時關閉SQLiteDatabase
        if (db != null && db.isOpen())
        {
            db.close();
        }
    }
}

使用sqlite工具

在Android SDK的platform-tools目錄下

經常使用命令以下:
1. .databases:查看當前數據庫
2. .tables:查看當前數據庫中的數據表
3. .help:幫助命令

使用特定的方法操作SQLite數據庫

使用insert方法插入記錄

SQLiteDatabase的insert方法的簽名為long insert(String table, String nullColumnHack,ContentValues values),參數說明以下:
1. table:數據表名
2. nullColumnHack:代表強行插入null值的數據列的表名。當values參數為null或不包括key_value對時該參數有效。
3. values:代表1行記錄的數據。
insert方法插入的1行記錄使用ContentValues寄存。

ContentValues values = new ContentValues();
values.put("name","aserbao");
values.put("age",25);
db.insert("表名",null,values);

生成的SQL語句以下:

insert into <表名>(key1,key2…)values(value1,value2…)

使用update方法更新記錄

update(String table,ContentValues values,String whereClause,String[] whereArgs);參數說明以下:
1. table:表名
2. valuse:想更新的數據
3. whereClause:代表滿足whereClause字句的記錄將會被更新
4. whereArgs: 用于whereClause子句傳入參數。

ContentValues values = new ContentValues();
values.put("name","imerbao");
int result = db.update("表名",values,"_id>?",new Integer[]{20})

生成的SQL語句以下:

update &lt;table>set key1=value1,key2=value2…… where &lt;whereCluse>

使用Delete方法刪除記錄

delete(String table,String whereClause,String[] whereArgs)參數說明同上

刪除以a開頭的人名:

db.delete("表名","person_name like ?",new String[]{"a_"});

對應的SQL語句以下:

delete <table>where <whereClause>

使用query查詢記錄

Cursor query(boolean distinct,String table,String[] columns,String whereClause,String[] selectionArgs,String groupBy,String having,String orderBy);

distinct:是不是去重;
table:表名
columns:需要查出來的列名
whereClause:條件子句
selectionArgs:用于在whereClause子句的占位符傳入參數值,值在數組中的位置與占位符在語句中的位置必須1致,否則就會有異常。
groupBy:用于控制分組
having:用于對分組進行過濾
orderBy:用于對記錄進行排序
limit:用于進行分頁
如果想查出表中以i開頭的記錄,語句以下:

db.query("表名",new String[]{"_id,name,age"}),"name like ?", new String[]{"i%"},null,null,"

SQLiteOpenHelper類

方法:

  1. synchronized SQLiteDatabase getReadableDatabase():
  2. synchronized SQLiteDatabase getWritableDataable();
  3. abstract void onCreate(SQLiteDatabase db);
  4. abstract void onUpdate(SQLiteDatabase db,int oldVersion, int newVersion);
  5. synchronized void close();
    實例4MainActivity代碼:
public class MainActivity extends Activity
{
    MyDatabaseHelper dbHelper;
    Button insert = null;
    Button search = null;
    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        // 創建MyDatabaseHelper對象,指定數據庫版本為1,此處使用相對路徑便可
        // 數據庫文件自動會保存在程序的數據文件夾的databases目錄下
        dbHelper = new MyDatabaseHelper(this, "myDict.db3", 1);
        insert = (Button) findViewById(R.id.insert);
        search = (Button) findViewById(R.id.search);
        insert.setOnClickListener(new OnClickListener()
        {
            @Override
            public void onClick(View source)
            {
                // 獲得用戶輸入
                String word = ((EditText) findViewById(R.id.word))
                        .getText().toString();
                String detail = ((EditText) findViewById(R.id.detail))
                        .getText().toString();
                // 插入生詞記錄
                insertData(dbHelper.getReadableDatabase(), word, detail);
                // 顯示提示信息
                Toast.makeText(MainActivity.this, "添加生詞成功!"
                        , Toast.LENGTH_LONG).show();
            }
        });
        search.setOnClickListener(new OnClickListener()
        {
            @Override
            public void onClick(View source)
            {
                // 獲得用戶輸入
                String key = ((EditText) findViewById(R.id.key)).getText()
                        .toString();
                // 履行查詢
                Cursor cursor = dbHelper.getReadableDatabase().rawQuery(
                        "select * from dict where word like ? or detail like ?",
                        new String[] { "%" + key + "%", "%" + key + "%" });
                // 創建1個Bundle對象
                Bundle data = new Bundle();
                data.putSerializable("data", converCursorToList(cursor));
                // 創建1個Intent
                Intent intent = new Intent(MainActivity.this
                        , ResultActivity.class);
                intent.putExtras(data);
                // 啟動Activity
                startActivity(intent);
            }
        });
    }
    protected ArrayList<Map<String, String>>
    converCursorToList(Cursor cursor)
    {
        ArrayList<Map<String, String>> result =
                new ArrayList<Map<String, String>>();
        // 遍歷Cursor結果集
        while (cursor.moveToNext())
        {
            // 將結果集中的數據存入ArrayList中
            Map<String, String> map = new HashMap<>();
            // 取出查詢記錄中第2列、第3列的值
            map.put("word", cursor.getString(1));
            map.put("detail", cursor.getString(2));
            result.add(map);
        }
        return result;
    }
    private void insertData(SQLiteDatabase db, String word
            , String detail)
    {
        // 履行插入語句
        db.execSQL("insert into dict values(null , ? , ?)"
                , new String[] {word, detail });
    }
    @Override
    public void onDestroy()
    {
        super.onDestroy();
        // 退出程序時關閉MyDatabaseHelper里的SQLiteDatabase
        if (dbHelper != null)
        {
            dbHelper.close();
        }
    }
}

MyDatabaseHelper代碼:

public class MyDatabaseHelper extends SQLiteOpenHelper
{
    final String CREATE_TABLE_SQL =
            "create table dict(_id integer primary " +
                    "key autoincrement , word , detail)";
    public MyDatabaseHelper(Context context, String name, int version)
    {
        super(context, name, null, version);
    }
    @Override
    public void onCreate(SQLiteDatabase db)
    {
        // 第1次使用數據庫時自動建表
        db.execSQL(CREATE_TABLE_SQL);
    }
    @Override
    public void onUpgrade(SQLiteDatabase db
            , int oldVersion, int newVersion)
    {
        System.out.println("--------onUpdate Called--------"
                + oldVersion + "--->" + newVersion);
    }
}

ResultActivity代碼:

public class ResultActivity extends Activity
{
    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.popup);
        ListView listView = (ListView) findViewById(R.id.show);
        Intent intent = getIntent();
        // 獲得該intent所攜帶的數據
        Bundle data = intent.getExtras();
        // 從Bundle數據包中取出數據
        @SuppressWarnings("unchecked")
        List<Map<String, String>> list = (List<Map<String, String>>)
                data.getSerializable("data");
        // 將List封裝成SimpleAdapter
        SimpleAdapter adapter = new SimpleAdapter(ResultActivity.this
                , list,
                R.layout.line, new String[] { "word", "detail" }
                , new int[] {R.id.word, R.id.detail });
        // 填充ListView
        listView.setAdapter(adapter);
    }
}

自述:

再過兩天就要回湖南老家了,2016感覺怎樣都沒做就結束了,2年多沒見爸媽了,這次得回家好好和家人聚聚?;A到位,2017,走上大神之路。

生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: 国产欧美日韩亚洲 | free欧美xxxxhd720| 国产在线视频国产永久视频 | 免费看www | 欧美日本亚洲 | 成a人v欧美综合天堂 | www.日本高清视频 | 欧美日韩一级片在线观看 | 久久精品桃花综合 | 免费看www视频 | 一区二区日韩欧美 | 国产v精品欧美精品v日韩 | 午夜视频免费在线 | 欧美午夜影院 | 国产在线视频资源 | 最新国产在线观看福利91 | 亚洲精彩视频 | 1024在线视频国产在线播放 | 亚洲成年人免费网站 | 国产精品久久久久9999赢消 | 免费视频不卡一区二区三区 | 性欧美video视频另类 | 久久男人天堂 | 丁香五月好婷婷深深爱 | 色老头成人免费视频天天综合 | 免费看黄的网址 | 欧美午夜小视频 | 午夜手机视频 | 国产人成精品 | 久久国产视频一区 | 午夜国产精品久久影院 | 久久精品国产免费一区 | 特级黄aaaaaaaaa毛片 | xart欧美一区在线播放 | 一级淫片免费看 | 国产欧美性综合视频性刺激 | 免费aⅴ网站 | 手机在线观看免费视频 | 亚洲一区二区影院 | 免费在线h| 欧美理伦视频 |