آموزش های این وب سایت به صورت رایگان در دسترس است. اطلاعات بیشتر
بروز خطا
   [message]
اشتراک در سوال
رای ها
[dataList]

دزیافت آدرس عکس انتخاب شده و ذخیره ی ان در دیتابیس

ali_jaha  9 سال پیش  9 سال پیش
+1 0

با عرض سلام و خسته نباشید خدمت تمامی دوستان عزیز

من یه مشکل دارم و اونم اینکه تو این کد من اطلاعات تماس رو به صورت تکست داخل دیتا بیس ذخیره می کنم اما برای تصویر بلد نیستم . آدرس تصویر رو میگیرم با یک دکمه و داخل imageview نشون می دم ولی بلد نیستم چجوری به دیتا بدم وذخیره کنم . و بعدا هم فراخوانی کنم . نمیدونم blob لازم می شه یا نه ولی من فقط می خوام آدرس رو ذخیره کنم موقع باز شدن عکس از اونجا بخونه

لطفا دوستان محبت می کنن کمک کنن ممنون میشم

(یکم تازه کارم هستم ... )

چه تغییری در کلاس insert یا dbHandler انجام بدهم یا اضافه کنم که آدرس رو بگیرم و داخل دیتا بیس ذخیره کنم و موقع نمایش اون رو نمایش بده

و قسمتی که در update گیر داده چی بزارم ؟

.

این کلاس dbopenhelper: که دیتا بیس در اینجا ساخته می شه

package com.example.phonebookkh;

importandroid.content.Context;
importandroid.database.sqlite.SQLiteDatabase;
importandroid.database.sqlite.SQLiteDatabase.CursorFactory;
import android.database.sqlite.SQLiteOpenHelper;



public class dbopenhelper extends SQLiteOpenHelper {

public static final String dbname="dbphonebook";
public static final String tblname="phonebook";

public static final String cid="id";

public static final String cname="name";
public static final String cfamily="family";
public static final String caddress="address";
public static final String cemail="email";
public static final String cnumber="number";
// اینجا قسمتی رو هم برای اظافه کردن عکس قرار دادم
public static final String cpic="pictur";


public static final String createtbl="CREATE TABLE "+tblname+"("+cid+" INTEGER PRIMARY KEY AUTOINCREMENT,"
+cname+" TEXT,"
+cfamily+" TEXT,"
+caddress+" TEXT,"
+cemail+" TEXT,"
+cnumber+" TEXT,"
// اینجا قسمتی رو هم برای اظافه کردن عکس قرار دادم
+cpic+" TEXT);";

public dbopenhelper(Context context) {
super(context, dbname, null, 1);
}


public void onCreate(SQLiteDatabase db) {

db.execSQL(createtbl);

}


public void onUpgrade(SQLiteDatabase db, int arg1, int arg2) {

db.execSQL("DROP TABLE IF EXIST"+tblname);
onCreate(db);

}

}
 
 

این کلاس dbHandler :

package com.example.phonebookkh;

importandroid.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;



public class dbHandler {

private dbopenhelper dbhelper;
private SQLiteDatabase database;


public dbHandler(Context context){

dbhelper=new dbopenhelper(context);

}


public void open(){
database=dbhelper.getWritableDatabase();
}

public void close(){

dbhelper.close();
}

public String Display(int row,int fild){
Cursor cu= database.query(dbhelper.tblname, null, null, null, null, null, null,null);
cu.moveToPosition(row);
String name=cu.getString(fild);
return name;
}


public String display2(int id,int fild){

Cursor cu= database.rawQuery("select * from phonebook where id="+id, null);
cu.moveToFirst();
String name=cu.getString(fild);
return name;
}

public void insert(String name,String family,String address,String email,String number,String pictur){

ContentValues cv=new ContentValues();
cv.put(dbhelper.cname, name);
cv.put(dbhelper.cfamily, family);
cv.put(dbhelper.caddress, address);
cv.put(dbhelper.cemail, email);
cv.put(dbhelper.cnumber, number);
//قسمت عکس
cv.put(dbhelper.cpic, pictur);

database.insert(dbhelper.tblname, dbhelper.cname, cv);


}

public Integer count(){
Cursor cu= database.query(dbhelper.tblname, null, null, null, null, null, null,null);
int s=cu.getCount();
return s;
}

public void delete(int id){

database.delete(dbhelper.tblname, "id="+id, null);
}



public void update(String name,String family,String address,String email,String number,String pictur,int id){
ContentValues cv=new ContentValues();

cv.put(dbopenhelper.cname, name);
cv.put(dbopenhelper.cfamily, family);
cv.put(dbopenhelper.caddress, address);
cv.put(dbopenhelper.cemail, email);
cv.put(dbopenhelper.cnumber, number);
cv.put(dbopenhelper.cpic, pictur);


database.update(dbhelper.tblname, cv, "id="+id, null);


}

}


 
 

این کلاس  insert :

package com.example.phonebookkh;


importandroid.app.Activity;
import android.content.Intent;
import android.graphics.Picture;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.Toast;

public class insert extends Activity{

public static final int REQ_CODE_PICK_IMAGE = 123;


private EditText name;
private EditText family;
private EditText address;
private EditText email;
private EditText number;

private Button insert;
private Button cancel;

private Button btn_add;
private ImageView img_img;

private dbHandler db;

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);
setContentView(R.layout.insert);

db=new dbHandler(this);


name=(EditText) findViewById(R.id.insert_name);
family=(EditText) findViewById(R.id.insert_family);
address=(EditText) findViewById(R.id.insert_address);
email=(EditText) findViewById(R.id.insert_email);
number=(EditText) findViewById(R.id.insert_number);

insert=(Button) findViewById(R.id.insert_insert);
cancel=(Button) findViewById(R.id.insert_cancel);

btn_add = (Button) findViewById(R.id.btn_add);
img_img = (ImageView) findViewById(R.id.img_img);


insert.setOnClickListener(new OnClickListener(){




public void onClick(View arg0) {
db.open();
// این قسمت ایراد می گیره نمی دوتم چی کار کنم
db.insert(name.getText().toString(), family.getText().toString(), address.getText().toString(), email.getText().toString(), number.getText().toString());
db.close();
Toast.makeText(getApplicationContext(), "مخاطب جدید با موفقیت اضافه شد",Toast.LENGTH_LONG).show();
finish();

}



});





btn_add.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View v) {
Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
intent.setType("image/*");
startActivityForResult(intent, REQ_CODE_PICK_IMAGE);
}
});

}


@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == REQ_CODE_PICK_IMAGE && resultCode == RESULT_OK && data != null) {
img_img.setImageURI(data.getData());
// data.getData();

cancel.setOnClickListener(new OnClickListener(){


public void onClick(View arg0) {

finish();

}


});



}
}
}
 

این کلاس update: که اون یکی ها settext میشن اما image نمی دونم چی بزارم وقتی هم از این کد استفاده میکنم

 		img_img.setImageURI(db.display2(Integer.parseInt(id), 6));

 

می گه شما نمی توانید این کار رو انجام بدید و توی dbhandeler چیزی واسه این درست نکردید .

این کلاس update:

package com.example.phonebookkh;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.Toast;

public class update extends Activity{

public static final int REQ_CODE_PICK_IMAGE = 123;


private EditText name;
private EditText family;
private EditText address;
private EditText email;
private EditText number;

private Button update;
private Button cancel;

private Button btn_add;
private ImageView img_img;


private String id;
private dbHandler db;
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.update);

db=new dbHandler(this);

Bundle extra=getIntent().getExtras();

id=extra.getString("id");

name=(EditText) findViewById(R.id.update_name);
family=(EditText) findViewById(R.id.update_family);
address=(EditText) findViewById(R.id.update_address);
email=(EditText) findViewById(R.id.update_email);
number=(EditText) findViewById(R.id.update_number);

update=(Button) findViewById(R.id.update_update);
cancel=(Button) findViewById(R.id.update_cancel);

btn_add = (Button) findViewById(R.id.btn_add);
img_img = (ImageView) findViewById(R.id.img_img);

db.open();
name.setText(db.display2(Integer.parseInt(id), 1));
family.setText(db.display2(Integer.parseInt(id), 2));
address.setText(db.display2(Integer.parseInt(id), 3));
email.setText(db.display2(Integer.parseInt(id), 4));
number.setText(db.display2(Integer.parseInt(id), 5));
// اینجا ******

db.close();


btn_add.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View v) {
Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
intent.setType("image/*");
startActivityForResult(intent, REQ_CODE_PICK_IMAGE);
}
});

}


@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == REQ_CODE_PICK_IMAGE && resultCode == RESULT_OK && data != null) {
img_img.setImageURI(data.getData());

update.setOnClickListener(new OnClickListener(){


public void onClick(View arg0) {

db.open();
db.update(name.getText().toString(), family.getText().toString(), address.getText().toString(), email.getText().toString(), number.getText().toString(),Integer.parseInt(id));
db.close();
Toast.makeText(getApplicationContext(), "به روز رسانی با موفقیت انام شد", Toast.LENGTH_LONG).show();
finish();

}


});

cancel.setOnClickListener(new OnClickListener(){


public void onClick(View arg0) {

finish();

}


});



}



}
}

 
 
0 0
خدایی یکی از دوستان کمک کنن ... :( فقط این با پرداخت درون برنامه ایم مونده ..... (9 سال پیش)
0 0
اگه عکس رو از اینترنت میخونید که فقط کافیه آدرس اینترنتی (url) رو ذخیره کنید اگر هم عکس داخل خودِ برنامه‌است کافیه ID اون رو از drawable یا mipmap ذخیره کنید (9 سال پیش)
0 0
ممنونم حل شد :X (9 سال پیش)
 برای این سوال 2 پاسخ وجود دارد.
پاسخ به سوال 
Hossein Lamei Ramandi  9 سال پیش
+1 0

داخل دیتابیس یه ردیف  با ورودی text و باعنوان image_url ایجاد و مقدار data.getData(); رو در اون اینسرت کنید و برای استفاده از اون هم میتونی زمانی که مقدار رو از دیتابیس خوندید از کد زیر استفاده کنید و به ایمیج ویو آدرس عکس رو بدید

img_img.setImageURI(strUrl);
0 0
ممنونم حل شد :X (9 سال پیش)
پاسخ به سوال 
آریا  9 سال پیش
+1 0

البته این روشی که میگم مرسوم نیست و توسعه نمیشه اما میتونی از این روش هم استفاده کنی . تو این روش یه ستون تو دیتابیس با نام pic درست کن با Blob و عکس مورد نظرت رو تو این ستون Save کن بعد از اون با کد زیر میتونی بهش دسترسی داشته باشی و تو یک ایمیج ویو نشونش یدی

  Cursor cursor = db.rawQuery("SELECT * FROM yourtable WHERE id = 0", null);
while (cursor.moveToNext()) {
byte[] pic = cursor.getBlob(cursor.getColumnIndex("pic"));
}
cursor.close();
Bitmap bitmap = BitmapFactory.decodeByteArray(pic , 0, pic.length);
imageview.setImageBitmap(bitmap );
0 0
ممنونم حل شد از همین روش استفاده کردم (9 سال پیش)

پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .