日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

在Android初次的前期学习中的二个小例子(2)

發布時間:2023/12/20 Android 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 在Android初次的前期学习中的二个小例子(2) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Hello13:SQLite數據庫

一、簡述SQLite的概念和主要特性
  • SQLite是一個輕量級的關系型數據庫,運算速度快,占用資源少,使用非常方便,支持SQL語法標準和數據庫事務原則。
  • 相對于SharedPreferences使用文件保存數據,SQLite具有處理復雜數據結構的能力。
  • SQLite支持五種數據類型:NULL,INTEGER,REAL(浮點數),TEXT(字符串文本)和BLOB(二進制對象)。
  • 最大的特點:各種數據類型的數據保存到任何字段中而不用關心字段聲明的數據類型,除了聲明為主鍵INTEGER PRIMARY KEY的字段只能夠存儲64位整數。
  • 保存目錄為內部存儲:data/data/包名/databases下
  • 二、提供操作SQLite的相關類
    類名 作用 描述
    SQLiteOpenHelper類 抽象類 通過繼承該類,可重寫數據庫創建OnCreat()與更新onUpdate的方法。 通過子類的對象,可使用方法獲得SQLiteDatabase類的對象。
    SQLiteDatabase類 數據庫訪問類 通過該類的對象,可對數據庫進行增刪改查的操作
    Cursor 游標 可以簡單理解為指向數據庫中某 一個記錄的指針
    三、繼承SQLiteOpenHelper類需要覆寫的方法說明 1.onCreate(database)? SQLiteOpenHelper會自動檢測數據庫文件是否存在。如果存在就不會調用onCreate()方法;如果不存在就會調用onCreate()方法。(用通俗的語言來說,就是onCreate()方法在數據庫文件第一次創建時調用。) 2.onUpgrade(database,oldVersion,newVersion) 在數據庫的版本發生變化時會被調用, 一般在軟件升級時才需改變版本號,而數據庫的版本是由程序員控制的。 四、創建流程 Step 1:自定義一個類繼承SQLiteOpenHelper類? Step 2:在該類的構造方法的super中設置好要創建的數據庫名,版本號? Step 3:重寫onCreate( )方法創建表結構? Step 4:重寫onUpgrade( )方法定義版本號發生改變后執行的操作 代碼如下: public class DBHelper extends SQLiteOpenHelper {public DBHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {super(context, name, null, 1);Log.i("1","初始化完成!"); //后臺輸出到日志 }//數據庫第一次創建時被調用 @Overridepublic void onCreate(SQLiteDatabase sqLiteDatabase) {sqLiteDatabase.execSQL("CREATE TABLE person(personid INTEGER PRIMARY KEY AUTOINCREMENT,name VARCHAR(20))");Log.i("1","新建數據庫成功!");}//軟件版本號發生改變時調用 @Overridepublic void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) {sqLiteDatabase.execSQL("ALTER TABLE person ADD phone VARCHAR(12)");Log.i("1","更新數據庫成功!");} }

    ?? ?? ? 調用SimpleCursorAdapter游標適配器時,需要數據的主鍵為“_id”(注意下劃線)

    五、調用SQLiteOpenHelper的子類 代碼如下: public class MainActivity extends Activity {private Context mContext;/** * Content的意思為“上下文”,它是抽象類的基類,我們一般見到的Activity、Service和Application都是ContextImpl類。 * 需要指明的是: Context提供了一個應用的運行環境,在Context的大環境里,應用才可以訪問資源,才能完成和其他組件、服務的交互. * 所以:假設在Activity中需要調用時,在類的成員變量中加入mContext,并初始化為Activity的本身this。 */@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);mContext = MainActivity.this;DBHelper dbHelper = new DBHelper(mContext,"my_db",null ,1);SQLiteDatabase sqLiteDatabase = dbHelper.getWritableDatabase(); //onCreate()和onUpgrade()被調用 } }

    ?


    Hello14:Camera相機的操作(案例如果出現異常,請Rebuild Project一下) 一、打開系統的照相機 ? ? 1.調用系統相機的操作比較簡單,但是我們記憶的一個是步驟,而不是代碼。所以先給出步驟描述: 使用Intent調用系統相機,相機拍照后,會返回一個Intent給onActivityResult。在Intent的extra部分包含剛剛拍照的編碼過的Bitmap。 Intent it = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); //調用系統相機startActivityForResult(it,Activity.DEFAULT_KEYS_DIALER); //拍照完成后,自動返回Intent給onActivityResult//重寫onActivityResult方法 @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) {if(requestCode == Activity.RESULT_OK){ //返回結果正常Bundle bundle = data.getExtras(); Bitmap bitmap = (Bitmap) bundle.get("data"); //獲取Bitmap img_show.setImageBitmap(bitmap);} }

    ?? ?2.使用資源定位Uri和文件File的操作,把圖片保存下來

    //打開系統相機 private void openSystemCamrea() {Intent intent = new Intent();intent.setAction(MediaStore.ACTION_IMAGE_CAPTURE);//原圖保存File file = new File(getExternalFilesDir(""),"photo.jpg");Uri uri = Uri.fromFile(file); //file的唯一資源標識符uriintent.putExtra(MediaStore.EXTRA_OUTPUT,uri); //使用intent連接照相機的輸出到uristartActivityForResult(intent,1); //調回函數onAtcitivyResult(),requestCode標識該調回 }@Override protected void onActivityResult(int requestCode, int resultCode, Intent data) {if(resultCode == RESULT_OK) {switch (requestCode) {case 1://顯示圖片/*Bitmap bitmap = (Bitmap) data.getExtras().get("data"); //獲取返回結果的縮略圖mImageView.setImageBitmap(bitmap); //使用ImageView顯示位圖*///保存圖片,由于圖片較大,保存在外部存儲,路徑為storage/emulated/0/Android/data/files下File file = new File(getExternalFilesDir(""), "photo.jpg");Bitmap bitmap = null;try {bitmap = BitmapFactory.decodeStream(new FileInputStream(file));} catch (FileNotFoundException e) {e.printStackTrace();}if (bitmap != null) {mImageView.setImageBitmap(bitmap);}break;}} }

    ?

    二、打開我的自定義照相機 詳情見項目,這里提供一個鏈接,我是根據這個寫完自定義相機的。http://www.runoob.com/w3cnote/android-tutorial-camera.html 效果預覽圖如下:
    然而重點來了!!!在這里先申明一下下面是踩過的坑: 坑1:android系統相機權限兼容問題 在一般情況下,上述代碼運行沒有任何問題;可是當把targetSdkVersion指定成24及之上并且在API>=24的設備上運行時,會拋出異常:這是因為在Android6.0之后引入運行時權限,如果接收file://Uri的app沒有申請READ_EXTERNAL_STORAGE權限,在讀取文件時會引發崩潰。總而言之,就是Android不再允許在app中把file://Uri暴露給其他app,包括但不局限于通過Intent或ClipData 等方法。 所以解決方案:https://blog.csdn.net/android_an/article/details/77506915?(android 7.0 因為Uri.fromFile引起的FileUriExposedException異常?見此網頁) 詳情請見項目的OpenUpdateCamera()方法、res/xml/share_paths.xml文件和onActivityResult()方法 坑2:沒有FileProvider包,加入包后沒有R資源或APPT2異常!? 修改后的代碼見原文件,如果出現異常,請Rebuild Project一下(點擊標題下載)

    轉載于:https://www.cnblogs.com/jdemarryme/p/9292057.html

    總結

    以上是生活随笔為你收集整理的在Android初次的前期学习中的二个小例子(2)的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。