2017-12-06 1 views
-2

I Benutzerprofil in Kotlin erschaffe, ich die Benutzer zwei Optionen geben wollen (wählen Sie aus Avatar oder Aufnahme-Bild) dann Profil speichern in "sqlite" DatenbankKotlin: Save Image to Datenbank

was die beste Lösung ?

, wenn Sie mich in Code helfen werde ich dankbar

Antwort

0

Hey sein, ich habe Lösung für das ::

Datenbank erstellen Klasse "DatabaseHelper.kt" ::

class DatabaseHelper(context: Context) : SQLiteOpenHelper(context, DATABASE_NAME, null, 1) { 

override fun onCreate(db: SQLiteDatabase) { 

    db.execSQL("Create Table $TABLE_NAME(ID INTEGER PRIMARY KEY AUTOINCREMENT,Category_img BLOB)") 

} 

override fun onUpgrade(db: SQLiteDatabase, oldVersion: Int, newVersion: Int) { 
    db.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME) 
    onCreate(db) 
} 


fun insertData(Category_img: ByteArray): Boolean { 
    val db = writableDatabase 
    val cv = ContentValues() 
    cv.put(CAL_NO1, Category_img) 


    val result = db.insert(TABLE_NAME, null, cv) 

    return if (result .equals(-1)) 
     false 
    else 
     true 


} 


fun getdata(): ByteArray { 
    val db = writableDatabase 
    val res = db.rawQuery("select * from " + TABLE_NAME, null) 

    if (res.moveToFirst()) { 
     do { 
      return res.getBlob(0) 
     } while (res.moveToNext()) 
    } 
    return byteArrayOf() 
} 

companion object { 
    private val DATABASE_NAME = "user.db" 
    private val TABLE_NAME = "tbl_user" 
    private val CAL_NO1 = "Category_img" 
} 

} 

und Code von dem, wo Sie auf Kamera zugreifen möchten:

class MainActivity : AppCompatActivity() { 
    var dbSq: DatabaseHelper= DatabaseHelper(this); 



override fun onCreate(savedInstanceState: Bundle?) { 
    super.onCreate(savedInstanceState) 
    setContentView(R.layout.activity_main) 



    val cameraIntent = Intent(MediaStore.ACTION_IMAGE_CAPTURE) 
    startActivityForResult(cameraIntent, 101) 


} 

public override fun onActivityResult(requestcode: Int, resultcode: Int, intent: Intent) { 
    super.onActivityResult(requestcode, resultcode, intent) 
    if (resultcode == Activity.RESULT_OK) { 
     if (requestcode == 101) { 


      val photo = intent.extras!!.get("data") as Bitmap 
      val stream = ByteArrayOutputStream() 
      photo.compress(Bitmap.CompressFormat.PNG, 100, stream) 
      val byteArray = stream.toByteArray() 

      Log.d("check",dbSq.insertData(byteArray).toString().plus(" ")); 

     } 
    } 
} 

Ich hoffe, es wird für Sie arbeiten.

Danke und lassen Sie mich wissen, wenn Sie mehr tun müssen.

EDITED:

"DatabaseHelper.kt" ::

class DatabaseHelper(context: Context) : SQLiteOpenHelper(context, DATABASE_NAME, null, 1) { 

override fun onCreate(db: SQLiteDatabase) { 

    db.execSQL("Create Table $TABLE_NAME(ID INTEGER PRIMARY KEY AUTOINCREMENT,Category_img Text)") 

} 

override fun onUpgrade(db: SQLiteDatabase, oldVersion: Int, newVersion: Int) { 
    db.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME) 
    onCreate(db) 
} 


fun insertData(Category_img: String): Boolean { 
    val db = writableDatabase 
    val cv = ContentValues() 
    cv.put(CAL_NO1, Category_img) 


    val result = db.insert(TABLE_NAME, null, cv) 

    return if (result .equals(-1)) 
     false 
    else 
     true 


} 




companion object { 
    private val DATABASE_NAME = "user.db" 
    private val TABLE_NAME = "tbl_user" 
    private val CAL_NO1 = "Category_img" 
} 

} 

und Code tun dies aus, wo Sie die Kamera ::

class MainActivity : AppCompatActivity() { 

var dbSq: DatabaseHelper= DatabaseHelper(this); 

internal var output: File? = null 

override fun onCreate(savedInstanceState: Bundle?) { 
    super.onCreate(savedInstanceState) 
    setContentView(R.layout.activity_main) 



    val cameraIntent = Intent(MediaStore.ACTION_IMAGE_CAPTURE) 

    val dir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM) 

    val date = Date() 
    output = File(dir, "CheckImage " + date.toString()+".jpeg") 

    startActivityForResult(cameraIntent, 101) 


} 

public override fun onActivityResult(requestcode: Int, resultcode: Int, intent: Intent) { 
    super.onActivityResult(requestcode, resultcode, intent) 
    if (resultcode == Activity.RESULT_OK) { 
     if (requestcode == 101) { 





      Log.d("check",dbSq.insertData(output!!.absolutePath).toString().plus(" ")); 

     } 
    } 
} 
} 
+0

Dank zugreifen möchten zur Antwort, kann ich das Foto im Gerät speichern und Dateinamen in Datenbanken speichern e, oder speichern Sie es in der Datenbank ist die beste Lösung? –

+0

Sie speichern es in Gerät und seinen Namen in der Datenbank ist dies die beste Lösung, die ich denke.Meine Antwort ist nur entsprechend Ihrer Anforderung. Wenn Sie es in Gerät und Name in der Datenbank speichern möchten, ist das auch okay. –

+0

Sie möchten, dass ich den Code entsprechend ändere? –