dimanche 11 octobre 2015

Android SQLite database with rating bar

can you all provide me help with this, I seriously have no idea where my fault is can someone point out the error Scenario: Requires user to enter name and rating before he/she clicked add, user can also update their name or rating. Somebody please help me I'm stuck for one day already.

MainActivity.java

public class MainActivity extends AppCompatActivity {
private DatabaseHandler db;
private RatingBar ratingBar;
ListView lvInfo;
EditText txtName;
ArrayList<String> ArrayofName = new ArrayList<String>();
List<Rating> ratings;
static ArrayAdapter<String> dbAdapter;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    lvInfo = (ListView) findViewById(R.id.listView);
    txtName = (EditText) findViewById(R.id.editText);
    ratingBar = (RatingBar) findViewById(R.id.ratingBar);


    db = new DatabaseHandler(this);
    dbAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, android.R.id.text1, ArrayofName);
    lvInfo.setAdapter(dbAdapter);


    lvInfo.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            txtName.setText(ratings.get(position).getName());
            ratingBar = (RatingBar) findViewById(R.id.ratingBar);

        }
    });
    DisplayAll();
}

public void DisplayAll() {
    ratings = db.getAllRatings();
    ArrayofName.clear();
    for (Rating rt : ratings) {
        ArrayofName.add(rt.getId() + ".\t" + rt.getName() + ", " + rt.getRating());
    }
    dbAdapter.notifyDataSetChanged();
    txtName.setText("");
    ratingBar.setRating(5);
}

public void AddRating(View view) {
    if ((txtName.getText().length() == 0) || ratingBar.getRating() == 0)
        Toast.makeText(this, "Please enter the name and rating to be added!", Toast.LENGTH_LONG).show();
    else {
         Rating tmp = new Rating(txtName.getText().toString(), ratingBar.getRating());

        db.addRating(tmp);
        DisplayAll();
        Toast.makeText(this, "Rating Added!", Toast.LENGTH_LONG).show();
    }
}

public void UpdateRating(View view) {
    if ((txtName.getText().length() == 0))
        Toast.makeText(this, "Please select rating to be updated!", Toast.LENGTH_LONG).show();
    else {
        Rating tmp = new Rating(txtName.getText().toString(), ratingBar.getRating());

        db.updateRating(tmp);
        DisplayAll();
        Toast.makeText(this, "Rating Updated!", Toast.LENGTH_LONG).show();
    }
}
}

Rating.java

public class Rating {
private int id;
private String name;
private Float rating;

public Rating(){}

public Rating(String name, Float rating){
    this.name = name;
    this.rating = rating;
}

public Rating(int id, String name, Float rating){
    this.id = id;
    this.name = name;
    this.rating = rating;
}


public int getId(){
    return id;
}

public void setId(int id){
    this.id = id;
}

public String getName(){
    return name;
}

public void  setName(String name){
    this.name = name;
}

public Float getRating(){
    return rating;
}
public void setRating(Float rating){
    this.rating = rating;
}
}

DatabaseHandler.java

public class DatabaseHandler extends SQLiteOpenHelper {
private static final int DATABASE_VERSION = 1;
private static final String DATABASE_NAME = Environment.getExternalStorageDirectory().toString() + "/rating.db";
private static final String TABLE_RATING = "Rating";
private static final String KEY_ID = "id";
private static final String KEY_NAME = "name";
private static final String KEY_RATING = "rating";

public DatabaseHandler(Context context){
    super(context, DATABASE_NAME, null, DATABASE_VERSION);
}

//creating tables
@Override
public void onCreate(SQLiteDatabase db){
    String CREATE_RATINGS_TABLE = "CREATE TABLE" + TABLE_RATING + "("+ KEY_ID + " INTEGER PRIMARY KEY," + KEY_NAME + " TEXT,"
            + KEY_RATING + "TEXT)";
    db.execSQL(CREATE_RATINGS_TABLE);
}

//upgrading database
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion){
    //Drop old table if existed
    db.execSQL("DROP TABLE IF EXISTS " + TABLE_RATING);
    //create tables again
    onCreate(db);
}

public Rating getRating(int id) {
    SQLiteDatabase db = this.getReadableDatabase();
    Cursor cursor = db.query(TABLE_RATING, new String[]{KEY_ID, KEY_NAME, KEY_RATING}, KEY_ID + "=?",
    new String[] { String.valueOf(id) }, null, null, null, null);
    if (cursor != null)
        cursor.moveToFirst();
    Rating rating;
    rating = new Rating(Integer.parseInt(cursor.getString(0)), cursor.getString(1), cursor.getString(2));
    return rating;
}

public List&lt;Rating&gt; getAllRatings(){
    List&lt;Rating&gt; ratingList = new ArrayList&lt;Rating&gt;();
    String selectQuery = "SELECT * FROM" + TABLE_RATING;
    SQLiteDatabase db = this.getWritableDatabase();
    Cursor cursor = db.rawQuery(selectQuery, null);
    //looping through all rows and adding to list
    if (cursor.moveToFirst()){
        do {
            Rating rating = new Rating();
            rating.setId(Integer.parseInt(cursor.getString(0)));
            rating.setName(cursor.getString(1));
            rating.setRating(Float.valueOf(cursor.getString(2)));
            ratingList.add(rating);
        }while (cursor.moveToNext());
    } return ratingList;
    }

public int getRatingsCount(){
String countQuery = "SELECT * FROM " + TABLE_RATING;
    SQLiteDatabase db = this.getReadableDatabase();
    Cursor cursor = db.rawQuery(countQuery, null);
    cursor.close();
    return cursor.getCount();
}

public void addRating (Rating rating) {
    SQLiteDatabase db = this.getWritableDatabase();
    ContentValues values = new ContentValues();
    values.put(KEY_NAME, rating.getName());
    values.put(KEY_RATING, rating.getRating());
    db.insert(TABLE_RATING, null, values);
    db.close();
}
public int updateRating(Rating rating){
    SQLiteDatabase db = this.getWritableDatabase();
    ContentValues values = new ContentValues();
    values.put(KEY_RATING , rating.getRating());

    //updating row
    return db.update(TABLE_RATING, values, KEY_NAME + " = ?",
            new String[] { rating.getName()});
}
}

Aucun commentaire:

Enregistrer un commentaire