2013-07-19 4 views
0

Я в настоящее время работаю с поставщиком контента для Android, который я создал, я использую метод запроса в службе, потому что мне нужно обновлять результат каждые 2 секунды. Моя проблема заключается в том, что я хочу получить последний в моих базах данных, я помещал sursor на последнюю позицию, но каждый раз, когда он получал мне все данные, которые он нашел в базе данных.получить последние строки из моего contentProvider

это сервис, который я разработал:

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(); 
} 

Как я мог просить только последнюю строку моей базы данных? этот метод всегда дает мне все данные.

ответ

2
Cursor c = cr.query(myuri, null, null, null, null); 
c.moveToLast(); 

Теперь Cursor, наконец Possition и получить последнюю запись данных

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); 
+0

Спасибо за вашу помощь и я не нужно ставить в какое-то время(), поэтому он давал мне все данные каждый раз – Bouraoui

Смежные вопросы