2013-05-11 2 views
1

Я фотографирую фотоаппарат, временно сохраняя его на «ImageView», а затем сохраняя его в базе данных, нажав кнопку «Сохранить» в «Активность». Но сохранение изображения в базе данных не работает. Удалите проблему в коде.Хранение снимка камеры в базе данных SQLite

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

Невозможно уловить больше проблем с кодом и нет доступных журналов.

Я люблю только два. :)

  1. Вы забыли инициализировать класс базы данных ..

    helper.insert(img); 
    

    Так что перед использованием выше строки кода просто инициализировать класс базы данных в onCreate() деятельности. что-то подобное,

    databasehelper helper = new databasehelper(this); 
    
  2. Где значение a будет изменен?

    Так оно и должно быть, как

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

Во всяком случае эти два может помочь вам двигаться вперед.

+0

Привет, я новичок в программировании и его такие глупые и проклятые неудачные ошибки. Большое спасибо. Но можете ли вы сказать мне, почему это необходимо для инициализации класса перед использованием этого конкретного кода «helper.insert (img)». – Avin

+0

@Avin, потому что этот метод не является статическим, вам нужен экземпляр объекта для запуска этого метода на нем. это причина, по которой вам нужно инициализировать класс перед использованием его метода. –

+0

@Emil, Что значит «Мне нужен экземпляр объекта». Вы имеете в виду, мне нужна ссылка на объект или что-то? – Avin

Смежные вопросы