Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/214.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 尝试保存位图时在数据库中获取空值_Android_Sqlite_Bitmap_Save - Fatal编程技术网

Android 尝试保存位图时在数据库中获取空值

Android 尝试保存位图时在数据库中获取空值,android,sqlite,bitmap,save,Android,Sqlite,Bitmap,Save,我试图将相机拍摄的照片保存到我的SQLite数据库中,但数据库中的所有内容都是空的。我的转换错了吗?我看不出我做错了什么 这是我的片段: import android.content.ContentValues; import android.content.Intent; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.graphics.Bitmap; i

我试图将相机拍摄的照片保存到我的SQLite数据库中,但数据库中的所有内容都是空的。我的转换错了吗?我看不出我做错了什么

这是我的片段:

import android.content.ContentValues;
import android.content.Intent;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.provider.MediaStore;
import android.support.v4.app.Fragment;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;

import java.io.ByteArrayOutputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStream;



public class SpendingDetails extends Fragment {
private static final String TAG = "Spending Fragment";
String id;
View view;
String cursorNote;
String cursorTime;
String cursorDate;
String cursorLatitude;
String cursorLongitude;
String cursorAmount;
String cursorPicture;
ImageView image;
int REQUEST_CODE = 1;
int RESULT_OK =1;
MyDBHandler db;
SQLiteDatabase dataBase;
Cursor cursor;
Bitmap BMP;
public SpendingDetails() {
    // Required empty public constructor
}


@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {

    // Inflate the layout for this fragment

    id = getArguments().getString("id");

    view= inflater.inflate(R.layout.more_details, container, false);
return view;
}

@Override
public void onActivityCreated(Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);
     db = new MyDBHandler(getActivity(),null,null,3);
     dataBase = db.getWritableDatabase();
    cursor=dataBase.rawQuery("SELECT * FROM spendings_table WHERE _id=" + id, null);

   // Toast.makeText(getContext(), "ID passed : " + id, Toast.LENGTH_SHORT).show();
    TextView note = (TextView) view.findViewById(R.id.note);
    TextView time = (TextView) view.findViewById(R.id.time_details);
    TextView date = (TextView) view.findViewById(R.id.date);
     image = (ImageView) view.findViewById(R.id.imageView);







    if( cursor != null && cursor.moveToFirst() ){
         cursorNote = cursor.getString(cursor.getColumnIndexOrThrow("_note"));
        cursorTime = cursor.getString(cursor.getColumnIndexOrThrow("_time"));
        cursorDate = cursor.getString(cursor.getColumnIndexOrThrow("_date"));




    }

    note.setText(String.valueOf(cursorNote));
    time.setText(String.valueOf(cursorTime));
    date.setText(String.valueOf(cursorDate));
    byte[] picture = cursor.getBlob(cursor.getColumnIndexOrThrow("_picture"));
    image.setImageBitmap(BitmapFactory.decodeByteArray(picture,0,picture.length));


    image.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {


            Intent i = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);

            startActivityForResult(i, REQUEST_CODE);


        }// end onClick
    });



}
 public void onActivityResult(int requestcode, int resultcode, Intent data){


     if (requestcode==REQUEST_CODE){

          Bundle bundle = data.getExtras();
         BMP =(Bitmap) bundle.get("data");
         image.setImageBitmap(BMP);

         ByteArrayOutputStream stream = new ByteArrayOutputStream();
         BMP.compress(Bitmap.CompressFormat.PNG, 100, stream);
         db.addPicture(stream.toByteArray());


     }


}




}
我的DBHandler:

import android.app.Activity;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.database.sqlite.SQLiteQuery;
import android.widget.Toast;


public class MyDBHandler extends SQLiteOpenHelper {

    private static final int DATABASE_VERSION = 1;
    private static final String DATABASE_NAME = "payzati_spendings.db";
    private static final String TABLE_NAME = "spendings_table";
    private static final String COLUMN_ID = "_id";
    private static final String COLUMN_TRANSACTION = "_transactionType";
    private static final String COLUMN_LOCATION = "_location";
    private static final String COLUMN_DATE = "_date";
    private static final String COLUMN_TIME = "_time";
    private static final String COLUMN_LONGITUDE = "_longitude";
    private static final String COLUMN_LATITUDE = "_latitude";
    private static final String COLUMN_NOTE = "_note";
    private static final String COLUMN_PICTURE = "_picture";
    private static final String COLUMN_AMOUNT = "_amount";


    public MyDBHandler(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {
        super(context, DATABASE_NAME, null, version);
    }



    @Override
    public void onCreate(SQLiteDatabase db) {

        String query = " CREATE TABLE "+ TABLE_NAME + "( " +
                COLUMN_ID+" INTEGER PRIMARY KEY AUTOINCREMENT, "+
                COLUMN_TRANSACTION+" TEXT, "+
                COLUMN_AMOUNT+" DOUBLE, "+
                COLUMN_LOCATION+" TEXT, "+
                COLUMN_TIME+" TEXT, "+
                COLUMN_DATE+" TEXT, "+
                COLUMN_NOTE+" TEXT, "+
                COLUMN_LONGITUDE+" DOUBLE, "+
                COLUMN_LATITUDE+" DOUBLE, "+
                COLUMN_PICTURE+" BLOB "+
                ")";
        db.execSQL(query);

    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

        db.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME);
        onCreate(db);

    }

    // public void addRow(SpendingRow spendingRow){
    public void addRow(String transaction, double amount,String note, String location, String date,String time, double longitude, double latitude){

        ContentValues values = new ContentValues();
        values.put(COLUMN_TRANSACTION, transaction);
        values.put(COLUMN_AMOUNT, amount);
        values.put(COLUMN_LOCATION, location);
        values.put(COLUMN_DATE, date);
        values.put(COLUMN_TIME, time);
        values.put(COLUMN_LONGITUDE, longitude);
        values.put(COLUMN_LATITUDE, latitude);
        values.put(COLUMN_NOTE, note);


        SQLiteDatabase db = getWritableDatabase();
        db.insert(TABLE_NAME, null, values);


    }
    public void addPicture(byte[] bytes){

        ContentValues values = new ContentValues();
        values.put(COLUMN_PICTURE, bytes);

        SQLiteDatabase db = getWritableDatabase();
        db.insert(TABLE_NAME, null, values);

    }



}

图片数据与其他数据位于不同的数据库行上。每个
insert()
都会创建一个新行。因此我必须使用db.update?如果要更新现有行,请选择“是”。