0

データベースにデータを保存するために SQLiteHelper を使用していましたが、データは正しく保存されていました (SQLite ビューアーで開かれました) が、DB からデータを取得する必要がある場合、コードは常に null 値を返します

public class HistorySQLiteHelper extends SQLiteOpenHelper{

String sqlCreate = "CREATE TABLE History (artist TEXT, title TEXT, link TEXT)";

    public HistorySQLiteHelper(Context context, String nombre, CursorFactory factory, int version){
            super(context, nombre, factory, version);
    }

    @Override
    public void onCreate(SQLiteDatabase db){
            db.execSQL(sqlCreate);
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int versionAnterior, int versioNueva){
            db.execSQL("DROP TABLE IF EXISTS History");
            db.execSQL(sqlCreate);
    }
}

そして、これは私がデータを取得するために使用するコードです

 String[] fields = new String[] {"artist", "title", "link"};


                    HistorySQLiteHelper hdbh = new HistorySQLiteHelper(HistoryActivity.this, "DBHistory", null, 1);
                    SQLiteDatabase db = hdbh.getReadableDatabase();
                    Cursor c = db.query("History", fields, "artist=?", new String[]{String.valueOf(0)}, null, null, null);

                    int counter = 0;

                    artist = new String[30];
                    title = new String[30];
                    links = new String[30];

                    if (c.moveToFirst()) {
                            do {
                                    artist[counter] = c.getString(0);
                                    title[counter] = c.getString(1);
                                links[counter] = c.getString(2);
                                    counter++;
                            } while (c.moveToNext());
                    }
                    db.close();

       if (artist.length < 1){
            String[] strings = nee Stting[]{" No results. "};
                            adaptador = new ArrayAdapter<String>(HistoryActivity.this, android.R.layout.simple_list_item_1, strings);
                            list.setAdapter(adaptador);
               }else{
                            AdaptadorTitulares adapter = new AdaptadorTitulares(HistoryActivity.this);
                        list.setAdapter(adapter);
                    }
                    list.setClickable(true);
            }
    }

そして ArrayAdapter クラス:

    class AdaptadorTitulares extends ArrayAdapter {

        Activity context;

        @SuppressWarnings("unchecked")
                AdaptadorTitulares(Activity context) {
                super(context, R.layout.listitem_titular, artist);
                this.context = context;
        }

        public View getView(int position, View convertView, ViewGroup parent)
        {
                        View item = convertView;
                        ViewHolder holder;

                if(item == null)
                {
                        LayoutInflater inflater = context.getLayoutInflater();
                        item = inflater.inflate(R.layout.listitem_titular, null);

                        holder = new ViewHolder();
                        holder.titulo = (TextView)item.findViewById(R.id.LblTitulo);

                        item.setTag(holder);
                }
                else
                {
                        holder = (ViewHolder)item.getTag();
                }

                        holder.titulo.setText(artist[position]);

                        return(item);
                }
    }

    static class ViewHolder {
        TextView titulo;
    }

コードで null 値が返される理由とその解決方法は?

PD: ここに変数フィールドと onCreate メソッドがあります

public class HistoryActivity extends Activity{

private ListView list;
private String[] artist;
private String[] title;
private String[] links;
private ArrayAdapter<String> adaptador;

@Override
public void onCreate(Bundle state) {
    super.onCreate(state);
    requestWindowFeature(Window.FEATURE_NO_TITLE);
    setContentView(R.layout.activity_history);

    list = (ListView)findViewById(R.id.history_list); 

    new LoadTask().execute(); //this is where I put the code to retrieve data

} ////////////////////////////////       onCreate END
4

1 に答える 1

0

わかりました、どれが私の間違いだったのかわかりました。私は次のように宣言しCursorました:

Cursor c = db.query("History", fields, "artist=?", new String[] {String.valueOf(0)}, null, null, null);

これで、これらの値のみを で取得しましartists = "0"た。

私がやりたかったのは、すべての列からすべての値を取得することでした..そのために、3番目と4番目のパラメーターを次のように宣言する必要がありましたnull

Cursor c = db.query("History", fields, null, null, null, null, null);
于 2012-09-10T09:16:35.397 に答える