Получить идентификатор представления в GridView

Что я пробовал


Привет, ребята, я сначала создал базу данных, которую я заполнил тремя столбцами, RowID, imageID, text. Затем я создал GridView, который заполнил мою базу данных. Теперь я создал onItemClickListner, в котором я хотел бы получить идентификатор изображения по положению. После этого я ищу свою таблицу БД по этому идентификатору изображения, чтобы получить текст. Этот материал мне нужно сохранить в моей другой таблице. Проблема в том, что я думаю, что я не получаю imageID, и, как и этот поиск ничего в БД, если вы посмотрите на Logcat, вы увидите, что он нулевой, поэтому, вероятно, он не получил imageID или я искать в моем DBAdapter не так, как я должен.

Вопрос


ВАЖНО: я наконец-то получил идентификатор представления, спасибо FuzzialLogic, но все еще есть проблема, я не могу получить строку по моему курсору. Пожалуйста, взгляните на это!

‹---------------------------------------------------------------- ----РАБОТАЕТ--------------------------------------------- -------------------> Что мне нужно изменить в моем коде, чтобы я мог получить идентификатор изображения, на которое нажал пользователь. После этого я хотел бы выполнить поиск в моей БД с этим идентификатором изображения, чтобы получить текст, который я сохранил с изображением. Этот материал впоследствии попадает в мою другую таблицу.

Здесь внизу вы видите Код и LogCat-Log. Я также добавил свой DatabaseAdapter, если он кому-то нужен. Спасибо за вашу помощь в Advance!

Код


SFilterConfigActivity.class:

    package de.retowaelchli.filterit;

import java.util.ArrayList;

import android.app.Activity;
import android.content.Intent;
import android.database.Cursor;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.EditText;
import android.widget.GridView;
import android.widget.Toast;
import android.*;

import de.retowaelchli.filterit.database.SmileyDBAdapter;
import de.retowaelchli.filterit.database.SFilterDBAdapter;
import de.retowaelchli.filterit.stats.ImageAdapter;




public class SFilterConfigActivity extends Activity {

    //Variablen deklarieren
    private String name;
    private String keyword;
    private String smiley;
    private String text;

    private String source;
    private Integer[] info;

    private SmileyDBAdapter SmileyHelper;
    private SFilterDBAdapter mDbHelper;


@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.sfilter_config);

      SmileyHelper = new SmileyDBAdapter(this);
      mDbHelper = new SFilterDBAdapter(this);

      getImages();
      grid();
    }


public void grid(){

    //Hier wird die GridView definiert und anschliesend über den ImageAdapter gefüllt
    final GridView gridview = (GridView) findViewById(R.id.SmileyGrind);
    gridview.setAdapter(new ImageAdapter(this, info));


    //Hier wird definiert was passiert wenn auf ein Bild in der GridView geklickt wird
    gridview.setOnItemClickListener(new OnItemClickListener(){

        public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
            Toast.makeText(SFilterConfigActivity.this, "" + position, Toast.LENGTH_SHORT).show();
           // gridview.setSelection(position);
           // Funktioniert noch nich Custom GridView Layout dafür erstellen siehe Stackoverflow
            if(position == gridview.getSelectedItemPosition()){
                v.setBackgroundColor(0xFF00FF00);

            }
            else{
                v.setBackgroundColor(0x0000000);
            }

            //Hier wird herrausgefunden welche ID das Bild hat und in den jeweiligen String gespeichert
            source = (new Long(id)).toString();

            SmileyHelper.open();
            Cursor c = SmileyHelper.getSmiley(source);
            startManagingCursor(c);

            if (c.moveToFirst()) { 
                do { 
                text = c.getString(c.getColumnIndex(SmileyDBAdapter.SOURCE)); 
                smiley = c.getString(c.getColumnIndex(SmileyDBAdapter.INFO)); 

                } while (c.moveToNext());
            SmileyHelper.close();


            }

        }

    });
}


public Integer[] getImages(){

    SmileyHelper.open();

    Cursor c = SmileyHelper.getAllSmileys();

    ArrayList<Integer> infoList = new ArrayList<Integer>();

    c.getColumnIndex(SmileyDBAdapter.INFO);
    int ColumnIndex = c.getColumnIndex(SmileyDBAdapter.INFO);

    if(c!=null)
    {

       while(c.moveToNext()){
           String infoItem = c.getString( ColumnIndex );
           infoList.add(Integer.parseInt(infoItem));
       }
    }


    info = infoList.toArray(new Integer[]{});

    c.close();


    SmileyHelper.close();


    return info;

}



public void onClickSConfigSave(View v){

    EditText edtTextName = (EditText)findViewById(R.id.SFConfigName);
    EditText edtTextKeyword = (EditText)findViewById(R.id.SFConfigKeyword);

    name = edtTextName.getText().toString();
    keyword = edtTextKeyword.getText().toString();

    mDbHelper.open();
    mDbHelper.createSFilter(name, keyword, smiley, text);
    mDbHelper.close();

    final Intent i = new Intent(this, SmileyActivity.class);
    startActivity(i);
    }
}

ImageAdapter.class

    package de.retowaelchli.filterit.stats;

import android.content.Context;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.GridView;
import android.widget.ImageView;


//import de.retowaelchli.filterit.SFilterConfigActivity;

public class ImageAdapter extends BaseAdapter {

    // references to our images
    private Integer[] mThumbIds;
    private Context mContext;


    public ImageAdapter(Context c, Integer[] imageIds) {
        mContext = c;
        mThumbIds = imageIds;

    }



    public int getCount() {
       return mThumbIds.length;
    }

    public Object getItem(int position) {
        return mThumbIds[position];
    }

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

    // create a new ImageView for each item referenced by the Adapter
    public View getView(final int position, View convertView, ViewGroup parent) {
        ImageView imageView;
        if (convertView == null) {  // if it's not recycled, initialize some attributes
            imageView = new ImageView(mContext);
            imageView.setLayoutParams(new GridView.LayoutParams(85, 85));
            imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
            imageView.setPadding(8, 8, 8, 8);
        } else {
            imageView = (ImageView) convertView;
        }

        imageView.setId(mThumbIds[position]);

        imageView.setImageResource(mThumbIds[position]);




        return imageView;




    }

}

Вот так я добавил картинки с текстом в БД:

   private void angry(){

        int drawableID = context.getResources().getIdentifier("angry", "drawable", getPackageName());
        iv.setImageResource(drawableID);

        //String info = String.valueOf(drawableID);
        String info = String.valueOf(drawableID);

        mDbHelper.open();

        mDbHelper.createSmiley("You received a angry message", info);

        mDbHelper.close();
    }

Бревенчатый кот


А вот Лог:

10-12 11:32:29.632: DEBUG/Database(25130): dbopen(): path = /data/data/de.retowaelchli.filterit/databases/filterit, flag = 6
10-12 11:32:29.632: DEBUG/Database(25130): dbopen(): path = /data/data/de.retowaelchli.filterit/databases/filterit, free size = 663
10-12 11:32:30.612: DEBUG/Database(25130): dbopen(): path = /data/data/de.retowaelchli.filterit/databases/filterit, flag = 6
10-12 11:32:30.612: DEBUG/Database(25130): dbopen(): path = /data/data/de.retowaelchli.filterit/databases/filterit, free size = 663
10-12 11:32:30.632: ERROR/Database(25130): Error inserting text=null smiley=null keyword=test name=test
10-12 11:32:30.632: ERROR/Database(25130): android.database.sqlite.SQLiteConstraintException: error code 19: constraint failed
10-12 11:32:30.632: ERROR/Database(25130):     at android.database.sqlite.SQLiteStatement.native_execute(Native Method)
10-12 11:32:30.632: ERROR/Database(25130):     at android.database.sqlite.SQLiteStatement.execute(SQLiteStatement.java:61)
10-12 11:32:30.632: ERROR/Database(25130):     at android.database.sqlite.SQLiteDatabase.insertWithOnConflict(SQLiteDatabase.java:1671)
10-12 11:32:30.632: ERROR/Database(25130):     at android.database.sqlite.SQLiteDatabase.insert(SQLiteDatabase.java:1515)
10-12 11:32:30.632: ERROR/Database(25130):     at de.retowaelchli.filterit.database.SFilterDBAdapter.createSFilter(SFilterDBAdapter.java:89)
10-12 11:32:30.632: ERROR/Database(25130):     at de.retowaelchli.filterit.SFilterConfigActivity.onClickSConfigSave(SFilterConfigActivity.java:143)
10-12 11:32:30.632: ERROR/Database(25130):     at java.lang.reflect.Method.invokeNative(Native Method)
10-12 11:32:30.632: ERROR/Database(25130):     at java.lang.reflect.Method.invoke(Method.java:507)
10-12 11:32:30.632: ERROR/Database(25130):     at android.view.View$1.onClick(View.java:2186)
10-12 11:32:30.632: ERROR/Database(25130):     at android.view.View.performClick(View.java:2532)
10-12 11:32:30.632: ERROR/Database(25130):     at android.view.View$PerformClick.run(View.java:9277)
10-12 11:32:30.632: ERROR/Database(25130):     at android.os.Handler.handleCallback(Handler.java:587)
10-12 11:32:30.632: ERROR/Database(25130):     at android.os.Handler.dispatchMessage(Handler.java:92)
10-12 11:32:30.632: ERROR/Database(25130):     at android.os.Looper.loop(Looper.java:143)
10-12 11:32:30.632: ERROR/Database(25130):     at android.app.ActivityThread.main(ActivityThread.java:4196)
10-12 11:32:30.632: ERROR/Database(25130):     at java.lang.reflect.Method.invokeNative(Native Method)
10-12 11:32:30.632: ERROR/Database(25130):     at java.lang.reflect.Method.invoke(Method.java:507)
10-12 11:32:30.632: ERROR/Database(25130):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
10-12 11:32:30.632: ERROR/Database(25130):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
10-12 11:32:30.632: ERROR/Database(25130):     at dalvik.system.NativeStart.main(Native Method)

Здесь вы найдете код моего SmileyDBAdapter.

SmileyDB

package de.retowaelchli.filterit.database;

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;

public class SmileyDBAdapter {

        public static final String ROW_ID = "_id";
        public static final String SOURCE = "source";
        public static final String INFO = "info";

        private static final String DATABASE_TABLE = "smiley";

        private DatabaseHelper mDbHelper;
        private SQLiteDatabase mDb;

        private final Context mCtx;

        private static class DatabaseHelper extends SQLiteOpenHelper {

            DatabaseHelper(Context context) {
                super(context, DBAdapter.DATABASE_NAME, null, DBAdapter.DATABASE_VERSION);
            }

            @Override
            public void onCreate(SQLiteDatabase db) {
            }

            @Override
            public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
            }
        }

        /**
         * Constructor - takes the context to allow the database to be
         * opened/created
         * 
         * @param ctx
         *            the Context within which to work
         */
        public SmileyDBAdapter(Context ctx) {
            this.mCtx = ctx;
        }


        public SmileyDBAdapter open() throws SQLException {
            this.mDbHelper = new DatabaseHelper(this.mCtx);
            this.mDb = this.mDbHelper.getWritableDatabase();
            return this;
        }

        /**
         * close return type: void
         */
        public void close() {
            this.mDbHelper.close();
        }


        public long createSmiley(String source, String info ){
            ContentValues initialValues = new ContentValues();
            initialValues.put(SOURCE, source);
            initialValues.put(INFO, info);
            return this.mDb.insert(DATABASE_TABLE, null, initialValues);
        }


        public boolean deleteSmiley(long rowId) {

            return this.mDb.delete(DATABASE_TABLE, ROW_ID + "=" + rowId, null) > 0;
        }

        public Cursor getAllSmileys() {

            return this.mDb.query(DATABASE_TABLE, new String[] { ROW_ID,
                    SOURCE, INFO }, null, null, null, null, null);
        }




        //Es wird nach der ID des smiley gesucht.
        public Cursor getSmiley(String info) throws SQLException {

            Cursor mCursor =

            this.mDb.query(true, DATABASE_TABLE, new String[] { ROW_ID, SOURCE,
                    INFO }, INFO + "=" + info, null, null, null, null, null);
            if (mCursor != null) {
                mCursor.moveToFirst();
            }
            return mCursor;
        }


        public boolean updateSmiley(long rowId, String source, String info,
                String cache){
            ContentValues args = new ContentValues();
            args.put(SOURCE, source);
            args.put(INFO, info);

            return this.mDb.update(DATABASE_TABLE, args, ROW_ID + "=" + rowId, null) >0; 
        }

    }

DBAdapter

package de.retowaelchli.filterit.database;

import android.content.Context;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;

public class DBAdapter {

    public static final String DATABASE_NAME = "filterit";

    public static final int DATABASE_VERSION = 1;

    public static final String CREATE_TABLE_ADFILTER = "create table adfilter (_id integer primary key autoincrement, "
    + ADFilterDBAdapter.NAME+" not null ,"
    + ADFilterDBAdapter.KEYWORD+" not null ,"
    + ADFilterDBAdapter.CACHE + " not null );";

    private static final String CREATE_TABLE_SFILTER = "create table sfilter (_id integer primary key autoincrement, "
    +SFilterDBAdapter.NAME+" not null ,"
    +SFilterDBAdapter.KEYWORD+" not null ,"
    +SFilterDBAdapter.SMILEY+ " not null ,"
    +SFilterDBAdapter.TEXT+ " not null );";

    private static final String CREATE_TABLE_ADMESSAGES = "create table admessages (_id integer primary key autoincrement, "
    +MessagesDBAdapter.PHONENUMBER+" not null ,"
    +MessagesDBAdapter.MESSAGE+ " not null );";


    private static final String CREATE_TABLE_SMILEY = " create table smiley (_id integer primary key autoincrement, "
    +SmileyDBAdapter.SOURCE+" not null ,"
    +SmileyDBAdapter.INFO+ " not null );";


    private final Context context; 
    private DatabaseHelper DBHelper;
    private SQLiteDatabase db;

    /**
     * Constructor
     * @param ctx
     */
    public DBAdapter(Context ctx)
    {
        this.context = ctx;

    }

    private static class DatabaseHelper extends SQLiteOpenHelper 
    {
        DatabaseHelper(Context context) 
        {
            super(context, DATABASE_NAME, null, DATABASE_VERSION);
        }

        @Override
        public void onCreate(SQLiteDatabase db) 
        {
            db.execSQL(CREATE_TABLE_ADFILTER);
            db.execSQL(CREATE_TABLE_SFILTER);
            db.execSQL(CREATE_TABLE_ADMESSAGES);
            db.execSQL(CREATE_TABLE_SMILEY);
        }

        @Override
        public void onUpgrade(SQLiteDatabase db, int oldVersion, 
        int newVersion) 
        {               
            // Adding any table mods to this guy here
        }
    } 

   /**
     * open the db
     * @return this
     * @throws SQLException
     * return type: DBAdapter
     */
    public DBAdapter open() throws SQLException 
    {
        this.DBHelper = new DatabaseHelper(this.context);
        this.db = this.DBHelper.getWritableDatabase();
        return this;
    }

    /**
     * close the db 
     * return type: void
     */
    public void close() 
    {
        this.DBHelper.close();
    }

}


person safari    schedule 07.10.2011    source источник
comment
Эй, Fuzzical Logic, я хотел бы получить идентификатор представления (изображения) над позицией. Если вы внимательно изучите мой DBAdapter, я ищу таблицу после идентификатора изображения.   -  person safari    schedule 12.10.2011
comment
ХОРОШО. Я вижу, что вы пытаетесь сделать здесь. Я столкнулся с некоторыми похожими проблемами с несколькими разными типами адаптеров. Я нашел эффективное решение, но пришлось немного повозиться. Посмотрим, смогу ли я найти решение. (P.S. Я всегда прошу разъяснений, даже если я читал код, потому что только потому, что код что-то ГОВОРИТ, не означает, что человек пытается это сделать. Спасибо за разъяснение!)   -  person Fuzzical Logic    schedule 12.10.2011
comment
нет проблем! Здорово, что у вас есть что-то подобное, заранее спасибо за решение/помощь!   -  person safari    schedule 12.10.2011
comment
это не должно быть быстро, это просто должно работать;)   -  person safari    schedule 12.10.2011
comment
Хорошо, после просмотра вашего редактирования ваша таблица не объявляет тип для SOURCE. Это означает, что он вставляется и читается как то, что он вводит. Кроме того, в вашем журнале говорится, что вставки нарушают ограничения. Это будет означать, что на самом деле в этой таблице нет никаких данных. Вы уверены, что в этой таблице есть данные? (т.е. вы пробовали запрос для всех строк?)   -  person Fuzzical Logic    schedule 13.10.2011
comment
Да, если бы в нем ничего не было, он бы не показывал картинки, потому что я заполнил свой gridview этой базой данных =).   -  person safari    schedule 13.10.2011
comment
Попался. затем просмотрите мой отредактированный ответ через секунду.   -  person Fuzzical Logic    schedule 13.10.2011
comment
Сафари, ваша проблема была решена?   -  person Fuzzical Logic    schedule 15.10.2011


Ответы (4)


Сафари,

Просмотрев ваш код и проанализировав, что может быть причиной ошибки, я заметил несколько вещей. Проблема в том, что ваш код пытается поменять местами rowID и viewID, но на самом деле это нежелательное поведение.

В OnItemClick() аргумент id относится к rowID. На самом деле у вас нет rowID, который гарантированно (по коду) будет уникальным, поэтому он терпит неудачу. Хотя вы можете «форсировать проблему» через getItemId(), эта функция просто предоставляет указатель на объект (целое число). Игнорируйте getItemId(), так как это только причиняет вам боль. Вместо этого возьмите само представление и получите viewId непосредственно из него, например:

EDIT source = v.getId().toString(); Причина: Поскольку ваша TABLE не объявляет тип, скорее всего, это строка. Мы знаем, что ImageID теперь возвращается, и мы знаем, что данные там... Итак, насколько я могу судить, остается преобразование типов.

parent и view часто вызывают путаницу, особенно с замысловатыми вложенными макетами, такими как GridViews и ListViews. Однако ваш GridView довольно прост, и v должен относиться к ImageView, который там хранится. Если ImageView был сохранен в LinearLayout или другом подобном родительском элементе, может возникнуть проблема, но это не ваш случай.

Это избавит вас от необходимости беспокоиться о getItemId(int position), так как это относится к rowId и работает только в том случае, если вы можете гарантировать Adapter определенные вещи, в частности, уникальный rowId для каждого предмета.

Во-вторых, ваш viewId установлен на указатель на Integer, а не на само значение. int — это примитив, поэтому присваивание происходит, как и ожидалось. Integer — это Object, поэтому присваивание происходит адресу объекта, а не самому объекту. Я бы предложил изменить imageView.setId(mThumbIds[position]); (в вашем getView()) на:

   imageView.setId(mThumbIds[position].intValue());

Это позволит получить примитивное значение int вместо ссылки на объект Integer в памяти. Если в вашем коде не происходит что-то еще ошибочное (и я не вижу ничего сразу), это должно решить вашу проблему. setId предназначен для тихого отказа, если ему назначен неподходящий id, поэтому он может не работать и просто не сообщать вам об этом.

Наконец, я не вижу, какой тип поля «ИСТОЧНИК» находится в вашем коде. Он не показывает фактическое создание таблицы. Таким образом, дальнейшее угадывание вашей конкретной базы данных невозможно. Надеюсь это поможет!

Относительно вашей базы данных Главное, что выделяется в вашей базе данных, — это оператор CREATE TABLE для вашей таблицы Simleys. В SQLite, если вы явно не назначите тип, SQLite будет определять тип каждый раз, когда вы делаете запрос, и возвращать тип в соответствии с тем, что, по его мнению, находится в поле. Это означает, что числа могут интерпретироваться как строки и наоборот. В целом, он может быть довольно надежным, однако может привести к подводным камням.

Одна из самых больших проблем в коде — это предположение, что код делает то, что вы от него хотите. На самом деле, вы можете гарантировать это только в том случае, если точно скажете ему, что делать.

Во-вторых, я заметил, что когда вы получаете изображения для построения Array для ImageAdapter, вы выполняете запрос к полю INFO, а не к SOURCE. Это вводит в заблуждение в вашем коде, поскольку вы сообщаете onItemClick, что получаете SOURCE. Рассмотрите возможность изменения имени этой переменной.

Далее возникает дисфункция при запросе поля INFO через getSmiley(String info). Согласно вашим аргументам, ожидается строка, а не целое число. Добавление String к объекту ContentValues отличается от добавления целого числа. String добавляется с окружением '', отделяя '1' от 1. Это означает, что все ваши Integers были ВСТАВЛЕНЫ как String, и когда вы запрашиваете, вы не включаете необходимое ''. Поэтому рекомендуется ряд изменений.

  • Во-первых, скорректируйте оператор CREATE TABLE.

    private static final String CREATE_TABLE_SMILEY = " создать таблицу смайликов (_id целое число первичный ключ автоинкремент, " +SmileyDBAdapter.SOURCE+" не нуль ," +SmileyDBAdapter.INFO+ " целое число не нуль );";

Изменение оператора таким образом гарантирует, что вы получите целое число, а не строку.

  • Затем измените свой getImages() следующим образом: String infoItem = c.getString( ColumnIndex ); на int infoItem = c.getInt( ColumnIndex );

  • Затем измените createSmiley(String source, String info) на createSmiley(String source, int info). Это должно правильно настроить все ваши вставки. Ваш объект ContentValues (с именем initialValues) будет знать, что делать.

  • Затем измените свой getSmiley(String info) на getSmiley(int info). Это также должно правильно настроить ваш запрос. Если это не так, измените ... + "=" + info + ... на ... + "=" + info.toString() + .... Это вызовет проблему для вас.

  • Затем сделайте совпадение onItemClick(), изменив эту строку source = v.getId().toString(); обратно на source = v.getId();.

  • Наконец, вам придется изменить любой из ваших вызовов на createSmiley(), чтобы отправить значение int, а не значение, преобразованное в строку.

Это много изменений (не совсем) сделать. Поэтому перед внесением этих изменений сделайте резервную копию исходных файлов. Тогда это просто вопрос удаления пакета (в том числе из эмулятора, если он эмулируется) и его переустановки, чтобы он не сохранял исходные данные (со строками, а не с целыми числами).

фаззикаллогика

person Fuzzical Logic    schedule 12.10.2011
comment
это здорово, я получаю ImageID, но кажется, что когда я ищу в БД, я не получаю необходимых значений... Мне придется проверить это снова. Еще раз спасибо, если вы видите проблему в SmileyDBAdapter для поиска записи, пожалуйста, просто скажите мне..: D спасибо! - person safari; 12.10.2011
comment
Итак, теперь вы получаете ImageID, но он неправильно запрашивает базу данных? Я тебя понимаю? Если это так, можете ли вы показать мне оператор CREATE TABLE, который вы используете для создания реальной таблицы? Это помогло бы большое время. - person Fuzzical Logic; 12.10.2011
comment
Вы меня правильно поняли! Выложу завтра! Спасибо еще раз - person safari; 13.10.2011
comment
ты нашел проблему!? пожалуйста скажи да :) - person safari; 13.10.2011
comment
Я приму ваш ответ, но, пожалуйста, найдите способ заставить эту маленькую часть работать, это было бы абсолютно потрясающе .. !! Зеленая галочка для вас! Но, пожалуйста, найди способ! - person safari; 13.10.2011
comment
Какая маленькая часть? Вы имеете в виду получение данных из базы данных? Если это так, я считаю, что toString() может решить проблему. Я бы, вероятно, воссоздал базу данных с явным типом в ИСТОЧНИКЕ INTEGER. Это гарантирует, что тип не будет угадан SQLite. Я добавлю объяснение в новую редакцию, но дайте мне пару часов... Сегодня немного суматошно. - person Fuzzical Logic; 13.10.2011
comment
Я прочитал ваше обновление и попробовал что-то подобное, что сработало для меня. Так что +50 и зеленая галочка для вас! - person safari; 15.10.2011

В вашем коде ImageAdapter. У вас есть переопределенный метод getItemid, после чего вы возвращаете 0, что вызывает проблему. Попробуйте вернуть mThumbIds [position], я думаю, это поможет вам.

ваше здоровье.

person Ashwin N Bhanushali    schedule 07.10.2011
comment
я изменил его на эту public long getItemId(int position) { return mThumbIds[position] ; }тот же корыто ошибки .... - person safari; 07.10.2011
comment
@safari Я думаю, вы должны использовать 'public long getItemId (int position) { return position}; - person Judy; 10.10.2011
comment
используйте источник = (новый Long(id)).toString(); и public long getItemId(int position) { return position}; Может ли это работать? - person Judy; 10.10.2011
comment
ох, не видел этот пост и ваш ответ, я попробую ii - не сработало, но все же спасибо, приятель, я попробую ваш другой ответ, но я не понимаю, где я должен вводить ваши кодовые строки - person safari; 10.10.2011

В классе ImageAdapter в методе getView добавьте следующую строку кода

imageView.setId(mThumbIds[postion]);

или другой вариант находится в вашем прослушивателе Onclick для gridview внутри метода щелчка

source = (new Long(id)).toString();

замените эту строку кода на

source = parent.getItemId(position);

Теперь это точно решит проблему.

person Ashwin N Bhanushali    schedule 07.10.2011
comment
Здравствуйте, сначала я попробовал то, что вы сказали мне выше, потом - не сработало, потом я попробовал второе, что вы мне сказали, но у меня не работает этот код... :( source = parent.getItemId(position); - person safari; 07.10.2011

сдача

  if(c!=null)
    {

       while(c.moveToNext()){
           String infoItem = c.getString( ColumnIndex );
           infoList.add(Integer.parseInt(infoItem));
       }
    }

to

if(c!=null)
        {

           while(!c.isAfterLast()){
               String infoItem = c.getString( ColumnIndex );
               infoList.add(Integer.parseInt(infoItem));
               c.moveToNext();
           }
        }
person Judy    schedule 10.10.2011
comment
Я не понимаю, каким должен быть этот метод !isAfterLast. - person safari; 10.10.2011
comment
когда происходит исключение? - person Judy; 11.10.2011