2015-01-13 5 views
0

Я хочу сохранить его в arraylist, а затем отобразить его в спискеView. Есть ли какое-нибудь решение? как установить адаптер? как я могу связать это два и отобразить его в listview с помощью arrayList?Извлечение данных из базы данных exisint sqlite

DBhelper.java 

public ArrayList<String> getDataarray(){ 


    SQLiteQueryBuilder querybuilder=new SQLiteQueryBuilder(); 
    querybuilder.setTables(DATABASE_TABLES); 

    String [] columns= new String[]{ KEY_ROWID,KEY_USERNAME,KEY_AGE,KEY_ClINIC,KEY_PHONE,KEY_EMAIL,KEY_DATESIGNUP 
      ,KEY_CONDITIONID,KEY_DOCTORID,KEY_LOGINID,KEY_ACTIVITYNAME,KEY_NOTIFICATIONNAME,KEY_GROUPNAME,KEY_APPROVED 
      }; 

    Cursor c= ourdatabase.query(DATABASE_TABLES, columns, null,null, null, null, null); 
    String result=""; 

    ArrayList<String> resultarray = new ArrayList<String>(); 


    int iRow=c.getColumnIndex(KEY_ROWID); 
    int iUserName=c.getColumnIndex(KEY_USERNAME); 
    int iAge=c.getColumnIndex(KEY_AGE); 
    int iClinic=c.getColumnIndex(KEY_ClINIC); 
    int iPhone=c.getColumnIndex(KEY_PHONE); 
    int iEmail=c.getColumnIndex(KEY_EMAIL); 
    int iDateSignup=c.getColumnIndex(KEY_DATESIGNUP); 
    int iConditionID=c.getColumnIndex(KEY_CONDITIONID); 
    int iDoctorID=c.getColumnIndex(KEY_DOCTORID); 
    int iLoginID=c.getColumnIndex(KEY_LOGINID); 
    int iActivityName=c.getColumnIndex(KEY_ACTIVITYNAME); 
    int iNotificationName=c.getColumnIndex(KEY_NOTIFICATIONNAME); 
    int iGroupName=c.getColumnIndex(KEY_GROUPNAME); 
    int iApproved=c.getColumnIndex(KEY_APPROVED); 


    SQLiteDatabase db = this.getReadableDatabase(); 
     Cursor cursor = db.rawQuery("SELECT value FROM " + DATABASE_TABLES, null); 

     if(cursor.moveToFirst()) { 
      do { 
       resultarray.add(cursor.getString(cursor.getColumnIndex("value"))); 
      }while(cursor.moveToNext()); 
     } 

     cursor.close(); 
     db.close(); 
     return resultarray; 

} 

ProfileFragment.java это страница, на которой я хочу, чтобы извлечь из в ListView, как я могу получить его из базы данных вместо массива

public View getView(int position ,View convertView,ViewGroup parent){ 

    LayoutInflater inflater= (LayoutInflater) context.getSystemService(android.content.Context.LAYOUT_INFLATER_SERVICE); 
    View row =inflater.inflate(R.layout.profile_list,parent,false); 

    TextView myProfile=(TextView)row.findViewById(R.id.Profile); 
    TextView myCondition=(TextView)row.findViewById(R.id.condition); 

    myProfile.setText(ProfileArray[position]); 
    myCondition.setText(resultarray[position]); 
    return row; 

public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 

    View rootview = inflater.inflate(R.layout.user,container,false); 
    Resources res=getResources(); 
    Profile=res.getStringArray(R.array.Profile); 
    //how can i change the line below to let it get the data from the database array? or is there any other method? 
    condition=res.getStringArray(R.array.Profile_values); 
    list.setAdapter(adapter); 

    list=(ListView)rootview.findViewById(R.id.listView1); 

    return rootview; 

    } 

ответ

0

ли Вы хотите отобразить все данные?

Подумайте об использовании CursorLoader с SimpleCursorAdapter. Он будет загружать ваши данные, как только активность будет создана в фоновом режиме. И в классе деятельности просто реализовать интерфейс LoaderManager.LoaderCallback, и в onCreate вы просто инициализации загрузчика с getSupportLoaderManager().initLoader(LOADER_ID, null, this) Вот ссылка с хорошим примером http://www.androiddesignpatterns.com/2012/07/understanding-loadermanager.html

EDIT:

Этот код использование в OnCreate

// init DB 
    db = new DB(this); 
    db.open(); 

    // forming columns from DB to views 
    String[] from = new String[] { KEY_ROWID, KEY_USERNAME, KEY_AGE...}; //array of columns from DB 
    int[] to = new int[] { R.id.textviewId, R.id.textviewUserName, R.id.textviewAge }; //Array of of view components 

    // create adapter 
    scAdapter = new SimpleCursorAdapter(this, R.layout.item, null, from, to, 0); 
    ListView lvData = (ListView) findViewById(R.id.lvData); // listview where you want to display data 
    lvData.setAdapter(scAdapter); 
//init loader 
getSupportLoaderManager().initLoader(0, null, this); 

//implement these mothods with interface `LoaderManager.LoaderCallback<Cursor>` 

    @Override 
     public Loader<Cursor> onCreateLoader(int id, Bundle bndl) { 
     return new MyCursorLoader(this, db); 
     } 

     @Override 
     public void onLoadFinished(Loader<Cursor> loader, Cursor cursor) { 
     scAdapter.swapCursor(cursor); 
     } 

     @Override 
     public void onLoaderReset(Loader<Cursor> loader) { 
     } 

Этот код должен работать на вас.

EDIT2 добавлен

static class MyCursorLoader extends CursorLoader { 

DB db; 

public MyCursorLoader(Context context, DB db) { 
    super(context); 
    this.db = db; 
} 

@Override 
public Cursor loadInBackground() { 
    return db.getAllData(); 
} 

}

одна деталь. Это класс, в котором вы загружаете данные из db и возвращаете заполненный курсор.

+0

Да, я хочу отобразить все данные –

+0

Я получаю много ошибок, когда я помещаю их в onCreateView –

+0

@WongJiaKit, какие ошибки? не должно быть. Еще раз проверьте или опубликуйте журнал, пожалуйста – Yurets

Смежные вопросы