Search code examples
javaandroidlistviewsqliteleaderboard

making a leader-board that displays top 10 players?


i'm having a problem with a leader board that i created to display top 10 players with the highest scores but instead it desplayes the lowest first in reverse order, i've tried to change the select statment and the version of the database and that didn't work any one has any idea how to solve this? here is the Leader-board activity:

package com.example.tabsnav;
import java.io.ByteArrayOutputStream;
import java.util.ArrayList;
import java.util.List;

import library.DBhelper;
import library.DBhelper.DatabaseHelper;
import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.drawable.BitmapDrawable;
import android.os.Bundle;
import android.os.Handler;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;

public class LeaderBoard extends Activity {
ArrayList<Leaders> imageArry = new ArrayList<Leaders>();
ImageAdapter adapter;
EditText etcomment1;
//Button b1;
DBhelper db;
TextView etname1;
ListView dataList;

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.leader_board);




}

    @Override
 protected void onPause() {
    // TODO Auto-generated method stub
    super.onPause();
    adapter.clear();
}
 @Override
protected void onResume() {
// TODO Auto-generated method stub
super.onResume();
db = new DBhelper(this);
db.open();


// Reading all comments from database

List<Leaders> contacts = db.getAllContactsFromAndroid();

for (Leaders cn : contacts) {
    String log = "ID:" + cn.getID() + " Name: " + cn.getName()
            + " ,Image: " + cn.getImage();

    // Writing Contacts to log
    Log.d("Result: ", log);
    //add contacts data in arrayList
    imageArry.add(cn);

}
adapter = new ImageAdapter(this, R.layout.leader_list_adapter,
        imageArry);
dataList = (ListView) findViewById(R.id.list);
dataList.setAdapter(adapter);
}}

my get function in the database:

// Getting All Contacts From Android
public List<Leaders> getAllContactsFromAndroid() {
    List<Leaders> contactList = new ArrayList<Leaders>();
    // Select All Query
    Cursor cursor=null;
    cursor = mDb.rawQuery("SELECT  * FROM Game DESC ORDER by score LIMIT 10",
            null);
    // looping through all rows and adding to list
    if (cursor.moveToFirst()) {
        do {
            Leaders contact = new Leaders();
            contact.setName(cursor.getString(cursor.getColumnIndex(G_FIRSTNAME)));
            contact.setImage(cursor.getBlob(cursor.getColumnIndex(G_PHOTO)));
            contact.setComment(cursor.getInt(cursor.getColumnIndex(G_SCORE)));
            // Adding contact to list
            contactList.add(contact);
        } while (cursor.moveToNext());
    }

Leader Class to set and get data:

package com.example.tabsnav;

public class Leaders {

// private variables
int _id;
String _name;
byte[] _image;
int _comment;

// Empty constructor
public Leaders() {

}
// constructor
    public Leaders(int keyId, String name, byte[] image,int comment) {
        this._id = keyId;
        this._name = name;
        this._image = image;
        this._comment=comment;

    }

// constructor
public Leaders(int keyId, String name, byte[] image) {
    this._id = keyId;
    this._name = name;
    this._image = image;

}

// constructor
public Leaders(String contactID, String name, byte[] image) {
    this._name = name;
    this._image = image;

}

// constructor
public Leaders(String name, byte[] image) {
    this._name = name;
    this._image = image;
}


// getting ID
public int getID() {
    return this._id;
}

// setting id
public void setID(int keyId) {
    this._id = keyId;
}

// getting name
public String getName() {
    return this._name;
}

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

// getting phone number
public byte[] getImage() {
    return this._image;
}

// setting phone number
public void setImage(byte[] image) {
    this._image = image;
}

// getting comment
public int getComment() {
    return this._comment;
}

// setting comment
public void setComment(int comment) {
    this._comment = comment;
}
}

here is a screen shot of the leader board: as you see it displays it in the wrong order


Solution

  • Try this: mDb.query(DATABASE_TABLE, new String[] { KEY_NAME, KEY_SCORE}, null, null, null, null,KEY_SCORE+" DESC","LIMIT 10");