我无法从数据库中获取图像,请查看我的databasehelper(即我的fetchimg(String i)
和MainActivity(即showmeth(View w)
)类。
我实际上在这里做的是首先用相机捕捉图像,然后将它临时粘贴在第一张ImageView上,点击保存按钮后,它会保存在数据库中(没问题)。但是,当我单击“显示”按钮时,它必须通过将引用ID作为textview的id显示在第二个ImageView中的图像,但它没有显示图像,即showmeth(View w)
无法从数据库中获取图像。
我的主要活动
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.TextView;
import android.widget.Toast;
public class MainActivity extends Activity {
private Uri fileUri;
Bitmap img;
TextView t1;
databasehelper helper;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
t1 = (TextView) findViewById(R.id.text);
helper = new databasehelper(this);
}
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;
String id = t1.getText().toString();
try {
helper.deleterecord(id);
a = helper.insert(id, 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();
}
}
public void showmeth(View w) {
String i = null;
boolean flag = false;
i = t1.getText().toString();
try {
flag = helper.fetchimg(i);
} catch (Exception e) {
Toast.makeText(getBaseContext(), "database exception", 10).show();
}
if (flag == true) {
Toast.makeText(getBaseContext(),
"Here your image save on imageview", 10).show();
ImageView imageView2 = (ImageView) findViewById(R.id.imageView2);
imageView2.setImageBitmap(helper.bmp);
} else {
Toast.makeText(getBaseContext(), "Add a Pic first", 50).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;
}
}
我的数据库文件:
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.graphics.BitmapFactory;
import android.util.Log;
public class databasehelper extends SQLiteOpenHelper {
final static String databasename = "Image";
final static int databaseversion = 1;
Bitmap bmp = null;
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(id text,pic BLOB)");
} catch (SQLException e) {
e.printStackTrace();
}
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("drop table if Exists mypic");
// db.execSQL("drop table if Exists emer");
onCreate(db);
}
public long insert(String id, Bitmap img) {
SQLiteDatabase base = getWritableDatabase();
byte[] data = getBitmapAsByteArray(img); // this is a function
ContentValues value = new ContentValues();
value.put("id", id);
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();
}
public boolean fetchimg(String i) {
SQLiteDatabase base = getReadableDatabase();
Cursor cs = null;
try {
cs = base.query("mypic", new String[] { "pic" }, "id=?",
new String[] { "i" }, null, null, null);
/*
* String qu= "select pic from mypic where id"+i;
*
* Cursor cs=null; try{ cs =base.rawQuery(qu, null); }
* catch(Exception e) { return false; }
*/
if (cs != null) {
cs.moveToFirst();
byte[] imgbyte = cs.getBlob(0);
cs.close();
bmp = BitmapFactory.decodeByteArray(imgbyte, 0, imgbyte.length);
return true;
}
else {
return false;
}
}
catch (Exception e) {
return false;
}
}
public void deleterecord(String pe_id) {
SQLiteDatabase base = getWritableDatabase();
base.delete("mypic", "id=?", new String[] { pe_id });
}
}
我的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"
android:background="@drawable/gb2"
tools:context=".MainActivity" >
<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:onClick="cammethod"
android:text="Cam" />
<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" />
<TextView
android:id="@+id/text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBottom="@+id/button2"
android:layout_alignParentRight="true"
android:layout_marginRight="22dp"
android:text="Photo"
android:textAppearance="?android:attr/textAppearanceLarge" />
<Button
android:id="@+id/show"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/text"
android:layout_toRightOf="@id/imageView1"
android:onClick="showmeth"
android:text="show" />
<ImageView
android:id="@+id/imageView2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/imageView1" />
</RelativeLayout>
请帮我代码,我很快就需要它。谢谢。
所以问题可能在于数据库查询(我尝试使用我隐藏的方法或不隐藏的方法进行查询)或者可能在我的代码中使用BLOB。请帮我找错误
答案 0 :(得分:1)
您正在传递字符串“i”,您需要传递i的值。
您应该将查询更改为:
cs = base.query("mypic", new String[] { "pic" }, "id=?",
new String[] { String.valueOf(i) }, null, null, null);