how to display multiple byte array to gridview

核能气质少年 提交于 2020-07-22 05:44:28

问题


I am working with a ByteArray which contains multiple images.basically when I capture image from camera that byte array converted into string array and store that string to SQLite.

like below.

and then get this string and converted to byte then trying to display images into grid view but instead of getting capture image I am getting only imageview.

here is my code :

SharedPreferences settings = getSharedPreferences("image String", Context.MODE_PRIVATE);
String encodedImage = settings.getString("img str", "");
String s = encodedImage;
s = s.replace("[" , "");
s = s.replace("]" , "");
s = s.replace("," , "");
String[] strings = s.split(" ");

Log.d("LOG_TAG", " string structure : " + s);
Log.d("LOG_TAG", " string Array structure : " + Arrays.toString(strings ));

byte[][] decodedString = new byte[strings.length][];
for (int i = 0; i <= strings.length-1; i++) {
    String string = strings[i];
    decodedString[i] = string.getBytes(Charset.defaultCharset()); // you can chose charset
    imageArry.add(new Contact1(decodedString));
    Log.d("LOG_TAG", " EncodedString : " + decodedString);
    Log.d("LOG_TAG", "Array Images : " + imageArry);
    imageAdapter = new ImageAdapter(this, R.layout.gv_item, imageArry);
    gvGallery.setAdapter(imageAdapter);
    imageAdapter.notifyDataSetChanged();
    gvGallery.setVerticalSpacing(gvGallery.getHorizontalSpacing());
    ViewGroup.MarginLayoutParams mlp = (ViewGroup.MarginLayoutParams) gvGallery.getLayoutParams();
    mlp.setMargins(0, gvGallery.getHorizontalSpacing(), 0, 0);
    Log.d("LOG_TAG", "Selected Images" + imageArry.size());

}

my Adapter class:

class ImageAdapter extends ArrayAdapter<Contact1> {

     Context context;
     int layoutResourceId;
     ArrayList<Contact1> data = new ArrayList<>();

    public ImageAdapter(Context context, int layoutResourceId, ArrayList<Contact1> data) {

        super(context, layoutResourceId, data);
        this.layoutResourceId = layoutResourceId;
        this.context = context;
        this.data = data;
    }

     public void setData(Contact1 contact)
     {
         data.add(contact);
     }

     @Override
     public View getView(int position, View convertView, ViewGroup parent) {
         View row = convertView;
        ImageHolder1 holder = null;

         if (row == null) {
             LayoutInflater inflater = ((Activity) context).getLayoutInflater();
             row = inflater.inflate(layoutResourceId, parent, false);
             holder = new ImageHolder1();
             holder.imgIcon = (ImageView) row.findViewById(R.id.ivGallery);
             row.setTag(holder);
         } else {
             holder = (ImageHolder1) row.getTag();
         }

         Contact picture = data.get(position);
         //convert byte to bitmap take from contact class
         byte[] outImage = picture._image;
         if (outImage != null){
         ByteArrayInputStream imageStream = new ByteArrayInputStream(outImage);
             Bitmap theImage = BitmapFactory.decodeStream(imageStream);
             holder.imgIcon.setImageBitmap(theImage);
         }
         return row;
     }

     class ImageHolder1 {
         ImageView imgIcon;
     }
 }

contact1 class:

public class Contact1 extends Contact {
    byte[][] _image;

    // Empty constructor
    public Contact1()
    {

    }
    public Contact1(byte[][] decodedString) {
        this._image = decodedString;

    }
    public byte[][] get_image1()
    {
        return _image;
    }

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

xml ivGallery:

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

    <ImageView
        android:id="@+id/ivGallery"
        android:layout_height="130dp"
        android:layout_width="130dp"
        android:padding="10dp"
        android:src="@mipmap/ic_launcher_round"
        android:scaleType="fitXY"
        />
</LinearLayout>

XML for gridview:

<RelativeLayout
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/layout_gv"
    android:layout_gravity="bottom"
    android:layout_marginBottom="20dp"
    android:layout_marginLeft="20dp"
    android:layout_marginRight="20dp"
    android:layout_marginTop="30dp"
    tools:ignore="NotSibling">

    <GridView
        android:id="@+id/gv"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:numColumns="5">
    </GridView>


</RelativeLayout>

来源:https://stackoverflow.com/questions/62432402/how-to-display-multiple-byte-array-to-gridview

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!