Android: я не могу добавить в свою базу данных - PullRequest
0 голосов
/ 15 июля 2010

Итак, в основном мое приложение начинается с TabView, а затем с помощью меню опций пользователь выбирает добавление игры в базу данных.Это открывает класс InputGame, который принимает несколько значений, а затем должен поместить их в базу данных, когда пользователь нажимает «Отправить».Это также вернется к исходному виду дома.Приложение прекрасно возвращается к представлению домашних вкладок, но в базу данных ничего не добавляется.Я делаю что-то не так?

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());
    }}

и вот мой помощник по базе данных.Записи, которые я предварительно запрограммировал, отображаются нормально:

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);
    }
}

РЕДАКТИРОВАТЬ : Должен ли я закрывать эту деятельность все вместе при отправке из InputGames?Я думаю, то, что я сейчас установил, просто возвращает нас к другой деятельности, но на самом деле ничего не делается.Или это совсем не так?

РЕДАКТИРОВАТЬ # 2 Ну, я получил это, чтобы добавить.По какой-то причине я должен использовать .execSQL.Это нормально, но я склоняюсь, когда я пытаюсь добавить элемент из счетчика во InputGames, я получаю это, заполняя соответствующий элемент:

com.jvavrik.gcm.InputGame@43bb0510

, где число после «@» всегда отличается.Есть идеи для этого?

1 Ответ

1 голос
/ 15 июля 2010

Что если вы измените это:

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

к этому:

db.getWritableDatabase().insert("constants", null, values);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...