سؤال

انا املك gridview حيث يجب أن يتم عرض الصور.لقد قمت بحفظ جميع الصور في قواعد البيانات على شكل نقط.أنا أستخدم أ hashmap والإضافه إليه arraylist.لدي أيضًا عنوان مع كل صورة.قانون بلدي على النحو التالي:

ArrayList<HashMap<String, Object>> mylist = new ArrayList<HashMap<String, Object>>();
        Cursor cr = dbAdapter.fetchAllMenuData();


            HashMap<String, Object> map ;


             cr.moveToFirst();

                int k=0;
                while(!cr.isAfterLast())
                {
                 map= new HashMap<String,Object>();
                 map.put("Image", cr.getBlob(cr.getColumnIndex("Image")));
                 map.put("Title", cr.getString(cr.getColumnIndex("Title")));
                 k++;
                 mylist.add(map);
                 map=null;
                 cr.moveToNext();
                }

        MySimpleAdapter adapter = new MySimpleAdapter(Menu.this, mylist,
                R.layout.menugrid, new String[] { "Title", "Image" },
                new int[] { R.id.item_title, R.id.img });

        list.setAdapter(adapter);

والآن أصبحت الصورة على شكل byte[].

أنا أستخدم أ ViewHolderلتعيين الصورة والعنوان المعينين لـ item في ال gridview.رمز على النحو التالي

holder.textView1.setText(mData.get(position).get("Title")
                    .toString());
            // holder.textView2.setText(mData.get(position).get("Description").toString());

            byte[] blob= toByteArray(mData.get(position).get("Image"));
         Bitmap bt=BitmapFactory.decodeByteArray(blob,0,blob.length);
            holder.imageView1.setImageBitmap(bt);  

المشكلة هي hashmap يشبه HashMap<String, Object> لذلك اضطررت إلى كتابة طريقة تحول الكائن إلى صفيف بايت.هذه الطريقة على النحو التالي:

public byte[] toBitmap (Object obj)
    {
      byte[] bytes = null;
      ByteArrayOutputStream bos = new ByteArrayOutputStream();
      try {
        ObjectOutputStream oos = new ObjectOutputStream(bos); 
        oos.writeObject(obj);
        oos.flush(); 
        oos.close(); 
        bos.close();
        bytes = bos.toByteArray ();
        return  bytes;

      }
      catch (IOException ex) {
       return null; //TODO: Handle the exception
      }

تعود هذه الطريقة byte[] بشكل صحيح.لكن يمكنني تحويلها إلى صورة نقطيةBitmapFactory.decodeByteArray(blob,0,blob.length); عائدات null.لذلك لا يمكن ضبطه على imageview.

هل كانت مفيدة؟

المحلول

جرب هذا.هذا قد يساعدك.

 byte[] pic=(cursor.getBlob(position));   
  ByteArrayInputStream imageStream = new ByteArrayInputStream(pic);
  Bitmap theImage= BitmapFactory.decodeStream(imageStream);
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top