1

これは私のソース コードです。ギャラリーから画像をアップロードして SQL lite に保存するのではありません。私が間違っていたことを教えてください。私はこのサンプルコードを読みましたhttp://androidhub4you.blogspot.com/2012/09/hello-friends-today-i-am-going-to-share.htmlはハードコード画像を取得します このコードに参照ボタンを追加して取得します自分の選択と表示からの画像

 import android.app.Activity;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.net.Uri;
 import android.os.Bundle;
import android.util.Log;
 import android.view.View;
 import android.widget.Button;
 import android.widget.ListView;

 public class SQLiteDemoActivity extends Activity {


final int SELECT_PHOTO = 0;
 ArrayList<Contact> imageArry = new ArrayList<Contact>();
 ContactImageAdapter adapter;
 Button BrowseButton;
  DataBaseHandler db;

/** Called when the activity is first created. */
  @Override
  public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
   setContentView(R.layout.main);

  db = new DataBaseHandler(this);
 //get image from drawable
  //Bitmap image = BitmapFactory.decodeResource(getResources(),R.drawable.facebook);


 BrowseButton=(Button)findViewById(R.id.BrowseButton);



  BrowseButton.setOnClickListener(new View.OnClickListener() {

   @Override
   public void onClick(View v) {
    // TODO Auto-generated method stub
     // in onCreate or any event where your want the user to
    // select a file
    Intent photoPickerIntent = new Intent(Intent.ACTION_PICK);
    photoPickerIntent.setType("image/*");

    startActivityForResult(photoPickerIntent, SELECT_PHOTO);


 }
});



 }

 @Override
 protected void onActivityResult(int requestCode, int resultCode, Intent        
 imageReturnedIntent) {
  super.onActivityResult(requestCode, resultCode, imageReturnedIntent);

   switch(requestCode) {
 case SELECT_PHOTO:
  if(resultCode == RESULT_OK){
Uri selectedImage = imageReturnedIntent.getData();

InputStream imageStream = null;
try {
    imageStream = getContentResolver().openInputStream(
            selectedImage);
} catch (FileNotFoundException e) {
    e.printStackTrace();
}

Bitmap bmp = BitmapFactory.decodeStream(imageStream);


ByteArrayOutputStream stream = new ByteArrayOutputStream();
bmp.compress(Bitmap.CompressFormat.JPEG, 100, stream);
byte[] imageInByte = stream.toByteArray();

Log.d("Insert: ", "Inserting ..");
db.addContact(new Contact("FaceBook", imageInByte));
//display main List view bcard and contact name

//Reading all contacts from database
List<Contact> contacts = db.getAllContacts();
for (Contact cn : contacts) {
String log = "ID:" + cn.getID() + " Name: " + cn.getName()
+ " ,Image: " + cn.getImage();

//Writing Contacts to log
Log.d("Result: ", log);
//add contacts data in arrayList
imageArry.add(cn);

}
adapter = new ContactImageAdapter(this, R.layout.screen_list,
imageArry);
ListView dataList = (ListView) findViewById(R.id.list);
dataList.setAdapter(adapter);

try {
    stream.close();
    stream = null;
} catch (IOException e) {

    e.printStackTrace();
}



 //convert bitmap to byte


}
}
 }
  }









      private static final int DATABASE_VERSION = 1;

    //Database Name
   private static final String DATABASE_NAME = "imagedb";

   //Contacts table name
 private static final String TABLE_CONTACTS = "contacts";

 //Contacts Table Columns names
 private static final String KEY_ID = "id";
 private static final String KEY_NAME = "name";
private static final String KEY_IMAGE = "image";

  public DataBaseHandler(Context context) {
 super(context, DATABASE_NAME, null, DATABASE_VERSION);
  }

 //Creating Tables
  @Override
 public void onCreate(SQLiteDatabase db) {
 String CREATE_CONTACTS_TABLE = "CREATE TABLE " + TABLE_CONTACTS + "("
 + KEY_ID + " INTEGER PRIMARY KEY," + KEY_NAME + " TEXT,"
  + KEY_IMAGE + " BLOB" + ")";
db.execSQL(CREATE_CONTACTS_TABLE);
    }

   //Upgrading database
   @Override
   public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
   //Drop older table if existed
    db.execSQL("DROP TABLE IF EXISTS " + TABLE_CONTACTS);

     //Create tables again
    onCreate(db);
     }

   /**
  * All CRUD(Create, Read, Update, Delete) Operations
    */

      public// Adding new contact
   void addContact(Contact contact) {
     SQLiteDatabase db = this.getWritableDatabase();

     ContentValues values = new ContentValues();
   values.put(KEY_NAME, contact._name); // Contact Name
    values.put(KEY_IMAGE, contact._image); // Contact Phone

     //Inserting Row
    db.insert(TABLE_CONTACTS, null, values);
      db.close(); // Closing database connection
      }

     //Getting single contact
    Contact getContact(int id) {
   SQLiteDatabase db = this.getReadableDatabase();

  Cursor cursor = db.query(TABLE_CONTACTS, new String[] { KEY_ID,
   KEY_NAME, KEY_IMAGE }, KEY_ID + "=?",
    new String[] { String.valueOf(id) }, null, null, null, null);
   if (cursor != null)
   cursor.moveToFirst();

   Contact contact = new Contact(Integer.parseInt(cursor.getString(0)),
   cursor.getString(1), cursor.getBlob(1));

 //return contact
     return contact;

    }

  //Getting All Contacts
     public List<Contact> getAllContacts() {
    List<Contact> contactList = new ArrayList<Contact>();
     //Select All Query
      String selectQuery = "SELECT * FROM contacts ORDER BY name";

     SQLiteDatabase db = this.getWritableDatabase();
     Cursor cursor = db.rawQuery(selectQuery, null);
     //looping through all rows and adding to list
      if (cursor.moveToFirst()) {
     do {
       Contact contact = new Contact();
     contact.setID(Integer.parseInt(cursor.getString(0)));
    contact.setName(cursor.getString(1));
    contact.setImage(cursor.getBlob(2));
    //Adding contact to list
      contactList.add(contact);
    } while (cursor.moveToNext());
     }
    //close inserting data from database
    db.close();
      //return contact list
       return contactList;

     }

     //Updating single contact
     public int updateContact(Contact contact) {
     SQLiteDatabase db = this.getWritableDatabase();

    ContentValues values = new ContentValues();
     values.put(KEY_NAME, contact.getName());
    values.put(KEY_IMAGE, contact.getImage());

   //updating row
    return db.update(TABLE_CONTACTS, values, KEY_ID + " = ?",
    new String[] { String.valueOf(contact.getID()) });

   }

  //Deleting single contact
    public void deleteContact(Contact contact) {
  SQLiteDatabase db = this.getWritableDatabase();
   db.delete(TABLE_CONTACTS, KEY_ID + " = ?",
    new String[] { String.valueOf(contact.getID()) });
     db.close();
    }

    //Getting contacts Count
     public int getContactsCount() {
   String countQuery = "SELECT * FROM " + TABLE_CONTACTS;
    SQLiteDatabase db = this.getReadableDatabase();
    Cursor cursor = db.rawQuery(countQuery, null);
  cursor.close();

    //return count
  return cursor.getCount();
    }
     }







    import android.view.LayoutInflater;
 import android.view.View;
import android.view.ViewGroup;
  import android.widget.ArrayAdapter;
 import android.widget.ImageView;
 import android.widget.TextView;

   public class ContactImageAdapter extends ArrayAdapter<Contact>{
Context context;
int layoutResourceId;
//BcardImage data[] = null;
 ArrayList<Contact> data=new ArrayList<Contact>();
 public ContactImageAdapter(Context context, int layoutResourceId, ArrayList<Contact>  
 data) {
 super(context, layoutResourceId, data);
   this.layoutResourceId = layoutResourceId;
 this.context = context;
   this.data = data;
   }

   @Override
 public View getView(int position, View convertView, ViewGroup parent) {
View row = convertView;
ImageHolder holder = null;
 if(row == null)
  {
  LayoutInflater inflater = ((Activity)context).getLayoutInflater();
  row = inflater.inflate(layoutResourceId, parent, false);
     holder = new ImageHolder();
 holder.txtTitle = (TextView)row.findViewById(R.id.txtTitle);
 holder.imgIcon = (ImageView)row.findViewById(R.id.imgIcon);
     row.setTag(holder);
  }
else
    {
  holder = (ImageHolder)row.getTag();
    }
   Contact picture = data.get(position);
    holder.txtTitle.setText("facebook");
      //convert byte to bitmap take from contact class
   byte[] outImage=picture._image;
   ByteArrayInputStream imageStream = new ByteArrayInputStream(outImage);
  Bitmap theImage = BitmapFactory.decodeStream(imageStream);
   holder.imgIcon.setImageBitmap(theImage);
  return row;
 }
  static class ImageHolder
  {
  ImageView imgIcon;
   TextView txtTitle;
 }
    }











           public class Contact {

// private variables
int _id;
String _name;
byte[] _image;

// Empty constructor
public Contact() {

}

// constructor
public Contact(int keyId, String name, byte[] image) {
this._id = keyId;
this._name = name;
this._image = image;

}

// constructor
public Contact(String contactID, String name, byte[] image) {
this._name = name;
this._image = image;

}

// constructor
public Contact(String name, byte[] image) {
this._name = name;
this._image = image;
}

// getting ID
public int getID() {
return this._id;
}

// setting id
public void setID(int keyId) {
this._id = keyId;
}

// getting name
public String getName() {
return this._name;
}

// setting name
public void setName(String name) {
this._name = name;
}

// getting phone number
public byte[] getImage() {
return this._image;
}

// setting phone number
public void setImage(byte[] image) {
this._image = image;
}
}
4

2 に答える 2

0
Are you got any solution or not? I am owner of given above URL "Androidhub4you.com".
If you still stuck please try my idea just make a new activity and add button for take picture from camera or gallery what ever you want after that pass this image to next activity through Intent and get it some thing like that-

Intent intent=getIntent();
Bitmap photo = intent.getExtra("image");

and now use this bitmap to instead of below Bitmap image.

DataBaseHandler db = new DataBaseHandler(this);
// get image from drawable
Bitmap image = BitmapFactory.decodeResource(getResources(),
R.drawable.facebook); 

Here I can't post my blog url but you can search on my blog for camera/gallery code. Just merge two code.

以下のリンクを試してみてください。お役に立てば幸い です。ここをクリックしてください。

Thanks,
于 2013-03-28T05:44:16.157 に答える