Text + Bild + SQLite + Suche

A

andele78

Neues Mitglied
0
Habe aus einen Tutorial versucht einen Bild über Kamera oder Eigene Bilder mit Text in eine Datenbank zu packen, soweit funktioniert einwandfrei, das ganze wird in einen ListView angezeigt.
Problem ist eine Suche was mir leider nicht gelungen ist, text wird zwar angezeigt bild jedoch nicht....hoffe da kann jemand helfen.
gruss

Code:
public class SQLiteDemoActivity extends AppCompatActivity implements OnClickListener {
    Button addImage,addScan;
    EditText stuck;
    private EditText searchText = null;
    ArrayList<Contact> imageArry = new ArrayList<Contact>();
    ContactImageAdapter imageAdapter;
    private static final int CAMERA_REQUEST = 1;
    private static final int PICK_FROM_GALLERY = 2;
    ListView dataList;
    byte[] imageName;
    int imageId;
    Bitmap theImage;
    DataBaseHandler db;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        addScan = (Button)findViewById(R.id.btnScan);
        dataList = (ListView) findViewById(R.id.list);
        stuck = (EditText)findViewById(R.id.editText);
        db = new DataBaseHandler(this);
        searchText = (EditText) findViewById(R.id.searchText);
        addScan.setOnClickListener(this);
        searchText.addTextChangedListener(new TextWatcher() {
            @Override
            public void beforeTextChanged(CharSequence s, int start, int count, int after) {
            }
            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {
                SQLiteDemoActivity.this.imageAdapter.getFilter().filter(s.toString());
            }
            @Override
            public void afterTextChanged(Editable s) {
            }
        });

        List<Contact> contacts = db.getAllContacts();
        for (Contact cn : contacts) {
            String log = "ID:" + cn.getID() + " Name: " + cn.getName()
                    + " ,Image: " + cn.getImage();
            Log.d("Result: ", log);
            imageArry.add(cn);
        }
        imageAdapter = new ContactImageAdapter(this, R.layout.screen_list, imageArry);
        dataList.setAdapter(imageAdapter);
        dataList.setOnItemClickListener(new OnItemClickListener() {

            @Override
            public void onItemClick(AdapterView<?> parent, View v,
                    final int position, long id) {
                imageName = imageArry.get(position).getImage();
                imageId = imageArry.get(position).getID();

                Log.d("Before Send:****", imageName + "-" + imageId);
                ByteArrayInputStream imageStream = new ByteArrayInputStream(imageName);
                theImage = BitmapFactory.decodeStream(imageStream);
                Intent intent = new Intent(SQLiteDemoActivity.this,
                        DisplayImageActivity.class);
                intent.putExtra("imagename", theImage);
                intent.putExtra("imageid", imageId);
                startActivity(intent);
            }
        });

        final String[] option = new String[] { "Kamera", "Eigene Bilder" };
        ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
                android.R.layout.select_dialog_item, option);
        AlertDialog.Builder builder = new AlertDialog.Builder(this);
        builder.setTitle("Auswahl");
        builder.setAdapter(adapter, new DialogInterface.OnClickListener() {

            public void onClick(DialogInterface dialog, int which) {
                // TODO Auto-generated method stub
                Log.e("Wählen", String.valueOf(which));
                if (which == 0) {
                    callCamera();
                }
                if (which == 1) {
                    callGallery();
                }
            }
        });
        final AlertDialog dialog = builder.create();
        addImage = (Button) findViewById(R.id.btnAdd);
        addImage.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                dialog.show();
            }
        });
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        if (resultCode != RESULT_OK)
            return;
        switch (requestCode) {
        case CAMERA_REQUEST:
            Bundle extras = data.getExtras();
            if (extras != null) {
                Bitmap yourImage = extras.getParcelable("data");
                ByteArrayOutputStream stream = new ByteArrayOutputStream();
                yourImage.compress(Bitmap.CompressFormat.PNG, 100, stream);
                byte imageInByte[] = stream.toByteArray();
                Log.e("output before conversion", imageInByte.toString());
                Log.d("Insert: ", "Inserting ..");
                db.addContact(new Contact(stuck.getText().toString(), imageInByte));
                Intent i = new Intent(SQLiteDemoActivity.this,
                        SQLiteDemoActivity.class);
                startActivity(i);
                finish();
            }
            break;
        case PICK_FROM_GALLERY:
            Bundle extras2 = data.getExtras();
            if (extras2 != null) {
                Bitmap yourImage = extras2.getParcelable("data");
                ByteArrayOutputStream stream = new ByteArrayOutputStream();
                yourImage.compress(Bitmap.CompressFormat.PNG, 100, stream);
                byte imageInByte[] = stream.toByteArray();
                Log.e("output before conversion", imageInByte.toString());
                Log.d("Insert: ", "Inserting ..");
                db.addContact(new Contact(stuck.getText().toString(), imageInByte));
                Intent i = new Intent(SQLiteDemoActivity.this,
                        SQLiteDemoActivity.class);
                startActivity(i);
                finish();
            }
            break;
        }
        IntentResult scanningResult = IntentIntegrator.parseActivityResult(requestCode, resultCode, data);
        if (scanningResult != null) {
            String scanContent = scanningResult.getContents();
            searchText.setText(scanContent);
        }
        else{
            Toast toast = Toast.makeText(getApplicationContext(),
                    "No scan data received!", Toast.LENGTH_SHORT);
            toast.show();
        }
    }


    public void callCamera() {
        Intent cameraIntent = new Intent(
                android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
        cameraIntent.putExtra("crop", "true");
        cameraIntent.putExtra("aspectX", 0);
        cameraIntent.putExtra("aspectY", 0);
        cameraIntent.putExtra("outputX", 200);
        cameraIntent.putExtra("outputY", 50);
        startActivityForResult(cameraIntent, CAMERA_REQUEST);

    }

    public void callGallery() {
        Intent intent = new Intent();
        intent.setType("image/*");
        intent.setAction(Intent.ACTION_GET_CONTENT);
        intent.putExtra("crop", "true");
        intent.putExtra("aspectX", 0);
        intent.putExtra("aspectY", 0);
        intent.putExtra("outputX", 200);
        intent.putExtra("outputY", 150);
        intent.putExtra("return-data", true);
        startActivityForResult(
                Intent.createChooser(intent, "Complete action using"),
                PICK_FROM_GALLERY);
    }

    @Override
    public void onClick(View v) {
        if(v.getId()==R.id.btnScan){
            IntentIntegrator scanIntegrator = new IntentIntegrator(this);
            scanIntegrator.initiateScan();
        }
    }
}

Code:
public class DataBaseHandler extends SQLiteOpenHelper {
    private static final int DATABASE_VERSION = 1;
    private static final String DATABASE_NAME = "imagedb.db";
    public static final String TABLE_CONTACTS = "contacts";
    public static final String KEY_ROWID = "_id";
    public static final String KEY_ID = "id";
    public static final String KEY_NAME = "name";
    public static final String KEY_IMAGE = "image";
    public int id;
    public String name;
    public DataBaseHandler(Context context) {
        super(context, DATABASE_NAME, null, DATABASE_VERSION);
    }

    @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) {
        db.execSQL("DROP TABLE IF EXISTS " + TABLE_CONTACTS);
        onCreate(db);
    }

    public void addContact(Contact contact) {
        SQLiteDatabase db = this.getWritableDatabase();
        ContentValues values = new ContentValues();
        values.put(KEY_NAME, contact._name);
        values.put(KEY_IMAGE, contact._image);
        db.insert(TABLE_CONTACTS, null, values);
        db.close();
    }

    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;
    }

    public List<Contact> getAllContacts() {
        List<Contact> contactList = new ArrayList<Contact>();
        String selectQuery = "SELECT  * FROM contacts ORDER BY name";
        SQLiteDatabase db = this.getWritableDatabase();
        Cursor cursor = db.rawQuery(selectQuery, null);
        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));
                contactList.add(contact);
            } while (cursor.moveToNext());
        }
        db.close();
        return contactList;
    }

    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());
        return db.update(TABLE_CONTACTS, values, KEY_ID + " = ?",
                new String[] { String.valueOf(contact.getID()) });
    }

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

    public int getContactsCount() {
        String countQuery = "SELECT  * FROM " + TABLE_CONTACTS;
        SQLiteDatabase db = this.getReadableDatabase();
        Cursor cursor = db.rawQuery(countQuery, null);
        cursor.close();
        return cursor.getCount();
    }
}

Code:
public class ContactImageAdapter extends BaseAdapter{
    Context context;
    int layoutResourceId;
    private List<Contact> data1;
        public ContactImageAdapter(Context context, int layoutResourceId, List<Contact> data1) {
            this.layoutResourceId = layoutResourceId;
            this.context = context;
            this.data1 = data1;
        }
    @Override
    public int getCount() {
        return data1.size();
    }
    @Override
    public Contact getItem(int position) {
        return data1.get(position);
    }
    @Override
    public long getItemId(int position) {
        return data1.get(position).getID();
    }
        @Override
        public View getView(final 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 = data1.get(position);
            holder.txtTitle.setText(picture._name);
            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 Filter getFilter() {
        Filter filter = new Filter() {
            @Override
            protected FilterResults performFiltering(CharSequence filtro) {
                FilterResults results = new FilterResults();
                if (filtro == null || filtro.length() == 0) {
                    results.count = data1.size();
                    results.values = data1;
                    List<Contact> itens_filtrados = new ArrayList<Contact>();

                    for (int i = 0; i < data1.size(); i++) {
                        Contact data = data1.get(i);
                        filtro = filtro.toString().toLowerCase();
                        String condicao = data.getName().toLowerCase();
                        if (condicao.contains(filtro)) {
                            itens_filtrados.add(data);
                        }
                    }
                    results.count = itens_filtrados.size();
                    results.values = itens_filtrados;
                }
                return results;
            }
            @SuppressWarnings("unchecked")
            @Override
            protected void publishResults(CharSequence constraint, Filter.FilterResults results) {
                data1 = (List<Contact>) results.values;
                notifyDataSetChanged();
            }
        };
        return filter;
    }
}

Code:
public class Contact {
    int _id;
    String _name;
    byte[] _image;

    public Contact() {
    }

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

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

    public Contact(int keyId) {
        this._id = keyId;
    }

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

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

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

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

    public byte[] getImage() {
        return this._image;
    }

    public void setImage(byte[] image) {
        this._image = image;
    }
}

Code:
public class DisplayImageActivity extends Activity {
   Button btnDelete;
   ImageView imageDetail;
   int imageId;
   Bitmap theImage;

   @Override
   public void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.display);
      btnDelete = (Button) findViewById(R.id.btnDelete);
      imageDetail = (ImageView) findViewById(R.id.imageView1);

      Intent intnt = getIntent();
      theImage = (Bitmap) intnt.getParcelableExtra("imagename");
      imageId = intnt.getIntExtra("imageid", 20);
      Log.d("Image ID:****", String.valueOf(imageId));
      imageDetail.setImageBitmap(theImage);
      btnDelete.setOnClickListener(new OnClickListener() {

         @Override
         public void onClick(View v) {
            DataBaseHandler db = new DataBaseHandler(
                  DisplayImageActivity.this);
            Log.d("Delete Image: ", "Deleting.....");
            db.deleteContact(new Contact(imageId));
            Intent i = new Intent(DisplayImageActivity.this,
                  SQLiteDemoActivity.class);
            startActivity(i);
            finish();
         }
      });

   }
}
 
hallo nochmal.....vielleicht hab ich mich falsch ausgedrückt...........habe versucht eine such-funktion zu implementieren, leider ohne erfolg, text wird zwar richtig angezeigt aber bild nicht, es wird immer das erste bild in der datenbak angezeigt, woran liegt das?

Code:
       public Filter getFilter() {
        Filter filter = new Filter() {
            @Override
            protected FilterResults performFiltering(CharSequence filtro) {
                FilterResults results = new FilterResults();
                if (filtro == null || filtro.length() == 0) {
                    results.count = data1.size();
                    results.values = data1;
                    List<Contact> itens_filtrados = new ArrayList<Contact>();

                    for (int i = 0; i < data1.size(); i++) {
                        Contact data = data1.get(i);
                        filtro = filtro.toString().toLowerCase();
                        String condicao = data.getName().toLowerCase();
                        if (condicao.contains(filtro)) {
                            itens_filtrados.add(data);
                        }
                    }
                    results.count = itens_filtrados.size();
                    results.values = itens_filtrados;
                }
                return results;
            }
            @SuppressWarnings("unchecked")
            @Override
            protected void publishResults(CharSequence constraint, Filter.FilterResults results) {
                data1 = (List<Contact>) results.values;
                notifyDataSetChanged();
            }
        };
        return filter;
    }
 

Ähnliche Themen

R
Antworten
6
Aufrufe
982
swa00
swa00
B
Antworten
6
Aufrufe
1.016
jogimuc
J
A
Antworten
10
Aufrufe
1.006
swa00
swa00
Zurück
Oben Unten