Передача данных из Gridview в новую активность в Android - PullRequest
0 голосов
/ 19 декабря 2018

У меня проблема с передачей идентификатора из базы данных SQLite на новую вторую страницу активности.Я думаю, что мой проходной идентификатор является нулевым.Но я не знаю, какую часть мне нужно исправить.И я думаю, что это также связано со String и ArrayList.Первое кодирование является основным видом деятельности.Второе кодирование - это второе действие (ImageList).Третья кодировка - CustomGridAdapter для первой страницы.четвертая кодировка - CustomGridAdapter1 для второй страницы.Любой может исправить мою кодировку.

gridView = (GridView) findViewById(R.id.gridView1);
        imageList = new ArrayList<>();
        adapter = new CustomGridAdapter(this, R.layout.image_item, imageList);
        gridView.setAdapter(adapter);

        // get all data from sqlite
        Cursor cursor = databaseAccess.getData("SELECT * FROM IMAGE");
        imageList.clear();
        while (cursor.moveToNext()) {
            String id = cursor.getString(0);
            String name = cursor.getString(1);
            byte[] image = cursor.getBlob(2);

            imageList.add(new Things(id, name, image));
        }
        adapter.notifyDataSetChanged();

        gridView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> arg0, View view, int position, long id) {
                view.setSelected(true);
                final Things labels=imageList.get(position);
                Intent passIntent = new Intent(MainActivity.this, ImageList.class);
                passIntent.putExtra("keyid", String.valueOf(labels));
                startActivity(passIntent);

            }
        });

gridView = (GridView) findViewById(R.id.gridView2);
       imageList = new ArrayList<>();
        adapter = new CustomGridAdapter1(this, R.layout.image_general);
        gridView.setAdapter(adapter);

        Bundle showData = getIntent().getExtras();
        rowId = showData.getString("keyid");
        databaseAccess = new DatabaseAccess(getApplicationContext());
        cursor = databaseAccess.getImage(rowId);
        if(cursor.moveToFirst()) {
            do{
            String id = cursor.getString(1);
            String name = cursor.getString(2);
            byte[] image = cursor.getBlob(3);
            String imgid = cursor.getString(4);

            General general =new General(id, name, image,imgid);
            adapter.add(general);
            } while(cursor.moveToNext());
        }
        adapter.notifyDataSetChanged();

    }

public class CustomGridAdapter  extends BaseAdapter {

    private Context context;
    private int layout;
//    private ArrayList<Things> ImageList;
    List ImageList= new ArrayList();

    public CustomGridAdapter(Context aContext,  int layout, List ImageList) {
        this.context = aContext;
        this.ImageList =ImageList;
        this.layout=layout;
    }
    @Override
    public int getCount() {
        return ImageList.size();
    }

    @Override
    public Object getItem(int position) {
        return ImageList.get(position);
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

    private class ViewHolder {
        TextView Thing;
        ImageView ThingImage;
    }

    public View getView(int position, View convertView, ViewGroup parent) {
        ViewHolder holder = new ViewHolder();
        if (convertView == null) {
//            convertView = layoutInflater.inflate(R.layout.gridgeneral, null);
            LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            convertView = inflater.inflate(R.layout.image_item, parent, false);
            holder.ThingImage = (ImageView) convertView.findViewById(R.id.imageView_flag);
            holder.Thing= (TextView) convertView.findViewById(R.id.thing);
            convertView.setTag(holder);

        } else {
            holder = (ViewHolder) convertView.getTag();
        }

        Things things= (Things) this.getItem(position);
        holder.Thing.setText(things.getName());

        byte[] thingName = things.getImage();
        Bitmap bitmap = BitmapFactory.decodeByteArray(thingName, 0, thingName.length);
        holder.ThingImage.setImageBitmap(bitmap);

        return convertView;
    }

}

public class CustomGridAdapter1  extends BaseAdapter {

    private Context context;
    private int layout;
//    private ArrayList<General> ImageList;
    List ImageList= new ArrayList();

    public CustomGridAdapter1(Context aContext, int layout) {
        this.context = aContext;
        this.ImageList = ImageList;
        this.layout = layout;
    }

    @Override
    public int getCount() {
        return ImageList.size();
    }

    @Override
    public Object getItem(int position) {
        return ImageList.get(position);
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

    public void add(General general) {
        ImageList.add(general);
    }

    private class ViewHolder {
        TextView Thing;
        ImageView ThingImage;
    }

    public View getView(int position, View convertView, ViewGroup parent) {
        ViewHolder holder = new ViewHolder();
        if (convertView == null) {
//            convertView = layoutInflater.inflate(R.layout.gridgeneral, null);
            LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            convertView = inflater.inflate(R.layout.image_general, null);
            holder.ThingImage = (ImageView) convertView.findViewById(R.id.imageView_flag1);
            holder.Thing = (TextView) convertView.findViewById(R.id.thing1);
            convertView.setTag(holder);

        } else {
            holder = (ViewHolder) convertView.getTag();
        }

//        General general = ImageList.get(position);
        General general=(General) this.getItem(position);

        holder.Thing.setText(general.getName());
        byte[] thingName = general.getImage();
        Bitmap bitmap = BitmapFactory.decodeByteArray(thingName, 0, thingName.length);
        holder.ThingImage.setImageBitmap(bitmap);

        return convertView;
    }

}

1 Ответ

0 голосов
/ 19 декабря 2018

Если вы хотите отправить данные из вашего одного действия в другое с данными внутри вашего объекта класса POJO или объекта модели, используйте GSON для преобразования вашей модели с намеренным намерением.

Things labels=imageList.get(position);

Вы пытаетесьчтобы отправить ярлык к следующему действию.Таким образом, вы хотите передавать данные между различными действиями, однако вы передаете пользовательский список объектов, который невозможно проанализировать с помощью функции putExtra.

Вы можете использовать маркер Gson + Type для отправки ваших данных.

Просмотрите следующий пример:

Внутри вашей модели с именем Вещи .Добавьте аннотации к каждой частной информации.

import com.google.gson.annotations.SerializedName;
public class Student{

   @SerializedName("student")
    private String student;
   @SerializedName("id")
    private int studentID;

      public Student(String student, int studentID){
         this.student = student;
         this.studentID = studentID;
      }
}

При передаче данных внамерение, вам нужно сначала инициализировать объект и тип gson для преобразования вашего собственного объекта в строку json.

Things labels=imageList.get(position);
Gson gson = new Gson();
Type type = new TypeToken<Things>() {}.getType();
String json = gson.toJson(labels, type);

 Intent passIntent = new Intent(MainActivity.this, ImageList.class);
 passIntent.putExtra("keyid", json);
 startActivity(passIntent);

Внутри метода onCreateваша следующая или целевая деятельность, т.е. в вашем случае ImageList.java

Gson gson = new Gson();
String stringLocation = data.getStringExtra("keyid");
if(stringLocation != null) {
  Type type = new TypeToken<Things>>() {
   }.getType();
   Things label = gson.fromJson(stringLocation, type);
   Log.d("Data Recieved", label.getId());
}
else{
Log.d("Location Count","failed");
}
...