从表中的数据featching麻烦 [英] trouble in featching data from tables

查看:125
本文介绍了从表中的数据featching麻烦的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

当用户添加专辑它显示了的ListView 。假设你选择lovesong专辑用户写

歌曲名称和标题并保存到歌曲表(songid,ALBUMID,SONGNAME,SONGTITLE)。

用于获取歌曲表首歌我用

 公开的ArrayList<&ALLDATA GT; getMyData(长ID)
{
    ArrayList的<&ALLDATA GT; ArrayList的=新的ArrayList<&ALLDATA GT;();
    光标C = db.query(DATABASE_TABLE_SONG,新的String [] {KEY_SONG_ID,KEY_ALBUM_ID,KEY_SONG_NAME,KEY_SONG_TITEL},KEY_ALBUM_ID +=+ ID,NULL,NULL,NULL,NULL);
    ALLDATA myDatas;    而(c.moveToNext())
    {
        myDatas =新ALLDATA();
        myDatas.song_id = c.getLong(c.getColumnIndex(KEY_SONG_ID));
        myDatas.album_id = c.getInt(c.getColumnIndex(KEY_ALBUM_ID));
        myDatas.song_name = c.getString(c.getColumnIndex(KEY_SONG_NAME))修剪()。
        myDatas.song_title = c.getString(c.getColumnIndex(KEY_SONG_TITEL))修剪()。        arrayList.add(myDatas);
    }
    c.close();
    返回数组列表;
}公共无效的onClick(视图v)
{
   ALLDATA数据=新ALLDATA();
   AlbumDAO albumDAO =新AlbumDAO(SongActivity.this);
   albumDAO.open();
   ArrayList的<&ALLDATA GT; MYDATA = albumDAO.getMyData(ALBUMID);
   数据= mydata.get(ALBUMID);
   Log.v(data.getAlbum_id(),data.getAlbum_id()+);    albumDAO.close();
    }
});

/////////////////// logcat的//////////////////////

  18 02-06:07:37.948:ERROR / AndroidRuntime(27144):未捕获的处理程序:螺纹主力退出,由于未捕获的异常
02-06 18:07:38.069:ERROR / AndroidRuntime(27144):java.lang.IndexOutOfBoundsException:无效的位置1,大小为0
02-06 18:07:38.069:ERROR / AndroidRuntime(27144):在java.util.ArrayList.get(ArrayList.java:341)
02-06 18:07:38.069:ERROR / AndroidRuntime(27144):在krishna.ActionClass.SongActivity $ 2.onClick(SongActivity.java:79)
02-06 18:07:38.069:ERROR / AndroidRuntime(27144):在android.view.View.performClick(View.java:2364)
02-06 18:07:38.069:ERROR / AndroidRuntime(27144):在android.view.View.onTouchEvent(View.java:4179)
02-06 18:07:38.069:ERROR / AndroidRuntime(27144):在android.widget.TextView.onTouchEvent(TextView.java:6541)
02-06 18:07:38.069:ERROR / AndroidRuntime(27144):在android.view.View.dispatchTouchEvent(View.java:3709)
02-06 18:07:38.069:ERROR / AndroidRuntime(27144):在android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:884)
02-06 18:07:38.069:ERROR / AndroidRuntime(27144):在android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:884)
02-06 18:07:38.069:ERROR / AndroidRuntime(27144):在android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:884)
02-06 18:07:38.069:ERROR / AndroidRuntime(27144):在android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:884)
02-06 18:07:38.069:ERROR / AndroidRuntime(27144):在com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:1659)
02-06 18:07:38.069:ERROR / AndroidRuntime(27144):在com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1107)
02-06 18:07:38.069:ERROR / AndroidRuntime(27144):在android.app.Activity.dispatchTouchEvent(Activity.java:2061)
02-06 18:07:38.069:ERROR / AndroidRuntime(27144):在com.android.internal.policy.impl.PhoneWindow $ DecorView.dispatchTouchEvent(PhoneWindow.java:1643)
02-06 18:07:38.069:ERROR / AndroidRuntime(27144):在android.view.ViewRoot.handleMessage(ViewRoot.java:1691)
02-06 18:07:38.069:ERROR / AndroidRuntime(27144):在android.os.Handler.dispatchMessage(Handler.java:99)
02-06 18:07:38.069:ERROR / AndroidRuntime(27144):在android.os.Looper.loop(Looper.java:123)
02-06 18:07:38.069:ERROR / AndroidRuntime(27144):在android.app.ActivityThread.main(ActivityThread.java:4363)
02-06 18:07:38.069:ERROR / AndroidRuntime(27144):在java.lang.reflect.Method.invokeNative(本机方法)
02-06 18:07:38.069:ERROR / AndroidRuntime(27144):在java.lang.reflect.Method.invoke(Method.java:521)
02-06 18:07:38.069:ERROR / AndroidRuntime(27144):在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:860)
02-06 18:07:38.069:ERROR / AndroidRuntime(27144):在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
02-06 18:07:38.069:ERROR / AndroidRuntime(27144):在dalvik.system.NativeStart.main(本机方法)


解决方案

您的数据库似乎返回0行,试试你的包裹while循环中,如果(c.moveToFirst()),因此

 如果(c.moveToFirst())
{
而(c.moveToNext())
    {
        myDatas =新ALLDATA();
        myDatas.song_id = c.getLong(c.getColumnIndex(KEY_SONG_ID));
        myDatas.album_id = c.getInt(c.getColumnIndex(KEY_ALBUM_ID));
        myDatas.song_name = c.getString(c.getColumnIndex(KEY_SONG_NAME))修剪()。
        myDatas.song_title = c.getString(c.getColumnIndex(KEY_SONG_TITEL))修剪()。
        arrayList.add(myDatas);
    }
}

When user add album it show in ListView. suppose you select lovesong album that user write

song name and title and save to song table(songid,albumid,songname,songtitle).

for getting song from song table i use

public ArrayList<Alldata> getMyData(long id)    
{    
    ArrayList<Alldata> arrayList=new ArrayList<Alldata>();    
    Cursor c=db.query(DATABASE_TABLE_SONG, new String[]{KEY_SONG_ID,KEY_ALBUM_ID,KEY_SONG_NAME,KEY_SONG_TITEL}, KEY_ALBUM_ID+"="+id, null,null,null,null);    
    Alldata myDatas;

    while(c.moveToNext())
    {
        myDatas=new Alldata();
        myDatas.song_id=c.getLong(c.getColumnIndex(KEY_SONG_ID));           
        myDatas.album_id=c.getInt(c.getColumnIndex(KEY_ALBUM_ID));          
        myDatas.song_name=c.getString(c.getColumnIndex(KEY_SONG_NAME)).trim();          
        myDatas.song_title=c.getString(c.getColumnIndex(KEY_SONG_TITEL)).trim();            

        arrayList.add(myDatas);
    }
    c.close();      
    return arrayList;       
}    

public void onClick(View v)    
{
   Alldata data=new Alldata();    
   AlbumDAO albumDAO=new AlbumDAO(SongActivity.this);    
   albumDAO.open();    
   ArrayList<Alldata> mydata=albumDAO.getMyData(albumid);    
   data=mydata.get(albumid);    
   Log.v("data.getAlbum_id()",data.getAlbum_id()+"");               

    albumDAO.close();
    }
});

/////////////////// LOGCAT //////////////////////

02-06 18:07:37.948: ERROR/AndroidRuntime(27144): Uncaught handler: thread main exiting due to uncaught exception
02-06 18:07:38.069: ERROR/AndroidRuntime(27144): java.lang.IndexOutOfBoundsException: Invalid location 1, size is 0
02-06 18:07:38.069: ERROR/AndroidRuntime(27144):     at java.util.ArrayList.get(ArrayList.java:341)
02-06 18:07:38.069: ERROR/AndroidRuntime(27144):     at krishna.ActionClass.SongActivity$2.onClick(SongActivity.java:79)
02-06 18:07:38.069: ERROR/AndroidRuntime(27144):     at android.view.View.performClick(View.java:2364)
02-06 18:07:38.069: ERROR/AndroidRuntime(27144):     at android.view.View.onTouchEvent(View.java:4179)
02-06 18:07:38.069: ERROR/AndroidRuntime(27144):     at android.widget.TextView.onTouchEvent(TextView.java:6541)
02-06 18:07:38.069: ERROR/AndroidRuntime(27144):     at android.view.View.dispatchTouchEvent(View.java:3709)
02-06 18:07:38.069: ERROR/AndroidRuntime(27144):     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:884)
02-06 18:07:38.069: ERROR/AndroidRuntime(27144):     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:884)
02-06 18:07:38.069: ERROR/AndroidRuntime(27144):     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:884)
02-06 18:07:38.069: ERROR/AndroidRuntime(27144):     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:884)
02-06 18:07:38.069: ERROR/AndroidRuntime(27144):     at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:1659)
02-06 18:07:38.069: ERROR/AndroidRuntime(27144):     at com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1107)
02-06 18:07:38.069: ERROR/AndroidRuntime(27144):     at android.app.Activity.dispatchTouchEvent(Activity.java:2061)
02-06 18:07:38.069: ERROR/AndroidRuntime(27144):     at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:1643)
02-06 18:07:38.069: ERROR/AndroidRuntime(27144):     at android.view.ViewRoot.handleMessage(ViewRoot.java:1691)
02-06 18:07:38.069: ERROR/AndroidRuntime(27144):     at android.os.Handler.dispatchMessage(Handler.java:99)
02-06 18:07:38.069: ERROR/AndroidRuntime(27144):     at android.os.Looper.loop(Looper.java:123)
02-06 18:07:38.069: ERROR/AndroidRuntime(27144):     at android.app.ActivityThread.main(ActivityThread.java:4363)
02-06 18:07:38.069: ERROR/AndroidRuntime(27144):     at java.lang.reflect.Method.invokeNative(Native Method)
02-06 18:07:38.069: ERROR/AndroidRuntime(27144):     at java.lang.reflect.Method.invoke(Method.java:521)
02-06 18:07:38.069: ERROR/AndroidRuntime(27144):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860)
02-06 18:07:38.069: ERROR/AndroidRuntime(27144):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
02-06 18:07:38.069: ERROR/AndroidRuntime(27144):     at dalvik.system.NativeStart.main(Native Method)

解决方案

Your database seems to be returning 0 rows, try wrapping your while loop in if(c.moveToFirst()) so

if(c.moveToFirst())
{
while(c.moveToNext())
    {
        myDatas=new Alldata();
        myDatas.song_id=c.getLong(c.getColumnIndex(KEY_SONG_ID));           
        myDatas.album_id=c.getInt(c.getColumnIndex(KEY_ALBUM_ID));          
        myDatas.song_name=c.getString(c.getColumnIndex(KEY_SONG_NAME)).trim();          
        myDatas.song_title=c.getString(c.getColumnIndex(KEY_SONG_TITEL)).trim();            
        arrayList.add(myDatas);
    }
}

这篇关于从表中的数据featching麻烦的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆