gpt4 book ai didi

android - 将相机捕获的图像存储在 SQLite 数据库中

转载 作者:行者123 更新时间:2023-11-30 03:37:04 26 4
gpt4 key购买 nike

我正在用相机拍摄照片,临时存储在“ImageView”上,然后通过单击 Activity 上的“保存”按钮将其存储在数据库中。但是在数据库中保存图像不起作用。请解决代码中的问题。

   Main File:
<!-- language: java -->

package com.example.expnewbutton;
import android.net.Uri;
import android.os.Bundle;
import android.provider.MediaStore;
import android.app.Activity;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.graphics.Bitmap;
import android.view.Menu;
import android.view.View;
import android.widget.ImageView;
import android.widget.Toast;
public class MainActivity extends Activity
{
private Uri fileUri;
Bitmap img;
databasehelper helper;

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


}

public void cammethod(View w){

try {
PackageManager packageManager = getPackageManager();
boolean doesHaveCamera = packageManager
.hasSystemFeature(PackageManager.FEATURE_CAMERA);

if (doesHaveCamera) {
// start the image capture Intent
Intent intent = new Intent(
MediaStore.ACTION_IMAGE_CAPTURE);
// Get our fileURI
//fileUri = getOutputMediaFile();

intent.putExtra(MediaStore.EXTRA_OUTPUT, fileUri);
startActivityForResult(intent, 100);

}
} catch (Exception ex) {
Toast.makeText(getApplicationContext(),
"There was an error with the camera.",
Toast.LENGTH_LONG).show();
}

}


protected void onActivityResult(int requestCode, int resultCode,Intent intent)

{
if (requestCode == 100)
{
if (resultCode == RESULT_OK)
{
if (intent == null)
{
// The picture was taken but not returned
Toast.makeText(
getApplicationContext(),
"The picture was taken and is located here: "
+ fileUri.toString(), Toast.LENGTH_LONG)
.show();
}
else
{
// The picture was returned
Bundle extras = intent.getExtras();
img=(Bitmap) extras.get("data");
ImageView imageView1 = (ImageView) findViewById(R.id.imageView1);
imageView1.setImageBitmap((Bitmap) extras.get("data"));
}
}
}
}

public void insertimg(View w)
{
long a=0;
try{
helper.insert(img);

if(a>=1){
Toast.makeText(getBaseContext(),a+ "Record Successfully Saved", 30).show();
}

else{

Toast.makeText(getBaseContext(), "Not Saved", 30).show();

}}
catch(Exception e)
{
Toast.makeText(getBaseContext(), "there is error",5).show();
}

}



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

DataBase File:
<!-- language: java -->

package com.example.expnewbutton;
import java.io.ByteArrayOutputStream;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.graphics.Bitmap;
import android.graphics.Bitmap.CompressFormat;
import android.util.Log;


public class databasehelper extends SQLiteOpenHelper{

final static String databasename="Imagedb";
final static int databaseversion=1;

public databasehelper(Context ctx){
super(ctx,databasename,null,databaseversion);

}

@Override
public void onCreate(SQLiteDatabase db) {
try{

Log.d("tag4545","database");
db.execSQL("create table mypic(pic BLOB)");

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

}

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

db.execSQL("drop table if Exists mypic");

onCreate(db);

}

public long insert(Bitmap img ) {

SQLiteDatabase base=getWritableDatabase();
byte[] data = getBitmapAsByteArray(img); // this is a function
ContentValues value=new ContentValues();
value.put("pic",data);

long a= base.insert("mypic", null, value);

return a;
}

public static byte[] getBitmapAsByteArray(Bitmap bitmap)
{
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
bitmap.compress(CompressFormat.PNG, 0, outputStream);
return outputStream.toByteArray();
}
}


XML file is
<!-- language: xml -->

<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"
android:background="@drawable/gb2"
>
<Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/editText2"
android:layout_marginLeft="16dp"
android:layout_marginTop="32dp"
android:layout_toRightOf="@+id/textView2"
android:text="Cam"

android:onClick="cammethod" />

<ImageView
android:id="@+id/imageView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>

<Button
android:id="@+id/button2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBottom="@+id/button1"
android:layout_marginLeft="46dp"
android:layout_toRightOf="@+id/button1"
android:onClick="insertimg"
android:text="Save" />

</RelativeLayout>

最佳答案

无法在您的代码中捕获更多问题,并且没有任何可用的日志。

我只喜欢两个。 :)

  1. 您忘记初始化数据库类..

    helper.insert(img);

    所以在使用上面的代码行之前,只需在 Activity 的 onCreate() 中初始化数据库类。类似的东西,

    databasehelper helper = new databasehelper(this);
  2. a的值在哪里会被改变?

    所以它应该是这样的,

    long a=0;
    try{
    a = helper.insert(img);

无论如何,这两个可以帮助您继续前进。

关于android - 将相机捕获的图像存储在 SQLite 数据库中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16501292/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com