2

連絡先と画像を取得してリスト ビューに表示し、画像と連絡先をデータベースに保存したいのですが、別のアクティビティでデータベースから連絡先を画像付きで取得してリスト ビューに表示したい 連絡先を取得できませんが、画像をデータベースに保存する方法その後、データベースから画像を取得する方法

このメソッドを使用してデータをデータベースに保存します

public void addBlockedNumberWithImage(String number, String name,
        byte[] image) {

    // Add a new blocked number
    SQLiteDatabase db = this.getWritableDatabase();

    ContentValues values = new ContentValues();
    values.put(BLOCKLIST_NUMBER, number);
    values.put(BLOCKLIST_NAME, name);
    values.put(CONTACT_IMAGE, image);

    /* Inserting the entry */
    db.insert(TABLE_BLOCKLISTWITHIMAGE, null, values);
    db.close(); // close the database connection
}



DbHelper db = new DbHelper(this);
db.addBlockedNumberWithImage(phoneNumber, name, image);
4

4 に答える 4

0

私のアプリケーションでは、ギャラリーから画像をアップロードしています。アップロードした画像はデータベースに保存したいのですが、ビットマップをデータベースに保存する方法は、ビットマップを文字列に変換してデータベースに保存しています。

Imageupload.class:

public class Imageupload12 extends Activity {
Button buttonLoadImage;
ImageView targetImage;
int i=0;
Database database=new Database(this);
String i1;
String img;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main5);
buttonLoadImage = (Button)findViewById(R.id.loadimage);
targetImage = (ImageView)findViewById(R.id.targetimage);

Bundle b=getIntent().getExtras();
if(b!=null)
{
img=b.getString("image");
targetImage2.setImageURI("image");
//i am getting error as i cant assign string to imageview.

}

buttonLoadImage.setOnClickListener(new Button.OnClickListener(){

public void onClick(View arg0) {
// TODO Auto-generated method stub
Intent intent = new Intent(Intent.ACTION_PICK,
android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
Log.i("photo",""+intent);
startActivityForResult(intent, i);
i=i+1;
}});

}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {

// TODO Auto-generated method stub
super.onActivityResult(requestCode, resultCode, data);
switch(requestCode) {

case 0:
if (resultCode == RESULT_OK){
Uri targetUri = data.getData();
// textTargetUri.setText(targetUri.toString());
Bitmap bitmap;
try {
bitmap = BitmapFactory.decodeStream(getContentResolver().openInputStream(targetUri));
targetImage.setImageBitmap(bitmap);

i1=bitmap.toString();
Log.i("firstimage........",""+i1);
targetImage.setVisibility(0);

SQLiteDatabase db=database.getWritableDatabase();
db.execSQL("INSERT INTO UPLOAD VALUES('"+i1+"');");

} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
break;

}

}
}

Image.class:

public class Image extends Activity {
Database database=new Database(this);
static EfficientAdapter adapter, adapter1;
static ListView lv1;

static SQLiteDatabase db;
static EfficientAdapter adp;
static Cursor c1;

static Vector<String>IMAGE=new Vector<String>();

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

db=database.getReadableDatabase();
c1=db.rawQuery("select * from UPLOAD;", null);

if (c1.moveToFirst()) {

do {
IMAGE.add(c1.getString(0).toString());

} while (c1.moveToNext());

c1.close();
}

lv1=(ListView)findViewById(R.id.List);

adapter=new EfficientAdapter(this);

lv1.setAdapter(adapter);

ImageView add=(ImageView)findViewById(R.id.imv1a);

add.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View v) {
// TODO Auto-generated method stub
IMAGE.clear();

Intent i=new Intent(Image.this,Imageupload12.class);
startActivity(i);

}
});

}

private static class EfficientAdapter extends BaseAdapter{

// protected final Context Context = null;
protected LayoutInflater mLayoutInflater;
AlertDialog.Builder aBuilder;
public EfficientAdapter(Context context) {
// TODO Auto-generated constructor stub
mLayoutInflater=LayoutInflater.from(context);
}

@Override
public int getCount() {
// TODO Auto-generated method stub

return IMAGE.size();
}

@Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return position;
}

@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return position;
}

@Override
public View getView(final int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub

final ViewHolder mVHolder;
if(convertView == null){
convertView=mLayoutInflater.inflate(R.layout.pjtlistdetails, parent, false);

mVHolder=new ViewHolder();

mVHolder.t1=(TextView)convertView.findViewById(R.id.pjtdetails);
mVHolder.time=(TextView)convertView.findViewById(R.id.name);

mVHolder.imv=(ImageButton)convertView.findViewById(R.id.editic);
mVHolder.imvd=(ImageView)convertView.findViewById(R.id.delete);
mVHolder.imvf=(ImageView)convertView.findViewById(R.id.fwd);

mVHolder.imv.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {

String img=IMAGE.elementAt(position);
Log.i("image...",""+img);

Context ctx=v.getContext();
Intent myIntent = new Intent();
ctx = v.getContext();
myIntent.setClass(ctx, Imageupload12.class);
myIntent.putExtra("image", img);

ctx.startActivity(myIntent);

IMAGE.clear();

}
});
static class ViewHolder{

ImageButton imv;
ImageView imvd,imvf;
}

データベースから画像を取得するには

public Bitmap getImage(int i){

String qu = "select img from table where feedid=" + i ;
Cursor cur = db.rawQuery(qu, null);

if (cur.moveToFirst()){
byte[] imgByte = cur.getBlob(0);
cur.close();
return BitmapFactory.decodeByteArray(imgByte, 0, imgByte.length);
}
if (cur != null && !cur.isClosed()) {
cur.close();
}

return null ;
}

それが機能するかどうかは非常に古いコードチェックです:)

于 2013-09-11T10:57:04.003 に答える
0

Base64クラスを使用すると、ビットマップを文字列にエンコードしてからデータベースに保存できます。

次のサンプル コードを使用できます。

Bitmap bitmapOrg =get bitmap from image;

ByteArrayOutputStream bao = new ByteArrayOutputStream();

bitmapOrg.compress(Bitmap.CompressFormat.JPEG, 90, bao);

byte[] ba = bao.toByteArray();

String ba1 = Base64.encodeBytes(ba);

この文字列をデコードして画像を使用します。

于 2013-09-11T10:57:35.380 に答える