制作显示前 10 名玩家的 leader-board?
making a leader-board that displays top 10 players?
我在创建排行榜时遇到问题,该排行榜显示得分最高的前 10 名玩家,但它却以相反的顺序显示最低的第一名,我尝试更改 select声明和数据库的版本并且没有用任何人都知道如何解决这个问题?
这是 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);
}}
我在数据库中的获取函数:
// 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 设置和获取数据:
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;
}
}
这是排行榜的屏幕截图:
您的 SQLite 查询不正确。试试下面的方法:
cursor = mDb.rawQuery("SELECT * FROM Game ORDER BY score DESC LIMIT 10",
null);
试试这个:
mDb.query(DATABASE_TABLE, new String[] { KEY_NAME, KEY_SCORE}, null, null, null, null,KEY_SCORE+" DESC","LIMIT 10");
我在创建排行榜时遇到问题,该排行榜显示得分最高的前 10 名玩家,但它却以相反的顺序显示最低的第一名,我尝试更改 select声明和数据库的版本并且没有用任何人都知道如何解决这个问题? 这是 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);
}}
我在数据库中的获取函数:
// 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 设置和获取数据:
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;
}
}
这是排行榜的屏幕截图:
您的 SQLite 查询不正确。试试下面的方法:
cursor = mDb.rawQuery("SELECT * FROM Game ORDER BY score DESC LIMIT 10",
null);
试试这个: mDb.query(DATABASE_TABLE, new String[] { KEY_NAME, KEY_SCORE}, null, null, null, null,KEY_SCORE+" DESC","LIMIT 10");