'AutoPopulate EditText in Android Studio from SQLite Database
I am attempting to autocomplete the EditText in my application, however not through means of typing but from one entry to another. What I mean is that when the user enters "Student ID", the "First Name" and "Last Name" fields will be auto-populated with the corresponding data from the SQLite database if it is present.
My current XML File is as follows:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/LinearLayout1"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#d5ebfd"
android:orientation="vertical">
<TextView
android:layout_width="match_parent"
android:layout_height="40dp"
android:text="Student Grade Management System"
android:textSize="20dp"
android:textColor="#ff0000"
android:gravity="center"
android:fontFamily="serif"
android:textStyle="bold"/>
<EditText
android:id="@+id/studentID"
android:layout_width="match_parent"
android:paddingTop="20dp"
android:layout_height="wrap_content"
android:ems="10"
android:inputType="number"
android:hint="Enter Student ID (Used for Updating/Deleting): " />
<requestFocus />
<EditText
android:id="@+id/firstName"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ems="10"
android:hint="Enter First Name: " />
<EditText
android:id="@+id/lastName"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ems="10"
android:hint="Enter Last Name: " />
<EditText
android:id="@+id/classID"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ems="10"
android:inputType="number"
android:hint="Enter Class ID: " />
<EditText
android:id="@+id/className"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ems="10"
android:hint="Enter Class Name: " />
<EditText
android:id="@+id/gradePoint"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ems="10"
android:inputType="number"
android:hint="Enter Grade Point (0-100): " />
<EditText
android:id="@+id/letterGrade"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ems="10"
android:hint="Enter Letter Grade: " />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="50dp" >
<Button
android:id="@+id/addbtn"
android:layout_width="200dp"
android:layout_height="50dp"
android:text="Add" />
<Button
android:id="@+id/deletebtn"
android:layout_width="200dp"
android:layout_height="50dp"
android:text="Delete" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="50dp" >
<Button
android:id="@+id/viewall"
android:layout_width="200dp"
android:layout_height="50dp"
android:text="View" />
<Button
android:id="@+id/modifystudent"
android:layout_width="200dp"
android:layout_height="50dp"
android:text="Update Student Info" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="50dp" >
<Button
android:id="@+id/modifyclass"
android:layout_width="200dp"
android:layout_height="50dp"
android:text="Update Class Info" />
<Button
android:id="@+id/modifygrade"
android:layout_width="200dp"
android:layout_height="50dp"
android:text="Update Grade Info" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="0.74" >
</LinearLayout>
</LinearLayout>
The Main Activity Looks like this:
public class MainActivity extends Activity {
EditText fname,lname,classid,classname,pointgrade,lettergrade,studentid;
Button add,view,viewall,delete,modifystudent, modifyclass, modifygrade;
SQLiteDatabase db;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
studentid=(EditText)findViewById(R.id.studentID);
fname=(EditText)findViewById(R.id.firstName);
lname=(EditText)findViewById(R.id.lastName);
classid=(EditText)findViewById(R.id.classID);
classname=(EditText)findViewById(R.id.className);
pointgrade=(EditText)findViewById(R.id.gradePoint);
lettergrade=(EditText)findViewById(R.id.letterGrade);
add=(Button)findViewById(R.id.addbtn);
viewall=(Button)findViewById(R.id.viewall);
delete=(Button)findViewById(R.id.deletebtn);
modifystudent=(Button)findViewById(R.id.modifystudent);
modifyclass=(Button)findViewById(R.id.modifyclass);
modifygrade=(Button)findViewById(R.id.modifygrade);
db=openOrCreateDatabase("STUDENTGRADES", Context.MODE_PRIVATE, null);
db.execSQL("CREATE TABLE IF NOT EXISTS CUSTOMER_TABLE(studentid VARCHAR, fname VARCHAR, lname VARCHAR, classid VARCHAR, classname VARCHAR, pointgrade INTEGER, lettergrade VARCHAR);");
add.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
if(fname.getText().toString().trim().length()==0||
lname.getText().toString().trim().length()==0 || studentid.getText().toString().trim().length()==0)
{
showMessage("Error", "Please enter First & Last Name and Student ID");
return;
}
db.execSQL("INSERT INTO CUSTOMER_TABLE VALUES('"+studentid.getText()+"','"+fname.getText()+"','"+lname.getText()+"','"+classid.getText()+"','"+classname.getText()+
"','"+pointgrade.getText()+"','"+lettergrade.getText()+"');");
showMessage("Success", "Record added successfully");
clearText();
}
});
delete.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
if(studentid.getText().toString().trim().length()==0 || classid.getText().toString().trim().length()==0)
{
showMessage("Error", "Please enter Student and Class ID ");
return;
}
Cursor c=db.rawQuery("SELECT * FROM CUSTOMER_TABLE WHERE studentid='"+studentid.getText()+"' AND classid='"+classid.getText()+"'", null);
if(c.moveToFirst())
{
db.execSQL("DELETE FROM CUSTOMER_TABLE WHERE studentid='"+studentid.getText()+"' AND classid='"+classid.getText()+"'");
showMessage("Success", "Record Deleted");
}
else
{
showMessage("Error", "Invalid First and Last Name or Student ID");
}
clearText();
}
});
modifystudent.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
if(fname.getText().toString().trim().length()==0 || lname.getText().toString().trim().length()==0 || studentid.getText().toString().trim().length()==0)
{
showMessage("Error", "Please enter Student First & Last Name and ID to update student info. \n\nAll other Field Entries will be ignored");
return;
}
Cursor c=db.rawQuery("SELECT * FROM CUSTOMER_TABLE WHERE studentid='"+studentid.getText()+"'", null);
if(c.moveToFirst())
{
db.execSQL("UPDATE CUSTOMER_TABLE SET fname='"+fname.getText()+"',lname='"+lname.getText()+"' WHERE studentid='"+studentid.getText()+"'");
showMessage("Success", "Name Record Modified");
}
else
{
showMessage("Error", "Invalid First and Last name or Student ID");
}
clearText();
}
});
modifyclass.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
if(studentid.getText().toString().trim().length()==0 || classid.getText().toString().trim().length()==0 || classname.getText().toString().trim().length()==0)
{
showMessage("Error", "Please enter Student & Class ID to update class. \n\nAll other Field Entries will be ignored");
return;
}
Cursor c=db.rawQuery("SELECT * FROM CUSTOMER_TABLE WHERE classid='"+classid.getText()+"'", null);
if(c.moveToFirst())
{
db.execSQL("UPDATE CUSTOMER_TABLE SET classid='"+classid.getText()+"',classname='"+classname.getText()+"' WHERE studentid='"+studentid.getText()+"' AND classid='"+classid.getText()+"'");
showMessage("Success", "Class Record Modified");
}
else
{
showMessage("Error", "Invalid First and Last name or Class ID");
}
clearText();
}
});
modifygrade.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
if(studentid.getText().toString().trim().length()==0 || classid.getText().toString().trim().length()==0 || classname.getText().toString().trim().length()==0)
{
showMessage("Error", "Please enter Student & Class ID to update grades. \n\nAll other Field Entries will be ignored");
return;
}
Cursor c=db.rawQuery("SELECT * FROM CUSTOMER_TABLE WHERE classid='"+classid.getText()+"' AND studentid='"+studentid.getText()+"'", null);
if(c.moveToFirst())
{
db.execSQL("UPDATE CUSTOMER_TABLE SET pointgrade='"+pointgrade.getText()+"',lettergrade='"+lettergrade.getText()+"' WHERE classid='"+classid.getText()+"' AND studentid='"+studentid.getText()+"'");
showMessage("Success", "Grade Record Modified");
}
else
{
showMessage("Error", "Invalid First and Last name or Class ID");
}
clearText();
}
});
viewall.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Cursor c=db.rawQuery("SELECT * FROM CUSTOMER_TABLE", null);
if(c.getCount()==0)
{
showMessage("Error", "No records found");
return;
}
StringBuffer buffer=new StringBuffer();
while(c.moveToNext())
{
buffer.append("ID: "+c.getString(0)+"\n");
buffer.append("Student Name: "+c.getString(1)+" " +c.getString(2)+"\n");
buffer.append("Class ID: "+c.getString(3)+"\n");
buffer.append("Class Name: "+c.getString(4)+"\n");
buffer.append("Points: "+c.getString(5)+"\n");
buffer.append("Grade: "+c.getString(6)+"\n\n");
}
showMessage("Student Report", buffer.toString());
}
});
}
public void showMessage(String title,String message)
{
Builder builder=new Builder(this);
builder.setCancelable(true);
builder.setTitle(title);
builder.setMessage(message);
builder.show();
}
public void clearText()
{
studentid.setText("");
fname.setText("");
lname.setText("");
classid.setText("");
classname.setText("");
pointgrade.setText("");
lettergrade.setText("");
studentid.requestFocus();
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}
Any direct assistance is greatly appreciated, Thank you!
Solution 1:[1]
This can be completed with a Text Change Listener/Text Watcher. For the above request this can be implemented as follows, and will autofill with data from the SQLite Database
studentid.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
}
@Override
public void afterTextChanged(Editable s) {
Cursor c = db.rawQuery("SELECT * FROM " + STUDENT_TABLE + " WHERE studentid='" + s.toString() + "'", null);
if (c.moveToFirst()) {
fname.setText(c.getString(1));
lname.setText(c.getString(2));
} else {
fname.setText("");
lname.setText("");
}
c.close();
}
});
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
Solution | Source |
---|---|
Solution 1 | ttattini |