2016-05-22 16 views
0

私はいつもこのような問題を抱えています。私はDBのデータをアクティビティに表示できません!私のクラスBDHelperSQLite - アンドロイド - 既存のDBからデータを表示

enter image description here

は、私はこのような何かしようとし始めるには

import java.util.ArrayList; 
import android.content.ContentValues; 
import android.content.Context; 
import android.database.Cursor; 
import android.database.DatabaseUtils; 
import android.database.sqlite.SQLiteDatabase; 
import android.database.sqlite.SQLiteOpenHelper; 

public class DataBaseHelper extends SQLiteOpenHelper { 

    public static final String DATABASE_NAME = "lm"; 
    public static final String EMP_TABLE = "contacts"; 
    public static final String _id = "id"; 
    public static final String E_NAME = "name"; 
    public static final String E_AGE = "age"; 
    public static final String E_DEPT = "dept"; 


    public DataBaseHelper(Context context) 
    { 
     super(context, DATABASE_NAME , null, 1); 
    } 

    @Override 
    public void onCreate(SQLiteDatabase db) { 
     // TODO Auto-generated method stub 
     db.execSQL(
     "create table contacts " + 
     "(id integer primary key, name text,phone text,email text, street text,place text)" 
    ); 
    } 

    @Override 
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
     // TODO Auto-generated method stub 
     db.execSQL("DROP TABLE IF EXISTS contacts"); 
     onCreate(db); 
    } 

    public boolean insertContact (String name, String age, String dept) 
    { 
     SQLiteDatabase db = this.getWritableDatabase(); 
     ContentValues contentValues = new ContentValues(); 
     contentValues.put("name", name); 
     contentValues.put("age", age);  
     contentValues.put("dept", dept); 
     db.insert("contacts", null, contentValues); 
     return true; 
    } 

    public Cursor getData(int id){ 
     SQLiteDatabase db = this.getReadableDatabase(); 
     Cursor res = db.rawQuery("select * from contacts where id="+id+"", null); 
     return res; 
    } 

    public int numberOfRows(){ 
     SQLiteDatabase db = this.getReadableDatabase(); 
     int numRows = (int) DatabaseUtils.queryNumEntries(db, EMP_TABLE); 
     return numRows; 
    } 

    public boolean updateContact (Integer id, String name,String age, String dept) 
    { 
     SQLiteDatabase db = this.getWritableDatabase(); 
     ContentValues contentValues = new ContentValues(); 
     contentValues.put("name", name); 
     contentValues.put("age", age);  
     contentValues.put("dept", dept); 
     db.update("contacts", contentValues, "id = ? ", new String[] { Integer.toString(id) }); 
     return true; 
    } 

    /* public Integer deleteContact (Integer id) 
    { 
     SQLiteDatabase db = this.getWritableDatabase(); 
     return db.delete("contacts", 
     "id = ? ", 
     new String[] { Integer.toString(id) }); 
    }*/ 

    public ArrayList<String> getAllCotacts() 
    { 
     ArrayList<String> array_list = new ArrayList<String>(); 

     SQLiteDatabase db = this.getReadableDatabase(); 
     Cursor res = db.rawQuery("select * from contacts", null); 
     res.moveToFirst(); 

     while(res.isAfterLast() == false){ 
     array_list.add(res.getString(res.getColumnIndex(EMP_TABLE))); 
     res.moveToNext(); 
     } 
    return array_list; 
    } 

そして私はメインの活動でそれを表示しようとしているが、それが理由です、私それ:

import android.app.Activity; 
import android.os.Bundle; 
import android.view.Menu; 
import android.view.MenuItem; 
import android.widget.ArrayAdapter; 
import android.widget.ListView; 

public class MainActivity extends Activity { 

    public final static String EXTRA_MESSAGE = "MESSAGE"; 
    private ListView obj; 
    DataBaseHelper mydb; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     mydb = new DataBaseHelper(this); 
     ArrayAdapter<?> arrayAdapter = new ArrayAdapter<Object>(this, android.R.layout.simple_list_item_1); 

     obj = (ListView) findViewById(R.id.listView1); 
     obj.setAdapter(arrayAdapter); 
    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.main, 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); 
    } 
} 

私はいつも同じ結果を得る:空のアクティビティ。私は他の方法で試してみましたが、同様の問題を抱えた他の質問を見て、私はここでそれを逃したところに行きたいと思っています!

+0

'arrayAdapter'は空です...なぜデータがそこにあると思われますか? –

+0

おそらく 'mydb'のメソッドを呼び出してデータを取得できますか? –

+0

** ArrayList array_list = mydb.getAllCotacts(); \t ArrayAdapter arrayAdapter =新しいArrayAdapter(これ、android.R.layout.simple_list_item_1、array_list); ** は、私はこれを使用しますが、それは言う:警告を、そしてそれはあなたがしなかったので、それは警告を持ってsuppressWaarning –

答えて

-1

text) & "の間にセミコロンを参照してください

db.execSQL(
      "create table contacts " + 
      "(id integer primary key, name text,phone text,email text, street text,place text) ; " 
); 

を試してみてください?あなたの創作が決して終わらないようにそれは欠けている。

+0

画像にはデータと表があることを示しています。さらに、セミコロンは単一のステートメントでは重要ではありません –

+0

私は既存のDBを使用しようとしますが、作成するのではなく、削除する必要がありますか? –

+0

@ cricket_007、あなたは私が見直すことができるリファレンスがありますか?私が探しているものは、ほとんどの場合、あなたがそれを必要としていると言います。 ** S'ed Sckizo **、どうやってそのデータベースを入手できましたか? –

0

あなたはこのような何かにあなたのonCreateを変更する必要があり、この

public ArrayList<String> getAllCotacts() 
    { 
     ArrayList<String> array_list = new ArrayList<String>(); 

     SQLiteDatabase db = this.getReadableDatabase(); 
     Cursor res = db.rawQuery("select * from contacts", null); 
    if (res.getCount() != 0) { 
      for (res.moveToFirst(); !res.isAfterLast(); res.moveToNext()) { 
     array_list.add(res.getString(res.getColumnIndex(EMP_TABLE))); 
     } 
    } 
    return array_list; 
    } 

ような何かにあなたのgetAllContactsを変更

次のように

db.execSQL(
      "create table if not exists contacts " + 
      "(id integer primary key, name text, phone text, email text, street text, place text); " 
); 
をあなたのテーブルを作成します。

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    mydb = new DataBaseHelper(this); 
    ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1,mydb.getAllContacts); 

    obj = (ListView) findViewById(R.id.listView1); 
    obj.setAdapter(arrayAdapter); 
} 

私はこれを試していないが、これは助けて欲しい:)

+0

感謝を言っているのか取得していないが、それは動作しません、常に空の事を ** ArrayAdapter arrayAdapter =新しいArrayAdapterを(this、android.R.layout.simple_list_item_1、mydb.getAllContacts); ** –

+0

申し訳ありません。 ArrayAdapter <>は、通常、パラメータとしてString []をとります。あなたはそれを試みるべきです。更新されたコードを確認してください – Aradhna

+0

あなたの編集はコンパイルされません。 ArrayListは正しいです。 –

0

まず、Contact.javaという名前のクラスを作成し、id、name、age、deptのsetメソッドとgetメソッドを作成します。 2番目には、youtはDbAdapterクラスに行くとgetAllContactsにこのコードを入れ

()

ArrayList<Contact> listContacts = new ArrayList<Contact>(); 
    // Select All Query 
    String selectQuery = "SELECT * FROM " + CONTACT ; 
    mDbHelper.getWritableDatabase(); 
    Cursor cursor = mDb.rawQuery(selectQuery, null); 
    if (cursor.moveToFirst()) { 
     do { 
      Contact contact = new Contact(); 
      contact.setId((cursor.getLong(0))); 
      contact.setName((cursor.getString(1))); 
      contact.setDept(cursor.getString(2)); 
      listContacts.add(note); 
     } while (cursor.moveToNext()); 
    } 
    return listContacts; 

いけないcursor.get ..応じて、列の順序を使用し忘れます。

希望します。

関連する問題