2010-07-15 8 views
0

Donc, fondamentalement, mon application commence avec un onglet, puis à travers le menu des options, l'utilisateur sélectionne pour ajouter un jeu à la base de données. Cela ouvre la classe InputGame, qui accepte quelques valeurs, puis devrait les mettre dans une base de données lorsque l'utilisateur clique sur "Envoyer". Il reviendra également à la vue d'origine de la maison. L'application revient très bien à la vue des onglets de la maison, rien ne sera jamais ajouté à la base de données. Est-ce que je fais quelque chose de mal?Android: Je ne peux pas ajouter à ma base de données

InputGame:

public class InputGame extends Activity { 

    private EditText gameTitle; 
    private Spinner consoleSelect; 
    private Spinner genreSelect; 
    private Spinner ratingSelect; 
    private Spinner styleSelect; 
    private EditText gamePub; 
    private EditText gameDev; 
    private EditText gameRegion; 
    private EditText gamePrice; 
    private EditText gameRelease; 

    private DatabaseHelper db = null; 
    private Cursor constantsCursor=null; 
    private Button addGame; 



    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.inputgame); 

     db = new DatabaseHelper(this); 
     constantsCursor = db.getReadableDatabase().rawQuery(
       "SELECT _ID, title, console " + "FROM constants ORDER BY title", 
       null); 


     /*Hide the scroll bar*/ 
     ScrollView sView = (ScrollView)findViewById(R.id.ScrollInput); 
     sView.setVerticalScrollBarEnabled(false); 
     sView.setHorizontalScrollBarEnabled(false); 

     /* Accepts game title */ 
     gameTitle = (EditText) findViewById(R.id.gametitle);   

     /* Console select*/ 
     consoleSelect = (Spinner) findViewById(R.id.console_select); 
     ArrayAdapter<CharSequence> consoleAdapter = ArrayAdapter.createFromResource(
       this, R.array.consoles_array, android.R.layout.simple_spinner_item); 
     consoleAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
     consoleSelect.setAdapter(consoleAdapter); 


     /* Genre select*/ 
     genreSelect = (Spinner) findViewById(R.id.genre_select); 
     ArrayAdapter<CharSequence> genreAdapter = ArrayAdapter.createFromResource(
       this, R.array.genres_array, android.R.layout.simple_spinner_item); 
     genreAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
     genreSelect.setAdapter(genreAdapter); 

     /* Style select*/ 
     styleSelect = (Spinner) findViewById(R.id.style_select); 
     ArrayAdapter<CharSequence> styleAdapter = ArrayAdapter.createFromResource(
       this, R.array.style_array, android.R.layout.simple_spinner_item); 
     styleAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
     styleSelect.setAdapter(styleAdapter); 

     /* Rating select*/ 
     ratingSelect = (Spinner) findViewById(R.id.rating_select); 
     ArrayAdapter<CharSequence> ratingAdapter = ArrayAdapter.createFromResource(
       this, R.array.ratings_array, android.R.layout.simple_spinner_item); 
     ratingAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
     ratingSelect.setAdapter(ratingAdapter); 

     /* Accepts game publisher */ 
     gamePub = (EditText) findViewById(R.id.gamepublisher); 

     /* Accepts game developer */ 
     gameDev = (EditText) findViewById(R.id.gamedev); 




     /* Release date selector */ 
     gameRelease = (EditText) findViewById(R.id.gamerelease); 

     /* Add the game button */ 
     this.addGame = (Button)this.findViewById(R.id.addgame); 
     this.addGame.setOnClickListener(new View.OnClickListener(){ 
      @Override 
      public void onClick(View v) { 
       processAdd(); 
      } 


     }); 


    } 
    private void processAdd(){ 
     ContentValues values=new ContentValues(8); 

     values.put("title", getGameTitle()); 
     values.put("console", getGameConsole()); 
     values.put("genre", getGameGenre()); 
     values.put("style", getGameStyle()); 
     values.put("rating", getGameRating()); 
     values.put("publisher", getGamePublisher()); 
     values.put("developer", getGameDeveloper()); 
     values.put("release", getGameRelease()); 

     db.getWritableDatabase().insert("constants", "title", values); 
     constantsCursor.requery(); 
     Intent launchgamesActivity = new Intent(this, GCM.class); 
     startActivity(launchgamesActivity); 
    } 
    public String getGameTitle(){ 
     return(gameTitle.getText().toString()); 
    } 
    public String getGameConsole(){ 
     return (consoleSelect.getContext().toString()); 
    } 
    public String getGameGenre(){ 
     return(genreSelect.getContext().toString()); 
    } 
    public String getGameStyle(){ 
     return(styleSelect.getContext().toString()); 
    } 
    public String getGameRating(){ 
     return(ratingSelect.getContext().toString()); 
    } 
    public String getGamePublisher(){ 
     return(gamePub.getText().toString()); 
    } 
    public String getGameDeveloper(){ 
     return(gameDev.getText().toString()); 
    } 
    public String getGameRelease(){ 
     return(gameRelease.getText().toString()); 
    }} 

et voici mon aide de la base de données. Les enregistrements ont je préprogrammées dans le show juste bien:

public class DatabaseHelper extends SQLiteOpenHelper { 
    private static final String DATABASE_NAME = "gameDb"; 
    public static final String TITLE="title"; 
    public static final String CONSOLE="console"; 
    public static final String GENRE="genre"; 
    public static final String RATING="rating"; 
    public static final String PUBLISHER="publisher"; 
    public static final String DEVELOPER="developer"; 
// public STATIC FINAL STRING REGION="REGION"; 
    public static final String PRICE="price"; 
    public static final String RELEASE="release"; 
    public static final String COMPLETION="completion"; 
    public static final String DESCRIPION="description"; 
    public static final String IMAGE="image"; 

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

    @Override 
    public void onCreate(SQLiteDatabase db) { 
     db 
       .execSQL("CREATE TABLE constants (_id INTEGER PRIMARY KEY AUTOINCREMENT, title TEXT, console TEXT, genre TEXT, " + 
       "rating TEXT, publisher TEXT, developer TEXT, region TEXT, price REAL, release BLOB, completion BLOB, description BLOB, image BLOB);"); 

     ContentValues cv = new ContentValues(); 

     cv.put(TITLE, "Super Mario Galaxy"); 
     cv.put(CONSOLE, "Wii"); 
     db.insert("constants", TITLE, cv); 

     cv.put(TITLE, "Transformers: War for Cybertron"); 
     cv.put(CONSOLE, "Xbox 360"); 
     db.insert("constants", TITLE, cv); 

     cv.put(TITLE, "Final Fantasy XIII"); 
     cv.put(CONSOLE, "Playstation 3"); 
     db.insert("constants", TITLE, cv); 

     cv.put(TITLE, "Final Fantasy VII"); 
     cv.put(CONSOLE, "Playstation"); 
     db.insert("constants", TITLE, cv); 

     cv.put(TITLE, "New Super Mario Bros"); 
     cv.put(CONSOLE, "Nintendo DS"); 
     db.insert("constants", TITLE, cv); 


    } 

    @Override 
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
     android.util.Log.w("Constants", 
       "Upgrading database, which will destroy all old data"); 
     db.execSQL("DROP TABLE IF EXISTS constants"); 
     onCreate(db); 
    } 
} 

EDIT: Lors de la présentation de InputGames, dois-je être la fermeture de cette activité tous ensemble? Je pense que la façon dont je l'ai réglé maintenant revient à l'autre activité, mais rien n'est vraiment fait. Ou est-ce pas du tout?

EDIT # 2 Eh bien, je l'ai eu à ajouter. Pour une raison quelconque, je dois utiliser .execSQL. Thats bien je suppose, mais quand je fléchis essaie d'ajouter d'un élément de spinner dans InputGames, je reçois ce peuplant l'élément respectif:

[email protected] 

étaient le nombre après le « @ » est toujours différent. Des idées pour ça?

+0

Essayez d'utiliser insertOrThrow l'exception et attrapant affichant ce qu'il dit. – Qberticus

Répondre

1

si vous changez ceci:

db.getWritableDatabase().insert("constants", "title", values); 

à ceci:

db.getWritableDatabase().insert("constants", null, values); 
+0

Non, toujours rien. La même chose arrive. – James

Questions connexes