как отобразить многобайтовый массив в gridview - PullRequest
1 голос
/ 17 июня 2020

Я работаю с ByteArray, который содержит несколько изображений. В основном, когда я захватываю изображение с камеры, этот массив байтов преобразуется в массив строк и сохраняет эту строку в SQLite.

, как показано ниже.

like this

, а затем получить эту строку и преобразовать в байт, а затем попытаться отобразить изображения в виде сетки, но вместо получения изображения захвата я получаю только изображение.

like this

вот мой код:

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

}

мой класс адаптера:

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 класс:

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 для 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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...