图像和数据库连接的自定义列表视图 [英] custom list view with images and database connectivity

查看:121
本文介绍了图像和数据库连接的自定义列表视图的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想创建有关它与sqllite database.I包括图像也与自定义视图的应用程序。

I am trying to create an application regarding the custom view which is connected with sqllite database.I consists of images also.

的问题是:当我试图在模拟器中是显示图标(图像)执行程序被重复时,我执行。比如我的程序由facebook.png方案每次发生的。试图执行两个Facebook的图标来了的时候,当我只执行一个图像第一次被displayed.Again。如何删除解决这个问题

在code是如下:

MainActivity.java

MainActivity.java

package com.example.sqlliteimagedemo;

import java.io.ByteArrayOutputStream;
import java.util.ArrayList;
import java.util.List;

import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.util.Log;
import android.widget.ListView;

public class MainActivity extends ActionBarActivity 
{

    ArrayList<Contact> imageArry = new ArrayList<Contact>();
    ContactImageAdapter adapter;

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

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

        // convert bitmap to byte
                ByteArrayOutputStream stream = new ByteArrayOutputStream();
                image.compress(Bitmap.CompressFormat.JPEG, 50, stream);
                byte imageInByte[] = stream.toByteArray();
                /**
                 * CRUD Operations
                 * */
                // Inserting Contacts
                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);

            }

        }

ContactImageAdapter.java

ContactImageAdapter.java

 package com.example.sqlliteimagedemo;

    import java.io.ByteArrayInputStream;
    import java.util.ArrayList;
    import android.app.Activity;
    import android.content.Context;
    import android.graphics.Bitmap;
    import android.graphics.BitmapFactory;
    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(picture._name);
            //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;
        }
    }

DataBaseHandler.java

DataBaseHandler.java

package com.example.sqlliteimagedemo;

import java.util.ArrayList;
import java.util.List;

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

public class DataBaseHandler extends SQLiteOpenHelper  
{
    // All Static variables
        // Database Version
        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);

    }

    @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();
    }

}

activity_main.xml中

activity_main.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <ListView
        android:id="@+id/list"
        android:layout_width="fill_parent"
        android:layout_height="0dp"
        android:layout_weight="0.55" >
    </ListView>

</LinearLayout>

screen_list.xml

screen_list.xml

<?xml version="1.0" encoding="UTF-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="horizontal"
    android:padding="10dp" >

    <ImageView
        android:id="@+id/imgIcon"
        android:layout_width="0dp"
        android:layout_height="100dp"
        android:layout_weight="0.71"
        android:gravity="center_vertical" />

    <TextView
        android:id="@+id/txtTitle"
        android:layout_width="80dp"
        android:layout_height="fill_parent"
        android:gravity="center_vertical"
        android:textSize="14dp"
        android:layout_marginLeft="7dp" />

</LinearLayout>

请帮助..

推荐答案

您加入Facebook的联系人 Log.d(插入,插入..);
                db.addContact(新联系(脸谱,imageInByte));
表示前面的列表

Your adding facebook contact Log.d("Insert: ", "Inserting .."); db.addContact(new Contact("FaceBook", imageInByte)); before showing the list.

您code运行像这样: - 参见下点

You Code Running like this:- refer below points


  • 当你第一次执行一Facebook的加入。

  • 同样,当你执行程序,新的Facebook联系人补充道。因此,它显示了两个接点。

  • 像明智它被添加和打印,当你执行程序

更新code: - `

Updated Code:- `

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

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

    // convert bitmap to byte
            ByteArrayOutputStream stream = new ByteArrayOutputStream();
            image.compress(Bitmap.CompressFormat.JPEG, 50, stream);
            byte imageInByte[] = stream.toByteArray();
            /**
             * CRUD Operations
             * */
            // Inserting Contacts
            Log.d("Insert: ", "Inserting ..");

            //Added Code below
            SharedPreferences preferences = getSharedPreferences("SETTINGS_PREF", Context.MODE_PRIVATE);
            if(preferences.getBoolean("isFirstLaunch", true)){
                db.addContact(new Contact("FaceBook", imageInByte));

                SharedPreferences.Editor editor = preferences.edit();
                editor.putBoolean("isFirstLaunch", false);
                editor.commit();
            }

            // 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);

        }

这篇关于图像和数据库连接的自定义列表视图的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆