lundi 4 mai 2015

How to populate list view from sqlite database in android

I am creating an android application that consists of a button.When a button was pressed retrieve data which was stored in sqlite and populate in a list view.But i am getting an error called java.lang.IllegalStateException: Couldn't read row 0, col -1 from CursorWindow. Make sure the Cursor is initialized correctly before accessing data from it.. Please tell me how to do this. This is my activity on button clicked:

fetch_database.setOnClickListener(new View.OnClickListener() {

            @SuppressWarnings("static-access")
            @Override
            public void onClick(View v) {
                    progressGenerator.start(fetch_database);
                    database_list = new Dialog(AdminSettings.this);
                    database_list.setContentView(R.layout.dialog_database_listview);


                    database_list_view = (ListView)database_list.findViewById(R.id.List_database_details);
                    USER_NAME.clear();
                    USER_PASSWORD.clear();
                    c =logindatabase_adapter_child.db.rawQuery("SELECT * FROM MilanloginRegistration", null);


                    media_player = media_player.create(AdminSettings.this, R.raw.retrievingfromdatabase);
                    media_player.start();

                }
        });
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.admin_settings, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();
        if (id == R.id.action_settings) {
            return true;
        }
        return super.onOptionsItemSelected(item);
    }

    @Override
    public void onComplete() {

        if(c.getCount()==0)
        {
                fetch_database.setProgress(-1);
                fetch_database.setText("ERROR");
                return;
        }

        else if (c.moveToFirst()) {

            do {

                userId.add(c.getString(c.getColumnIndex(DataBaseHelper.KEY_ID)));
                USER_NAME.add(c.getString(c.getColumnIndex(DataBaseHelper.USER_NAME)));
                USER_PASSWORD.add(c.getString(c.getColumnIndex(DataBaseHelper.USER_PWD)));
            }while (c.moveToNext());
        }
        DisplayAdapter disadpt = new DisplayAdapter(AdminSettings.this,userId, USER_NAME, USER_PASSWORD);
        database_list_view.setAdapter(disadpt);
        c.close();
        database_list.show();
    }

Display Adapter activity:

package com.developer.milanandroid;

import java.util.ArrayList;

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;
/**
 * adapter to populate listview with data
 * @author ketan(Visit my <a
 *         href="http://ift.tt/LC4ev7">blog</a>)
 */
public class DisplayAdapter extends BaseAdapter {
    private Context mContext;
    private ArrayList<String> id;
    private ArrayList<String> USERNAME;
    private ArrayList<String> PASSWORD;


    public DisplayAdapter(Context c, ArrayList<String> id,ArrayList<String> u_name, ArrayList<String> u_pwd) {
        this.mContext = c;

        this.id = id;
        this.USERNAME = u_name;
        this.PASSWORD = u_pwd;
    }

    public int getCount() {
        // TODO Auto-generated method stub
        return id.size();
    }

    public Object getItem(int position) {
        // TODO Auto-generated method stub
        return null;
    }

    public long getItemId(int position) {
        // TODO Auto-generated method stub
        return 0;
    }

    public View getView(int pos, View child, ViewGroup parent) {
        Holder mHolder;
        LayoutInflater layoutInflater;
        if (child == null) {
            layoutInflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            child = layoutInflater.inflate(R.layout.listcell, null);
            mHolder = new Holder();
            mHolder.txt_id = (TextView) child.findViewById(R.id.txt_id);
            mHolder.txt_u_name = (TextView) child.findViewById(R.id.txt_username);
            mHolder.txt_u_pwd = (TextView) child.findViewById(R.id.txt_pasword);

            child.setTag(mHolder);
        } else {
            mHolder = (Holder) child.getTag();
        }
        mHolder.txt_id.setText(id.get(pos));
        mHolder.txt_u_name.setText(USERNAME.get(pos));
        mHolder.txt_u_pwd.setText(PASSWORD.get(pos));

        return child;
    }

    public class Holder {
        TextView txt_id;
        TextView txt_u_name;
        TextView txt_u_pwd;
    }

}

This is my Logcat:

01-02 02:49:52.760: E/AndroidRuntime(10714): FATAL EXCEPTION: main
01-02 02:49:52.760: E/AndroidRuntime(10714): Process: com.developer.milanandroid, PID: 10714
01-02 02:49:52.760: E/AndroidRuntime(10714): java.lang.IllegalStateException: Couldn't read row 0, col -1 from CursorWindow.  Make sure the Cursor is initialized correctly before accessing data from it.
01-02 02:49:52.760: E/AndroidRuntime(10714):    at android.database.CursorWindow.nativeGetString(Native Method)
01-02 02:49:52.760: E/AndroidRuntime(10714):    at android.database.CursorWindow.getString(CursorWindow.java:434)
01-02 02:49:52.760: E/AndroidRuntime(10714):    at android.database.AbstractWindowedCursor.getString(AbstractWindowedCursor.java:51)
01-02 02:49:52.760: E/AndroidRuntime(10714):    at com.developer.milanandroid.AdminSettings.onComplete(AdminSettings.java:103)
01-02 02:49:52.760: E/AndroidRuntime(10714):    at com.milan.lib.progressgenarator.lib.ProgressGenerator$1.run(ProgressGenerator.java:33)
01-02 02:49:52.760: E/AndroidRuntime(10714):    at android.os.Handler.handleCallback(Handler.java:733)
01-02 02:49:52.760: E/AndroidRuntime(10714):    at android.os.Handler.dispatchMessage(Handler.java:95)
01-02 02:49:52.760: E/AndroidRuntime(10714):    at android.os.Looper.loop(Looper.java:136)
01-02 02:49:52.760: E/AndroidRuntime(10714):    at android.app.ActivityThread.main(ActivityThread.java:5017)
01-02 02:49:52.760: E/AndroidRuntime(10714):    at java.lang.reflect.Method.invokeNative(Native Method)
01-02 02:49:52.760: E/AndroidRuntime(10714):    at java.lang.reflect.Method.invoke(Method.java:515)
01-02 02:49:52.760: E/AndroidRuntime(10714):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
01-02 02:49:52.760: E/AndroidRuntime(10714):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
01-02 02:49:52.760: E/AndroidRuntime(10714):    at dalvik.system.NativeStart.main(Native Method)

Aucun commentaire:

Enregistrer un commentaire