Eli tein tänään parin tunnin työn tuloksena pienen ohjelman androidille jonka pitäisi tallentaa tietoja database iin ja poistaa sieltä. Käytin android studiota mutta uskon että SQL llän ja javan osaajat pystyvät auttamaan. Tässä tulee koodit:
package com.bambootemplates.userdatabase; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.EditText; import android.widget.TextView; public class MainActivity extends AppCompatActivity { EditText writeArea; TextView displayArea; MyDBManager dbManager; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); writeArea = (EditText) findViewById(R.id.writeArea); displayArea = (TextView) findViewById(R.id.displayArea); dbManager = new MyDBManager(this, null, null, 1); printDatabase(); } public void addButtonClicked(View view){ Users user = new Users(writeArea.getText().toString()); dbManager.addUsername(user); printDatabase(); } public void deleteButtonClicked(View view){ String input = writeArea.getText().toString(); dbManager.deleteUsername(input); printDatabase(); } public void printDatabase(){ String dbString = dbManager.databaseToString().toString(); displayArea.setText(dbString); displayArea.setText(""); } }
package com.bambootemplates.userdatabase; public class Users { private int id; private String username; public Users(String username) { this.username = username; } public String getUsername() { return username; } public int getId() { return id; } public void setId(int id) { this.id = id; } public void setUsername(String username) { this.username = username; } }
package com.bambootemplates.userdatabase; import android.content.ContentValues; import android.content.Context; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper; public class MyDBManager extends SQLiteOpenHelper { private static final int DATABASE_VERSION = 1; private static final String DATABASE_NAME = "users.db"; private static final String TABLE_USERS = "users"; private static final String COLUMN_ID = "id"; private static final String COLUMN_USER = "user"; public MyDBManager(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) { super(context, DATABASE_NAME, factory, DATABASE_VERSION); } @Override public void onCreate(SQLiteDatabase db) { String query = "CREATE TABLE" + TABLE_USERS + "(" + COLUMN_ID + " INTEGER PRIMARY KEY AUTOINCREMENT " + COLUMN_USER + " STRING );"; db.execSQL(query); } @Override public void onUpgrade(SQLiteDatabase db, int i, int i1) { db.execSQL("DROP TABLE IF EXISTS" + TABLE_USERS); onCreate(db); } public void addUsername(Users user){ ContentValues cv = new ContentValues(); cv.put(COLUMN_USER, user.getUsername()); SQLiteDatabase db = getWritableDatabase(); db.insert(TABLE_USERS, null, cv); db.close(); } public void deleteUsername(String productName){ SQLiteDatabase db = getWritableDatabase(); db.execSQL("DELETE FROM" + TABLE_USERS + "WHERE" + COLUMN_USER + " =\"" + productName + "\";"); } public String databaseToString(){ String dbString = ""; SQLiteDatabase db = getWritableDatabase(); String query = "SELECT * FROM " + TABLE_USERS + "WHERE 1"; Cursor c = db.rawQuery(query, null); c.moveToFirst(); while(!c.isAfterLast()){ if(c.getString(c.getColumnIndex("user")) != null){ dbString += c.getString(c.getColumnIndex("user")); dbString += "/n"; } } db.close(); return dbString; } }
Ja tämä tuli näkyviin kun yritin suorittaa ohjelman:
Unfortunately, User Database has stopped.
Ajattelin että yksi ongelma voisi olla että en ymmärtänyt missä vaiheessa database luodaan. Eli voisiko tämä olla ratkaisu. Mitään punaista error alleviivausta ei tullut joten koodi on päällisin puolin kunnossa.
Aihe on jo aika vanha, joten et voi enää vastata siihen.