从列表中按按钮时如何从数据库发出声音

时间:2011-02-07 13:45:23

标签: android sqlite button text-to-speech

在我的程序中,我有一个像this picture

这样的列表

所以你可以看到每个列表有2行和1个按钮,所以我按每个列表调用每个按钮

public void buttonGetClicked(View v){
    db.open();
    LinearLayout linearLayout = (LinearLayout)v.getParent();
    TextView idRow = (TextView) linearLayout.getChildAt(4);
    Toast.makeText(Im_SensShow.this, idRow.getText(), Toast.LENGTH_SHORT).show();

结果是如果我点击列表一中的按钮,它将显示“1” 如果我点击列表2中的按钮,它将显示“2”

但我需要的是从数据库获取文本以读取TTS函数

(例如在this picture中:如果在列表一中按下按钮,TTS会发出“你有房间吗”的声音,如果我按下列表二中的按钮,TTS会发出“你是否”的声音)

我已经像这样编码了数据库

public Cursor getSound(String rowId) {
    return db.query(IM_SENS_TABLE, new String[] { 
            KEY_IM_SENS_ID,
            KEY_IM_SENS},
            KEY_IM_SENS_ID + "="+ rowId, 
            null, null, null, null, null);
}

我尝试写这样的

public void buttonGetClicked(View v){
    db.open();
    LinearLayout linearLayout = (LinearLayout)v.getParent();
    TextView idRow = (TextView) linearLayout.getChildAt(4);
    Cursor cc = cursor;
    cc = db.getSound(idRow.getText().toString());
    startManagingCursor(cc);
    String sp=cc.getString(cc.getColumnIndexOrThrow(DBAdapter.KEY_IM_SENS));
    onInit(sp);
 }
    public void onInit(String speech) {
    tts.setLanguage(Locale.ENGLISH);
    tts.speak(speech, TextToSpeech.QUEUE_FLUSH, null);
   }

但强行关闭

请帮助

1 个答案:

答案 0 :(得分:0)

我认为您的代码正在抛出CursorIndexOutOfBoundsException。最初我怀疑是getColumnIndexOrThrow(),但是如果该列不存在,则应该抛出IllegalArgumentException

因此我认为错误可能在于您的db.getSound()电话。检查此方法中的代码以查看是否有任何内容可以抛出CursorIndexOutOfBoundsException。您也可以使用调试器逐步执行代码,或添加一些Log.d()输出以缩小问题的原因。