2013-02-24 2 views
0

Я перечисляю установленные приложения в ListView. Я хочу получить приложения, которые не были вставлены в базу данных.

Например:

Все установленные приложения
com.ab
com.cd
com.ef
com.gh
com.jk

БАЗА ДАННЫХ ЗАПИСИ
com.cd
com.gh

Я хочу, чтобы результат:

РЕЗУЛЬТАТ:
com.ab
com.ef
com.jk

Мой код здесь:

Android-список установленных приложений, связанных с базой данных

SQLiteDatabase db = vt2.getReadableDatabase(); 
Cursor c = db.rawQuery("SELECT uygulamaAdi FROM ivu WHERE kategori='" + kategori + "'", null); 
c.moveToFirst(); 

uygList = new ArrayList<String>(); 
final PackageManager pm = getPackageManager(); 

final List<String> paketAdlari = new ArrayList<String>(); 
final List<String> islemTurleri = new ArrayList<String>(); 

List<ApplicationInfo> paketler = pm.getInstalledApplications(PackageManager.GET_META_DATA); 
for (ApplicationInfo paketBilgi : paketler) { 

    if (paketBilgi.packageName != c.getString(0)) { 

     uygList.add(" (+)  " + paketBilgi.loadLabel(pm).toString() + "  (Yükle) "); 
     paketAdlari.add(paketBilgi.packageName); 
     islemTurleri.add("kaldir"); 

     if (sayi<c.getCount()-1) { 
      sayi++; 
      c.moveToNext(); 
     } 

    } 

} 

Как мой код, это дает результат, как, что:

ком .ab
com.cd
com.ef
com.jk

Он удаляет только последнюю запись. Я хочу удалить все предыдущие записи ...

ответ

1

Лучший способ сделать это - либо отправить один поиск для каждого установленного приложения, чтобы узнать, находится ли его в БД или нет, воспользовавшись мощью дб. Или если это плохо работает, чтобы взять все приложения в db, добавьте их в HashSet, а затем пройдите список установленных приложений, проверяющих 1 на 1, если он находится в hashset.

+0

Я написал SQL-запрос в цикле, и, как вы сказали, я сделал это для каждой записи. Огромное спасибо... – halilkaya

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