如何拍照并保存到DataBase并添加到ListView?

时间:2014-02-21 06:24:32

标签: android database sqlite listview android-camera

我是android新手。我创建了一个数据库和一个列表视图。我想通过相机拍照将照片添加到listview。

这是我的输入类:

package com.kalagar.warehouse;

import android.app.Activity;
import android.app.Dialog;
import android.content.Intent;
import android.graphics.Bitmap;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageButton;
import android.widget.ImageView;
import android.widget.TextView;

public class AddNew extends Activity implements View.OnClickListener {

    ImageButton ib;
    Button b;
    ImageView iv;
    EditText etName,etKharid,etForoush;
    Intent i;
    final static int CameraData = 0;
    Bitmap bmp;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.addnew);
        startAddNew();
    }

    private void startAddNew() {
        ib = (ImageButton) findViewById(R.id.ibTakePic);
        b = (Button) findViewById(R.id.bSave);
        iv = (ImageView) findViewById(R.id.ivPic);
        etName = (EditText) findViewById(R.id.etName);
        etKharid = (EditText) findViewById(R.id.etKharid);
        etForoush = (EditText) findViewById(R.id.etForoush);
        b.setOnClickListener(this);
        ib.setOnClickListener(this);

    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
        case R.id.ibTakePic:
            i = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
            startActivityForResult(i, CameraData);
            break;

        case R.id.bSave:
            boolean didItWork = true;
            try {
                String name = etName.getText().toString();
                String kharid = etKharid.getText().toString();
                String foroush = etForoush.getText().toString();

                DataBase entry = new DataBase(AddNew.this);
                entry.open();
                entry.createEntry(name, kharid, foroush);
                entry.close();
            } catch (Exception e) {
                // TODO Auto-generated catch block
                didItWork = false;
                String error = e.toString();
                Dialog d = new Dialog(this);
                d.setTitle("oooh ! Nooo !!");
                TextView tv = new TextView(this);
                tv.setText(error);
                d.setContentView(tv);
                d.show();
                e.printStackTrace();
            }finally{
                if (didItWork){
                    Dialog d = new Dialog(this);
                    d.setTitle("Heck Yea!");
                    TextView tv = new TextView(this);
                    tv.setText("Success");
                    d.setContentView(tv);
                    d.show();
                }
            }
            break;
        }
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (resultCode == RESULT_OK) {
            Bundle extras = data.getExtras();
            bmp = (Bitmap) extras.get("data");
            iv.setImageBitmap(bmp);
        }

    }


}

这是我输入的XML:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <EditText
        android:id="@+id/etName"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:ems="10"
        android:hint="نام محصول"
         >

        <requestFocus />
    </EditText>

    <EditText
        android:id="@+id/etKharid"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:ems="10"
        android:hint="قیمت خرید"
        android:inputType="number"
         />

    <EditText
        android:id="@+id/etForoush"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:ems="10"
        android:hint="قیمت فروش"
        android:inputType="number"
         />

    <ImageButton
        android:id="@+id/ibTakePic"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/ic_launcher"
        android:layout_gravity="center"/>

    <ImageView
        android:id="@+id/ivPic"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/ic_launcher" 
        android:layout_gravity="center"/>

    <Button
        android:id="@+id/bSave"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="ذخیره"
        android:layout_gravity="center" />

</LinearLayout>

这是我的数据库:

package com.kalagar.warehouse;

import java.util.ArrayList;

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.util.Log;

public class DataBase {

    private static final String LOGTAG = "WAREHOUSE";

    private static final String DATABASE_TABLE = "WareHouse";
    private static final int DATABASE_VERSION = 1;
    private static final String DATABASE_NAME = "SellList";

    public static final String ROW_ID = "_id";
    public static final String ROW_NAME = "nameOfObject";
    public static final String ROW_KHARID = "ghBuy";
    public static final String ROW_FOROUSH = "ghSell";
    public static final String ROW_PICTURE = "picture";

    private static final String TABLE_CREATE = "CREATE TABLE " + DATABASE_TABLE
            + " (" + ROW_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " + ROW_NAME
            + " TEXT, " + ROW_KHARID + " NUMERIC, " + ROW_FOROUSH
            + " NUMERIC, " + ROW_PICTURE + " TEXT " + ")";

    private WareHouseDdbHelper ourHelper;
    private final Context ourContext;
    private SQLiteDatabase ourDatabase;

    private static class WareHouseDdbHelper extends SQLiteOpenHelper {

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

        @Override
        public void onCreate(SQLiteDatabase db) {
            db.execSQL(TABLE_CREATE);
            Log.i(LOGTAG, "Table has been create");
        }

        @Override
        public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
            db.execSQL("DROP TABLE IF EXIST " + DATABASE_TABLE);
            onCreate(db);
        }

    }

    public DataBase(Context c) {
        ourContext = c;
    }

    public DataBase open() throws SQLException {
        ourHelper = new WareHouseDdbHelper(ourContext);
        ourDatabase = ourHelper.getWritableDatabase();
        return this;
    }

    public void close() {
        ourHelper.close();
    }

    public long createEntry(String name, String kharid, String foroush) {
        // TODO Auto-generated method stub
        ContentValues cv = new ContentValues();
        cv.put(ROW_NAME, name);
        cv.put(ROW_KHARID, kharid);
        cv.put(ROW_FOROUSH, foroush);
        return ourDatabase.insert(DATABASE_TABLE, null, cv);

    }

    public ArrayList<String> getDataName() {
        // TODO Auto-generated method stub
        String[] columns = new String[] { ROW_ID, ROW_NAME, ROW_KHARID,
                ROW_FOROUSH };
        Cursor c = ourDatabase.query(DATABASE_TABLE, columns, null, null, null,
                null, null);
        ArrayList<String> result = new ArrayList<String>();

        int iRow = c.getColumnIndex(ROW_ID);
        int iName = c.getColumnIndex(ROW_NAME);
        int iKharid = c.getColumnIndex(ROW_KHARID);
        int iForoush = c.getColumnIndex(ROW_FOROUSH);

        for (c.moveToFirst(); !c.isAfterLast(); c.moveToNext()) {
            result.add(c.getString(iRow) + " " + c.getString(iName)
                    + " " + c.getString(iKharid) + " " + c.getString(iForoush));
        }

        return result;
    }
}

这是我在listView中显示数据的类:

package com.kalagar.warehouse;

import java.util.ArrayList;

import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.widget.ArrayAdapter;
import android.widget.ListView;

public class Show extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.list);
        Name();
    }

    private void Name() {
        ListView tvName = (ListView) findViewById(R.id.lvListOfObject);
        DataBase infoName = new DataBase(this);
        infoName.open();
        ArrayList<String> dataName = infoName.getDataName();
        infoName.close();
        tvName.setAdapter(new ArrayAdapter<String>(this,
                android.R.layout.simple_list_item_1, dataName));
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.show, menu);
        return true;
    }

}

这是我的ListView XML,我想在每一行添加图片:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <TextView
        android:id="@+id/tvListHeader"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"
        android:layout_alignParentTop="true"
        android:textSize="30dp"
        android:text="لیست محصولات" />

    <ListView
        android:id="@+id/lvListOfObject"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@+id/searchView1"
        android:layout_centerHorizontal="true" >

    </ListView>

    <SearchView
        android:id="@+id/searchView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentRight="true"
        android:layout_below="@+id/tvListHeader" >

    </SearchView>

</RelativeLayout>

如何使用此模板显示ListView:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <ImageView
        android:id="@+id/ivPicture"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        android:adjustViewBounds="true"
        android:maxHeight="80dp"
        android:maxWidth="80dp"
        android:src="@drawable/download" />

    <TextView
        android:id="@+id/tvName"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"
        android:layout_alignParentTop="true"
        android:text="@string/name_shown_here"
        android:textAppearance="?android:attr/textAppearanceLarge" />

    <TextView
        android:id="@+id/tvKharid"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_above="@+id/tvForoush"
        android:layout_centerHorizontal="true"
        android:text="Kharid" />

    <TextView
        android:id="@+id/tvForoush"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignBottom="@+id/ivPicture"
        android:layout_alignLeft="@+id/tvKharid"
        android:text="Foroush" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignBottom="@+id/tvKharid"
        android:layout_alignParentRight="true"
        android:text="قیمت خرید" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignBaseline="@+id/tvForoush"
        android:layout_alignBottom="@+id/tvForoush"
        android:layout_alignParentRight="true"
        android:text="قیمت فروش" />



</RelativeLayout>

我需要添加哪些代码以及我需要添加的位置?

抱歉我的英文!

1 个答案:

答案 0 :(得分:0)

为什么不将图片保存在Sd卡而不是数据库中。

This链接可帮助您完成此操作