2016-02-21 6 views
0

В моем приложении на базе базы данных Android. Когда я получаю данные из базы данных, он снова и снова получает одно и то же значение (первое значение, вставленное в базу данных). в чем проблема?База данных Android показывает то же значение снова и снова

Вставка класса данных

public class MainActivity extends AppCompatActivity { 
public String dataBase_Name="database"; 
public static DatabaseHelper database; 
private TextView text; 
private GestureDetector gestureDetector; 
private View.OnTouchListener gestureListener; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    final DatabaseHelper database1=new DatabaseHelper(this,dataBase_Name); 
    database=database1; 
    Button add=(Button)findViewById(R.id.button); 
    text=(TextView)findViewById(R.id.editText); 
    add.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      String temp=text.getText().toString(); 
      database.insert(temp); 
      text.setText(""); 
     } 
    }); 
    Button next=(Button) findViewById(R.id.button6); 
    Button prev=(Button) findViewById(R.id.button4); 
    next.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      Intent intent = new Intent(MainActivity.this, Delete.class); 
      MainActivity.this.startActivity(intent); 

     } 
    }); 
    prev.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      Intent intent = new Intent(MainActivity.this, com.example.partha.app4.View.class); 
      MainActivity.this.startActivity(intent); 
     } 
    }); 


} 

} 

класс Получение

public class View extends MainActivity { 
private GestureDetector gestureDetector; 
private android.view.View.OnTouchListener gestureListener; 
ArrayAdapter<String> adapter; 
ListView listView; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    try { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_view); 
     listView = (ListView) findViewById(R.id.listView); 
     String[] load = database.get_all_entry(); 
     String[] temp=database.get_all_entry(); 
     Toast.makeText(this,"Length "+temp.length,Toast.LENGTH_LONG); 
     for(int i=0;i<temp.length;i++) 
     { 
      Toast.makeText(this,temp[i],Toast.LENGTH_SHORT); 
     } 
     if (load != null) { 
      adapter = new ArrayAdapter<String>(this, R.layout.item,R.id.textView, database.get_all_entry()); 
      listView.setAdapter(adapter); 
     } else { 
      Toast.makeText(this, "Data cant found", Toast.LENGTH_SHORT); 
     } 
     Button next = (Button) findViewById(R.id.button11); 
     Button prev = (Button) findViewById(R.id.button10); 
     next.setOnClickListener(new android.view.View.OnClickListener() { 
      @Override 
      public void onClick(android.view.View v) { 
       clear(); 
       Intent intent = new Intent(View.this, MainActivity.class); 
       View.this.startActivity(intent); 

      } 
     }); 
     prev.setOnClickListener(new android.view.View.OnClickListener() { 
      @Override 
      public void onClick(android.view.View v) { 
       clear(); 
       Intent intent = new Intent(View.this, Update.class); 
       View.this.startActivity(intent); 

      } 
     }); 

    } catch (Exception e) { 
     Log.e("view", e.toString()); 
    } 
} 
void clear() 
{ 
    listView.setAdapter(null); 
} 

} 

Databasehelper Класс

public class DatabaseHelper extends SQLiteOpenHelper { 
public static String databaseName; 
public static final String CONTACTS_TABLE_NAME = "contacts"; 
public static final String CONTACTS_COLUMN_ID = "id"; 
public static final String CONTACTS_COLUMN_NAME = "name"; 
Context context1; 

DatabaseHelper(Context context,String databaseName) 
{ 
    super(context,databaseName,null,1); 
    this.databaseName=databaseName; 
    context1=context; 


} 
@Override 
public void onCreate(SQLiteDatabase db) { 
    db.execSQL("create table contacts" + "(" + CONTACTS_COLUMN_ID + " integer primary key,name text)"); 

} 

@Override 
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
    db.execSQL("DROP TABLE IF EXISTS contacts"); 
    onCreate(db); 

} 
public boolean insert(String name) 
{ 
    SQLiteDatabase db=this.getWritableDatabase(); 
    ContentValues contentValues=new ContentValues(); 
    contentValues.put("name", name); 
    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 boolean update (Integer id, String name) 
{ 
    SQLiteDatabase db = this.getWritableDatabase(); 
    ContentValues contentValues = new ContentValues(); 
    contentValues.put("name", name); 
    db.update("contacts", contentValues, "id = ? ", new String[]{Integer.toString(id)}); 
    return true; 
} 
public int find(String name) 
{ 
    SQLiteDatabase db=this.getReadableDatabase(); 
    Cursor cursor=db.query("contacts", new String[]{"name"}, "name = ?", new String[]{name}, null, null, null); 
    cursor.moveToFirst(); 
    if((cursor!=null)&&(cursor.getCount()!=0)) { 
     int id = cursor.getInt(cursor.getColumnIndex(CONTACTS_COLUMN_ID)); 
     return id; 
    } 
    else 
    { 
     return -1; 
    } 

} 
public Integer delete (Integer id) 
{ 
    SQLiteDatabase db = this.getWritableDatabase(); 
    return db.delete("contacts", 
      "id = ? ", 
      new String[] { Integer.toString(id) }); 
} 
public String[] get_all_entry() 
{ 
    SQLiteDatabase db=this.getReadableDatabase(); 
    Cursor cursor=db.query("contacts",null,null,null,null,null,null); 


    cursor.moveToFirst(); 
    if((cursor!=null)&&(cursor.getCount()!=0)) 
    { 
     String []name=new String[cursor.getCount()]; 

     for(int i=0;i<cursor.getCount();i++) 
     { 
      name[i]=(cursor.getString(cursor.getColumnIndex(CONTACTS_COLUMN_NAME))); 
     } 

     return name; 
    } 
    else 
    { 
     return null; 
    } 

} 
} 
+0

я предлагаю используя 'adb shell', а затем' sqlite/data/data/<имя-пакета>/databases/<имя-файла-файла> 'для запуска запроса к вашей базе данных, чтобы проверить его содержимое. –

+1

Я настоятельно рекомендую вам найти другое имя, чем 'View' для вашего класса, так как это имя используется API Android. Кроме того, почему вы расширяете свой класс «MainActivity»? –

+0

Определить AutoIncrement при объявлении первичного ключа –

ответ

0

вам не хватает cursor.moveToNext(); в цикле на get_all_entry() так что вы заполняете элементы массива с одна и та же запись курсора (Первая запись) после вызова cursor.moveToFirst();

модифицирует свой цикл следующим образом:

for(int i=0;i<cursor.getCount();i++){ 
    name[i]=(cursor.getString(cursor.getColumnIndex(CONTACTS_COLUMN_NAME))); 
    cursor.moveToNext(); // <---- ADD THIS 
} 

PS: рассмотреть возможность использования while(cursor.moveToNext()){} читать курсор запись, я думаю, что это лучше, чем при использовании for loop

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