Reputation: 13
I am currently working with an Android content provider that i have created i use the query methode in a service because i have to update my result every 2 second my probleme is i want to get the last row in my databases, I put the sursor to the last position but every time his getting me all the data that he found in the database.
this is the service that I developed:
package fr.esigetel.echange.service;
import java.util.Timer;
import java.util.TimerTask;
import android.app.Service;
import android.content.ContentResolver;
import android.content.Intent;
import android.database.Cursor;
import android.net.Uri;
import android.os.Handler;
import android.os.IBinder;
import android.os.Message;
import android.util.Log;
import fr.esigetel.mediatag.cp.WifiProvider;
public class informationService extends Service {
Timer mTimer;
private Handler mHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
returnContentProvider();
}
};
@Override
public void onCreate() {
super.onCreate();
mTimer = new Timer();
Log.d("onCreate informationService", "onCreate informationService");
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
mTimer.scheduleAtFixedRate(new TimerTask() {
@Override
public void run() {
mHandler.sendEmptyMessage(0);
}
}, 0, 5000);
return super.onStartCommand(intent, flags, startId);
}
@Override
public void onDestroy() {
if (mTimer != null) {
mTimer.cancel();
mTimer = null;
}
if (mHandler != null) {
mHandler = null;
}
super.onDestroy();
}
@Override
public IBinder onBind(Intent intent) {
return null;
}
public informationService() {
}
private void returnContentProvider() {
Uri myuri = Uri.parse("content://fr.esigetel.mediatag.cp/maxdata");
ContentResolver cr = getContentResolver();
Cursor c = cr.query(myuri, null, null, null, null);
int idRech = c.getColumnIndex(WifiProvider.MAX_COL_ID);
int nameap = c.getColumnIndex(WifiProvider.MAX_COL_APName);
int adressemac = c.getColumnIndex(WifiProvider.MAX_COL_AdresseMac);
int rssi = c.getColumnIndex(WifiProvider.MAX_COL_RSSI);
int frequence = c.getColumnIndex(WifiProvider.MAX_COL_Freq);
int daterech = c.getColumnIndex(WifiProvider.MAX_Date);
c.moveToLast();
while (c.moveToPrevious()) {
int id = c.getInt(idRech);
String name = c.getString(nameap);
String mac = c.getString(adressemac);
int Rssi = c.getInt(rssi);
int Freq = c.getInt(frequence);
int Daterech = c.getInt(daterech);
try {
} catch (Exception e) {
System.out.println(e.getMessage());
}
Log.d("aaaaaa", name);
}
c.close();
}
How could i request only the last row of my database? this methode alway give me the whole data.
Upvotes: 1
Views: 1182
Reputation: 1052
Cursor c = cr.query(myuri, null, null, null, null);
c.moveToLast();
Now Cursor Is At Last Possition And get The Last Record Data
int idRech = c.getColumnIndex(WifiProvider.MAX_COL_ID);
int nameap = c.getColumnIndex(WifiProvider.MAX_COL_APName);
int adressemac = c.getColumnIndex(WifiProvider.MAX_COL_AdresseMac);
int rssi = c.getColumnIndex(WifiProvider.MAX_COL_RSSI);
int frequence = c.getColumnIndex(WifiProvider.MAX_COL_Freq);
int daterech = c.getColumnIndex(WifiProvider.MAX_Date);
Upvotes: 3