Reputation: 33
APP AIM When I Click on Login Button it should save the Name & Password in Database, then it should display a new activity in which when clicked show it should get data from database and display it in Textview provided.When next button is clicked it should display next data row in textview.
Request I am Newbie to Android Please help me out.Thank You.
MAIN ACTIVITY
public class MainActivity extends ActionBarActivity {
DatabaseHelper myDb = new DatabaseHelper(getBaseContext());
EditText et_Username, et_Password;
Button bt_Login;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//INITIALISING VIEWS
et_Username = (EditText) findViewById(R.id.etUsername);
et_Password = (EditText) findViewById(R.id.etPassword);
bt_Login = (Button) findViewById(R.id.btLogin);
//IMPLEMENTING ON CLICK LISTENER
bt_Login.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String name,pass;
name = et_Username.getText().toString();
pass = et_Password.getText().toString();
myDb.Insert(name, pass);
Intent i = new Intent(MainActivity.this,DataActivity.class);
startActivity(i);
}
});
}
}
DATAHELPER
public class DatabaseHelper extends SQLiteOpenHelper {
public static final String DATABASE_NAME = "mydatabase.db";
public static final String TABLE_NAME = "Details";
public static final String COL_1 = "NAME";
public static final String COL_2 = "PASSWORD";
public DatabaseHelper(Context context){
super(context, DATABASE_NAME, null, 1);
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL("CREATE TABLE " + TABLE_NAME + " (NAME TEXT PRIMARY KEY, PASSWORD TEXT) ");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME);
onCreate(db);
}
public boolean Insert(String name, String password){
SQLiteDatabase db = this.getWritableDatabase();
ContentValues cv = new ContentValues();
cv.put(COL_1, name);
cv.put(COL_2, password);
long res = db.insert(TABLE_NAME, null, cv);
if(res == -1)
return false;
else
return true;
}
public Cursor getAllData()
{
SQLiteDatabase db = this.getWritableDatabase();
Cursor cursor = db.rawQuery("SELECT * FROM " + TABLE_NAME, null);
return cursor;
}
}
DATA ACTIVITY
public class DataActivity extends Activity {
DatabaseHelper myDb = new DatabaseHelper(getBaseContext());
TextView tv_Name,tv_Password;
Button bt_Ok,bt_Next;
String showName,showPass;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_data);
//Initialising Views
tv_Name = (TextView) findViewById(R.id.tvShowUsername);
tv_Password = (TextView) findViewById(R.id.tvShowPassword);
bt_Ok = (Button) findViewById(R.id.btOk);
bt_Next = (Button) findViewById(R.id.btNxt);
bt_Ok.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Cursor cursor = myDb.getAllData();
cursor.moveToFirst();
if(cursor != null){
showName = cursor.getString(0);
showPass = cursor.getString(1);
show(showName,showPass);
}
}
});
bt_Next.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Cursor cursor = myDb.getAllData();
cursor.moveToNext();
if(cursor!=null){
showName = cursor.getString(0);
showPass = cursor.getString(1);
show(showName,showPass);
}
}
});
}
public void show(String n,String p){
tv_Name.setText(n);
tv_Password.setText(p);
}
}
EXCEPTION
9-16 13:56:09.939 9508-9514/? E/jdwp﹕ Failed sending reply to debugger: Broken pipe
09-16 13:56:19.679 9508-9508/com.test.anu.test E/AndroidRuntime﹕ FATAL EXCEPTION: main
Process: com.test.anu.test, PID: 9508
java.lang.NullPointerException
at android.database.sqlite.SQLiteOpenHelper.getDatabaseLocked(SQLiteOpenHelper.java:224)
at android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:164)
at com.test.anu.test.DatabaseHelper.Insert(DatabaseHelper.java:39)
at com.test.anu.test.MainActivity$1.onClick(MainActivity.java:36)
at android.view.View.performClick(View.java:4438)
at android.view.View$PerformClick.run(View.java:18422)
at android.os.Handler.handleCallback(Handler.java:733)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:136)
at android.app.ActivityThread.main(ActivityThread.java:5001)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)
at dalvik.system.NativeStart.main(Native Method)
Upvotes: 2
Views: 82
Reputation: 2982
Your problem is that, getBaseContext() returns null before onCreate() called, your activity should look like below,
public class MainActivity extends ActionBarActivity {
DatabaseHelper myDb;
EditText et_Username, et_Password;
Button bt_Login;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
myDb = new DatabaseHelper(getBaseContext());
//INITIALISING VIEWS
et_Username = (EditText) findViewById(R.id.etUsername);
et_Password = (EditText) findViewById(R.id.etPassword);
bt_Login = (Button) findViewById(R.id.btLogin);
//IMPLEMENTING ON CLICK LISTENER
bt_Login.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String name,pass;
name = et_Username.getText().toString();
pass = et_Password.getText().toString();
myDb.Insert(name, pass);
Intent i = new Intent(MainActivity.this,DataActivity.class);
startActivity(i);
}
});
}
}
Upvotes: 1
Reputation: 4907
Initialize your db class inside the oncreate method of Activity.
DatabaseHelper myDb = new DatabaseHelper(getBaseContext());
Upvotes: 0