2014-01-25 4 views
0

Я хочу отобразить данные Sqlite в моем ListView, но я не могу этого сделать.display sqlite in listview

Теперь он может показать Toast, но как я могу запустить его в свой ListView?

спасибо.

public class fehrest extends Activity { 
    public String fonts="BNazanin.ttf"; 

    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     requestWindowFeature(Window.FEATURE_NO_TITLE); 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     // DATABASE START 
     DBAdapter db = new DBAdapter(this); 
     try { 
      String destPath = "/data/data/" + getPackageName() + "/databases"; 
      File f = new File(destPath); 
      if (!f.exists()) {    
       f.mkdirs(); 
       f.createNewFile(); 

       //---copy the db from the assets folder into 
       // the databases folder--- 
       CopyDB(getBaseContext().getAssets().open("mydb"), 
        new FileOutputStream(destPath + "/MyDB")); 
      } 
     } catch (FileNotFoundException e) { 
      e.printStackTrace(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 

     //---get all contacts--- 
     db.open(); 
     Cursor c = db.getAllContacts(); 
     if (c.moveToFirst()) { 
      do { 
       DisplayContact(c); 
      } while (c.moveToNext()); 
     } 
     db.close(); 

     //DATABASE END 

     setFace(); 
     //Tab2 contents 
     } 

     //DATABASE COPY FILES 

     public void CopyDB(InputStream inputStream, 
        OutputStream outputStream) throws IOException { 
      //---copy 1K bytes at a time--- 
      byte[] buffer = new byte[1024]; 
      int length; 
      while ((length = inputStream.read(buffer)) > 0) { 
       outputStream.write(buffer, 0, length); 
      } 
      inputStream.close(); 
      outputStream.close(); 
     } 

     // DATABASE COPY FILES END 

     // DATABASE SHOW INFO 
     public void DisplayContact(Cursor c) { 

      Toast.makeText(this, 
       "id: " + c.getString(0) + "\n" + 
       "Name: " + c.getString(1) + "\n" + 
       "Email: " + c.getString(2), 
       Toast.LENGTH_LONG).show(); 
      } 
      // DATABASE SHOW INFO END 
+0

прочитайте учебник по блогам для Android – pskink

+0

вы попробовали предложение в своем посте. Это работает?? – Raghunandan

+0

извините, но это доцентная работа – user3235893

ответ

0

Вы можете сделать, как показано ниже. Вы также можете использовать CustomAdapter. Для примера я использовал SimpleAdapter.

http://developer.android.com/reference/android/widget/SimpleAdapter.html

ListView lv= (ListView)findViewById(R.id.listview); 
    //listview in main.xml 
    String[] from = new String[] {"id", "name", "email"}; 
    int[] to = new int[] { R.id.textView1, R.id.textView2, R.id.textView3}; 
    List<HashMap<String, String>> fillMaps = new ArrayList<HashMap<String, String>>(); 
    db.open(); 
    Cursor c = db.getAllContacts(); 
    if(c.moveToFirst()) { 
     do { 
      HashMap<String, String> map = new HashMap<String, String>(); 
      String id = c.getString(0); 
      String name= c.getString(1); 
      String email = c.getString(2); 
      map.put("id",id); 
      map.put("name",name); 
      map.put("email",email); 
      fillMaps.add(map); 
     } while (c.moveToNext()); 
    } 
    db.close(); 

    } 

    SimpleAdapter adapter = new SimpleAdapter(this, fillMaps, R.layout.mylayout, from, to); 
    lv.setAdapter(adapter); 

mylayout.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" > 

    <TextView 
     android:id="@+id/textView1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentLeft="true" 
     android:layout_alignParentTop="true" 
     android:layout_marginLeft="30dp" 
     android:layout_marginTop="50dp" 
     android:text="TextView" /> 

    <TextView 
     android:id="@+id/textView2" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignBottom="@+id/textView1" 
     android:layout_centerHorizontal="true" 
     android:text="TextView" /> 

    <TextView 
     android:id="@+id/textView3" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignBaseline="@+id/textView2" 
     android:layout_alignBottom="@+id/textView2" 
     android:layout_alignParentRight="true" 
     android:layout_marginRight="23dp" 
     android:text="TextView" /> 

</RelativeLayout> 

Вы можете также использовать Cursor адаптер, который, вероятно, более уместно в данном случае

String[] from = new String[] {"id", "name", "email"}; // columns 
    int[] to = new int[] { R.id.textView1, R.id.textView2, R.id.textView3}; 
    SimpleCursorAdapter mAdapter = new SimpleCursorAdapter(this, R.layout.mylayout, c, from, to); 

Примечание:

SimpleCursorAdapter(Context context, int layout, Cursor c, String[] from, int[] to)

Этот конструктор осуждались в уровне API 11. Этот параметр не рекомендуется, так как это приводит к Cursor запросов выполняются на потоке пользовательского интерфейса приложения и, таким образом, может привести к снижению или даже отзывчивость Приложения не отвечают ошибки. В качестве альтернативы используйте LoaderManager с CursorLoader.

+0

это не то, как обрабатывать данные sqlitedb, здесь CursorAdapter (или, скорее, один из его производного класса) является очевидным классом, который будет использоваться – pskink

+0

@pskink да вы можете использовать адаптер курсора или пользовательский адаптер , я просто показал, как это делается с примером – Raghunandan