为什么无法向sqlite中插入数据?

发布于 2024-11-06 21:20:11 字数 5599 浏览 3 评论 0原文

我不知道为什么它返回给我空指针异常。我认为是因为该表没有数据。所以,数据似乎没有添加到数据库中,

这是我的活动类。

private void createdata(){

    String title[] = {"rancangan1", "rancangan2", "rancangan3", "rancangan4", "rancangan5"};
    String date[] = {"isnin", "selasa", "rabu", "khamis", "jumaat"};
    String time[] = {"17:00-18:00", "18:00-19:00", "17:00-18:00", "18:00-19:00", "19:00-20:00"};
    String channel[] = {"astro ria", "astro ria", "astro ria", "astro ria", "astro ria"};
    try{
    for(int i = 0; i < title.length; i++){
        ContentValues values = new ContentValues();
        values.put(ImamShareData.DataContent.KEY_PROGRAM_TITLE, title[i]);
        values.put(ImamShareData.DataContent.KEY_PROGRAM_DATE, date[i]);
        values.put(ImamShareData.DataContent.KEY_PROGRAM_TIME, time[i]);
        values.put(ImamShareData.DataContent.KEY_PROGRAM_CHANNEL, channel[i]);
        cr.insert(ImamShareData.DataContent.PROGRAM_URI, values);
            //Log.i(TAG, "Successfully added index " + i + " as ID " + mId[i]);
    }
    }catch(Exception e){
        Log.v("error",""+e);
    }

}
private void filldata(){

    String[] from = new String[]{ImamShareData.DataContent.KEY_PROGRAM_DATE, ImamShareData.DataContent.KEY_PROGRAM_TIME, ImamShareData.DataContent.KEY_PROGRAM_CHANNEL};
    String[] from1 = new String[]{ImamShareData.DataContent.KEY_PROGRAM_TITLE};

    int[] to = new int[]{R.id.programdate, R.id.programtime, R.id.programchannel};
    int[] to1 = new int[]{R.id.programtitle};

    SimpleExpandableListAdapter SEL = new SimpleExpandableListAdapter(this, 
                    createGroupList(), R.layout.programgroup_row, from1, to1,       
                    createChildList(), R.layout.programchild_row, from, to);
    setListAdapter( SEL );
}
private List createGroupList() {
    String[] column = new String[]{ImamShareData.DataContent.KEY_PROGRAM_TITLE};
    ArrayList result = new ArrayList();
    String title[] = null;
    for( int i = 1 ; i <= 5; ++i ) { 
        Cursor cursor = managedQuery(ImamShareData.DataContent.PROGRAM_URI, column, null, null, null);    
        HashMap m = new HashMap();
        title[i] = cursor.getColumnName(cursor.getColumnIndex(ImamShareData.DataContent.KEY_PROGRAM_TITLE));
        m.put(ImamShareData.DataContent.KEY_PROGRAM_TITLE, title[i]); 
        result.add( m );
    } 
    return result;
}

private List createChildList() {
    String date;
    String time;
    String channel;
    String[] column = new String[]{ImamShareData.DataContent.KEY_PROGRAM_DATE, ImamShareData.DataContent.KEY_PROGRAM_TIME, ImamShareData.DataContent.KEY_PROGRAM_CHANNEL};
    ArrayList result = new ArrayList();
    for( int i = 1 ; i <= 5 ; ++i ) {
        ArrayList secList = new ArrayList();
        for( int n = 0 ; n < 3 ; n+=3 ) {
            Cursor cursor = managedQuery(ImamShareData.DataContent.PROGRAM_URI, column, null, null, null);
            HashMap child = new HashMap();
            date = cursor.getColumnName(cursor.getColumnIndex(ImamShareData.DataContent.KEY_PROGRAM_DATE));
            time = cursor.getColumnName(cursor.getColumnIndex(ImamShareData.DataContent.KEY_PROGRAM_TIME));
            channel = cursor.getColumnName(cursor.getColumnIndex(ImamShareData.DataContent.KEY_PROGRAM_CHANNEL));
            child.put(ImamShareData.DataContent.KEY_PROGRAM_DATE, date);
            child.put(ImamShareData.DataContent.KEY_PROGRAM_TIME, time);
            child.put(ImamShareData.DataContent.KEY_PROGRAM_CHANNEL, channel);
            secList.add( child );
        }
        result.add( secList );
    }
    return result;
}

这是我的 contentprovider 类

@Override
public Uri insert(Uri uri, ContentValues initialvalues) {
    TableNumber = sUriMatcher.match(uri);
    if( TableNumber != PROGRAM){
        throw new IllegalArgumentException("Unknown URI " + uri);
    }

    ContentValues values;
    if(initialvalues != null){
        values = new ContentValues(initialvalues);
    }else{
        values = new ContentValues();
    }

    SQLiteDatabase mDb = mDbHelper.getWritableDatabase();
    long rowId = mDb.insert(DatabaseHelper.TABLE_PROGRAM, null, values);
    if(rowId > 0){
        Uri programUri = ContentUris.withAppendedId(ImamShareData.DataContent.PROGRAM_URI, rowId);
        getContext().getContentResolver().notifyChange(programUri, null);
        return programUri;
    }
    throw new IllegalArgumentException("Failed to insert row into " + uri);
}

这是我的数据共享类

public static final class DataContent implements BaseColumns{   

    public static final Uri PROGRAM_URI = Uri.parse("content://" + AUTHORITY + "/" + PROGRAMPATH);

    public static final String CONTENT_MORE = ContentResolver.CURSOR_DIR_BASE_TYPE + "/vnd.android.imammuda";
    public static final String CONTENT_ONE = ContentResolver.CURSOR_ITEM_BASE_TYPE + "/vnd.android.imammuda";

    public static final String KEY_PROGRAM_ID = "_id";
    public static final String KEY_PROGRAM_TITLE = "ProgramTitle";
    public static final String KEY_PROGRAM_DATE = "ProgramDate";
    public static final String KEY_PROGRAM_TIME = "ProgramTime";
    public static final String KEY_PROGRAM_CHANNEL = "ProgramChannel";
}

这是我的 logcat

05-12 16:05:46.024: ERROR/AndroidRuntime(5175): Caused by: java.lang.NullPointerException
05-12 16:05:46.024: ERROR/AndroidRuntime(5175):     at com.android.imammuda.Program.createGroupList(Program.java:112)
05-12 16:05:46.024: ERROR/AndroidRuntime(5175):     at com.android.imammuda.Program.filldata(Program.java:82)

i got no idea why it return me nullpointerexception. I think is because the table don't have data. So, the data seem like did not add into database

this is my activity class.

private void createdata(){

    String title[] = {"rancangan1", "rancangan2", "rancangan3", "rancangan4", "rancangan5"};
    String date[] = {"isnin", "selasa", "rabu", "khamis", "jumaat"};
    String time[] = {"17:00-18:00", "18:00-19:00", "17:00-18:00", "18:00-19:00", "19:00-20:00"};
    String channel[] = {"astro ria", "astro ria", "astro ria", "astro ria", "astro ria"};
    try{
    for(int i = 0; i < title.length; i++){
        ContentValues values = new ContentValues();
        values.put(ImamShareData.DataContent.KEY_PROGRAM_TITLE, title[i]);
        values.put(ImamShareData.DataContent.KEY_PROGRAM_DATE, date[i]);
        values.put(ImamShareData.DataContent.KEY_PROGRAM_TIME, time[i]);
        values.put(ImamShareData.DataContent.KEY_PROGRAM_CHANNEL, channel[i]);
        cr.insert(ImamShareData.DataContent.PROGRAM_URI, values);
            //Log.i(TAG, "Successfully added index " + i + " as ID " + mId[i]);
    }
    }catch(Exception e){
        Log.v("error",""+e);
    }

}
private void filldata(){

    String[] from = new String[]{ImamShareData.DataContent.KEY_PROGRAM_DATE, ImamShareData.DataContent.KEY_PROGRAM_TIME, ImamShareData.DataContent.KEY_PROGRAM_CHANNEL};
    String[] from1 = new String[]{ImamShareData.DataContent.KEY_PROGRAM_TITLE};

    int[] to = new int[]{R.id.programdate, R.id.programtime, R.id.programchannel};
    int[] to1 = new int[]{R.id.programtitle};

    SimpleExpandableListAdapter SEL = new SimpleExpandableListAdapter(this, 
                    createGroupList(), R.layout.programgroup_row, from1, to1,       
                    createChildList(), R.layout.programchild_row, from, to);
    setListAdapter( SEL );
}
private List createGroupList() {
    String[] column = new String[]{ImamShareData.DataContent.KEY_PROGRAM_TITLE};
    ArrayList result = new ArrayList();
    String title[] = null;
    for( int i = 1 ; i <= 5; ++i ) { 
        Cursor cursor = managedQuery(ImamShareData.DataContent.PROGRAM_URI, column, null, null, null);    
        HashMap m = new HashMap();
        title[i] = cursor.getColumnName(cursor.getColumnIndex(ImamShareData.DataContent.KEY_PROGRAM_TITLE));
        m.put(ImamShareData.DataContent.KEY_PROGRAM_TITLE, title[i]); 
        result.add( m );
    } 
    return result;
}

private List createChildList() {
    String date;
    String time;
    String channel;
    String[] column = new String[]{ImamShareData.DataContent.KEY_PROGRAM_DATE, ImamShareData.DataContent.KEY_PROGRAM_TIME, ImamShareData.DataContent.KEY_PROGRAM_CHANNEL};
    ArrayList result = new ArrayList();
    for( int i = 1 ; i <= 5 ; ++i ) {
        ArrayList secList = new ArrayList();
        for( int n = 0 ; n < 3 ; n+=3 ) {
            Cursor cursor = managedQuery(ImamShareData.DataContent.PROGRAM_URI, column, null, null, null);
            HashMap child = new HashMap();
            date = cursor.getColumnName(cursor.getColumnIndex(ImamShareData.DataContent.KEY_PROGRAM_DATE));
            time = cursor.getColumnName(cursor.getColumnIndex(ImamShareData.DataContent.KEY_PROGRAM_TIME));
            channel = cursor.getColumnName(cursor.getColumnIndex(ImamShareData.DataContent.KEY_PROGRAM_CHANNEL));
            child.put(ImamShareData.DataContent.KEY_PROGRAM_DATE, date);
            child.put(ImamShareData.DataContent.KEY_PROGRAM_TIME, time);
            child.put(ImamShareData.DataContent.KEY_PROGRAM_CHANNEL, channel);
            secList.add( child );
        }
        result.add( secList );
    }
    return result;
}

this is my contentprovider class

@Override
public Uri insert(Uri uri, ContentValues initialvalues) {
    TableNumber = sUriMatcher.match(uri);
    if( TableNumber != PROGRAM){
        throw new IllegalArgumentException("Unknown URI " + uri);
    }

    ContentValues values;
    if(initialvalues != null){
        values = new ContentValues(initialvalues);
    }else{
        values = new ContentValues();
    }

    SQLiteDatabase mDb = mDbHelper.getWritableDatabase();
    long rowId = mDb.insert(DatabaseHelper.TABLE_PROGRAM, null, values);
    if(rowId > 0){
        Uri programUri = ContentUris.withAppendedId(ImamShareData.DataContent.PROGRAM_URI, rowId);
        getContext().getContentResolver().notifyChange(programUri, null);
        return programUri;
    }
    throw new IllegalArgumentException("Failed to insert row into " + uri);
}

this is my datasharing class

public static final class DataContent implements BaseColumns{   

    public static final Uri PROGRAM_URI = Uri.parse("content://" + AUTHORITY + "/" + PROGRAMPATH);

    public static final String CONTENT_MORE = ContentResolver.CURSOR_DIR_BASE_TYPE + "/vnd.android.imammuda";
    public static final String CONTENT_ONE = ContentResolver.CURSOR_ITEM_BASE_TYPE + "/vnd.android.imammuda";

    public static final String KEY_PROGRAM_ID = "_id";
    public static final String KEY_PROGRAM_TITLE = "ProgramTitle";
    public static final String KEY_PROGRAM_DATE = "ProgramDate";
    public static final String KEY_PROGRAM_TIME = "ProgramTime";
    public static final String KEY_PROGRAM_CHANNEL = "ProgramChannel";
}

this is my logcat

05-12 16:05:46.024: ERROR/AndroidRuntime(5175): Caused by: java.lang.NullPointerException
05-12 16:05:46.024: ERROR/AndroidRuntime(5175):     at com.android.imammuda.Program.createGroupList(Program.java:112)
05-12 16:05:46.024: ERROR/AndroidRuntime(5175):     at com.android.imammuda.Program.filldata(Program.java:82)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

如何视而不见 2024-11-13 21:20:11

您尚未在方法 createGroupList: 中初始化标题变量:

 String title[] = null;

...

title[i] = cursor.getColumnName....

在 for 循环中,长度被硬编码为最大 5,因此最简单的修复方法是:

String[] title = new String[5];

You have not initialized your title variable in method createGroupList:

 String title[] = null;

...

title[i] = cursor.getColumnName....

in the for loop the length is hard coded to maximum 5, so the easiest fix is:

String[] title = new String[5];
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文