Предварительно заполненная база данных в Android

#android #android-sqlite

#Android #android-sqlite

Вопрос:

Пожалуйста, мне нужна помощь с этим приложением. Я хочу встроить базу данных в приложение для Android. В моей таблице 3 столбца (_id, заголовок, текст). Первая страница приложения показывает заголовки в виде списка, но я хочу показывать текст в другом действии, когда вы щелкаете по элементу в списке. Вот как мы зашли так далеко. (Я нашел этот проект в Интернете и изменил его.)

 package com.softeq.prepopdb.activity;

import java.util.ArrayList;

import android.app.ListActivity;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;
import com.softeq.android.prepopdb.R;
import com.softeq.prepopdb.dbhelper.ExternalDbOpenHelper;

public class PrepopSqliteDbActivity extends ListActivity {
private static final String DB_NAME = "schymn.sqlite";
private static final String TABLE_NAME = "Hymns";
private static final String Hymn_ID = "_id";
private static final String Hymn_Title = "Title";
private static final String Hymn_Text = "Text";
    String lyrics;

private SQLiteDatabase database;
private ListView listView;
private ArrayList<String> Songs;

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


    ExternalDbOpenHelper dbOpenHelper = new ExternalDbOpenHelper(this, DB_NAME);
    database = dbOpenHelper.openDataBase();

    fillHymns();
    setUpList();      
}

private void setUpList() {

    setListAdapter(new ArrayAdapter<String>(this,
                    android.R.layout.simple_list_item_1, Songs));
    listView = getListView();


    /*listView.setOnItemClickListener(new OnItemClickListener() {
        public void onItemClick(AdapterView<?> parent, View view,
                            int position,long id) {
            Toast.makeText(getApplicationContext(),
                        ((TextView) view).getText().toString(),
                         Toast.LENGTH_SHORT).show();                
        }
    });*/

    listView.setOnItemClickListener(new OnItemClickListener() {
        public void onItemClick(AdapterView<?> parent, View view,
                            int position,long id) {

        }
    });
}


private void fillHymns() {
    Songs = new ArrayList<String>();
    Cursor hymnCursor = database.query(TABLE_NAME,
                                         new String[] 
                                         {Hymn_ID, Hymn_Title,Hymn_Text},
                                         null, null, null, null
                                         , Hymn_Title);
    hymnCursor.moveToFirst();
    if(!hymnCursor.isAfterLast()) {
        do {
            String title = hymnCursor.getString(1);
            lyrics = hymnCursor.getString(2);
            Songs.add(title);
            //Songs.add(lyrics);
        } while (hymnCursor.moveToNext());
    }
    hymnCursor.close();
}
}
  

Я пробовал это, но это не сработало.

     listView.setOnItemClickListener(new OnItemClickListener() {
        public void onItemClick(AdapterView<?> parent, View view,
                            int position,long id) {
                        Log.i("text",lyrics);
        }
    });
}
  

Комментарии:

1. Log.i("text",lyrics) Предполагается ли создать другое действие? Взгляните на startActivity методы.

2. нет, предполагается, что для регистрации текста, связанного с заголовком. Я знаю, как передавать дополнительные данные в intent.

3. Получаете ли вы какое-либо исключение? В вашем журнале что-нибудь записывается?

4. Да, она регистрируется, но один и тот же элемент снова и снова.

Ответ №1:

Спасибо, ребята, я смог решить проблему, создав адаптер и сохранив детали в парах ключ-значение.