2013-06-24 50 views
0

下面是我的代碼,我按照這個鏈接how to compare values with database values和自定義我的代碼我只想顯示只在數據庫中的名稱哪個用戶插入數據庫,但顯示我的錯誤在助手類中getAllApps方法,該方法的getString(INT)中的類型光標不適用的參數(字符串)如何比較數據庫插入值與其他值

import android.database.sqlite.SQLiteOpenHelper; 


    public class DatabaseHandler extends SQLiteOpenHelper { 

// All Static variables 
// Database Version 
private static final int DATABASE_VERSION = 1; 

// Database Name 
private static final String DATABASE_NAME = "contactsManager"; 

// Contacts table name 
private static final String TABLE_CONTACTS = "contacts"; 

// Contacts Table Columns names 
private static final String KEY_ID = "id"; 
private static final String KEY_NAME = "name"; 
//private static final String KEY_PH_NO = "phone_number"; 

public DatabaseHandler(Context context) { 
    super(context, DATABASE_NAME, null, DATABASE_VERSION); 
} 

// Creating Tables 
@Override 
public void onCreate(SQLiteDatabase db) { 
// String CREATE_CONTACTS_TABLE = "CREATE TABLE " + TABLE_CONTACTS + "("+ 
    KEY_ID + " INTEGER PRIMARY KEY," + KEY_NAME + " TEXT,"+ KEY_PH_NO + " TEXT" + ")"; 

    String CREATE_CONTACTS_TABLE = "CREATE TABLE " + TABLE_CONTACTS + "("+ 
    KEY_ID + " INTEGER PRIMARY KEY," + KEY_NAME + " TEXT" + " UNIQUE " + ")"; 

    db.execSQL(CREATE_CONTACTS_TABLE); 
} 

// Upgrading database 
@Override 
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
    // Drop older table if existed 
    db.execSQL("DROP TABLE IF EXISTS " + TABLE_CONTACTS); 

    // Create tables again 
    onCreate(db); 
} 

/** 
* All CRUD(Create, Read, Update, Delete) Operations 
*/ 

// Adding new contact 
void addContact(Contact contact) { 
    SQLiteDatabase db = this.getWritableDatabase(); 

    ContentValues values = new ContentValues(); 
    values.put(KEY_NAME, contact.getName()); // Contact Name 
// values.put(KEY_PH_NO, contact.getPhoneNumber()); // Contact Phone 

    // Inserting Row 
    db.insert(TABLE_CONTACTS, null, values); 
    db.close(); // Closing database connection 
} 

// Getting single contact 
Contact getContact(int id) { 
    SQLiteDatabase db = this.getReadableDatabase(); 

    Cursor cursor = db.query(TABLE_CONTACTS, new String[] { KEY_ID, 
      KEY_NAME }, KEY_ID + "=?", 
      new String[] { String.valueOf(id) }, null, null, null, 
     null); 
    if (cursor != null) 
     cursor.moveToFirst(); 

    Contact contact = new Contact(Integer.parseInt(cursor.getString(0)), 
      cursor.getString(1)); 
    // return contact 
    return contact; 
} 

// Getting All Contacts 
public List<Contact> getAllContacts() { 
    List<Contact> contactList = new ArrayList<Contact>(); 
    // Select All Query 
    String selectQuery = "SELECT * FROM " + TABLE_CONTACTS; 

    SQLiteDatabase db = this.getWritableDatabase(); 
    Cursor cursor = db.rawQuery(selectQuery, null); 

    // looping through all rows and adding to list 
    if (cursor.moveToFirst()) { 
     do { 
      Contact contact = new Contact(); 
      contact.setID(Integer.parseInt(cursor.getString(0))); 
      contact.setName(cursor.getString(1)); 
      //contact.setPhoneNumber(cursor.getString(2)); 
      // Adding contact to list 
      contactList.add(contact); 
     } while (cursor.moveToNext()); 
    } 

    // return contact list 
    return contactList; 
} 




// Updating single contact 
public int updateContact(Contact contact) { 
    SQLiteDatabase db = this.getWritableDatabase(); 

    ContentValues values = new ContentValues(); 
    values.put(KEY_NAME, contact.getName()); 
// values.put(KEY_PH_NO, contact.getPhoneNumber()); 

    // updating row 
    return db.update(TABLE_CONTACTS, values, KEY_ID + " = ?", 
      new String[] { String.valueOf(contact.getID()) }); 
} 

// Deleting single contact 
public void deleteContact(Contact contact) { 
    SQLiteDatabase db = this.getWritableDatabase(); 
    db.delete(TABLE_CONTACTS, KEY_ID + " = ?", 
      new String[] { String.valueOf(contact.getID()) }); 
    db.close(); 
} 




public int deleteContact() { 
    try { 
     SQLiteDatabase db = this.getWritableDatabase(); 
     return db.delete(TABLE_CONTACTS, null, null); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
    return 0; 
} 

// Getting contacts Count 
public int getContactsCount() { 
    String countQuery = "SELECT * FROM " + TABLE_CONTACTS; 
    SQLiteDatabase db = this.getReadableDatabase(); 
    Cursor cursor = db.rawQuery(countQuery, null); 
    cursor.close(); 

    // return count 
    return cursor.getCount(); 
} 



public ArrayList<String> getAllApps() { 

    String selectQuery = "SELECT * FROM table"; 
    ArrayList<String> apps = new ArrayList<String>(); 
    SQLiteDatabase db = this.getWritableDatabase(); 
    Cursor cursor = db.rawQuery(selectQuery, null); 

    // looping through all rows and adding to list 
    if (cursor.moveToFirst()) { 
     do { 
      apps.add(cursor.getString(KEY_NAME)); 
     } while (cursor.moveToNext()); 
    } 

    // return list 
    return apps; 
} 







    } 

和我的活性類

public class PlayStoreApps extends Activity implements 
     OnItemClickListener { 
/* whether or not to include system apps */ 
private static final boolean INCLUDE_SYSTEM_APPS = false; 
DatabaseHandler db; 
private ListView mAppsList; 
private AppListAdapter mAdapter; 
private List<App> mApps; 
String APKFilePath = "mnt/sdcard/foldername/"; 

/** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.games); 
    db = new DatabaseHandler(this); 
    Button AddMore = (Button) findViewById(R.id.AddMore); 
    AddMore.setOnClickListener(new OnClickListener() { 
     public void onClick(View view) { 

      // Intent intent = new Intent(FunActivity.this, 
      // SdcardAPkMgr.class); 
      // startActivity(intent); 
     } 
    }); 

    mAppsList = (ListView) findViewById(R.id.appslist); 
    mAppsList.setOnItemClickListener(this); 

    mApps = loadInstalledApps(INCLUDE_SYSTEM_APPS); 

    mAdapter = new AppListAdapter(getApplicationContext()); 
    mAdapter.setListItems(mApps); 
    mAppsList.setAdapter(mAdapter); 

    new LoadIconsTask().execute(mApps.toArray(new App[] {})); 
} 

public void onItemClick(AdapterView<?> parent, View view, int position, 
     long id) { 

    final App app = (App) parent.getItemAtPosition(position); 

    AlertDialog.Builder builder = new AlertDialog.Builder(this); 

    String msg = app.getTitle() 
      + "\n\n" 
      + "Version " 
      + app.getVersionName() 
      + " (" 
      + app.getVersionCode() 
      + ")" 
      + (app.getDescription() != null ? ("\n\n" + app 
        .getDescription()) : ""); 

    builder.setMessage(msg) 
      .setCancelable(true) 
      .setTitle(app.getTitle()) 
      .setIcon(mAdapter.getIcons().get(app.getPackageName())) 
      .setPositiveButton("Launch", 
        new DialogInterface.OnClickListener() { 
         public void 
     onClick(DialogInterface dialog, int id) { 
          // start the app by 

    invoking its launch intent 
          Intent i = 
     getPackageManager() 

     .getLaunchIntentForPackage(
              app.getPackageName()); 
          try { 
           if (i != null) { 

    startActivity(i); 
           } else { 
            i = new 
    Intent(app.getPackageName()); 

    startActivity(i); 
           } 
          } catch 
     (ActivityNotFoundException err) { 

    Toast.makeText(PlayStoreApps.this, 

    "Error launching app", 

     Toast.LENGTH_SHORT).show(); 
          } 
         } 
        }) 
      .setNegativeButton("Cancel", 
        new DialogInterface.OnClickListener() { 
         public void 
     onClick(DialogInterface dialog, int id) { 
          dialog.cancel(); 
         } 
        }); 
    AlertDialog dialog = builder.create(); 
    dialog.show(); 
} 

private List<App> loadInstalledApps(boolean includeSysApps) { 
    List<App> apps = new ArrayList<App>(); 

    // the package manager contains the information about all installed apps 
    PackageManager packageManager = getPackageManager(); 

    List<PackageInfo> packs = packageManager.getInstalledPackages(0); // 
      PackageManager.GET_META_DATA 

    for (int i = 0; i < packs.size(); i++) { 
     PackageInfo p = packs.get(i); 
     ApplicationInfo applicationInfo = p.applicationInfo; 
     String name = packageManager.getApplicationLabel(applicationInfo) 
       .toString(); 

     List arraylist = db.getAllApps(); 

     if (arraylist.contains(p.packageName)) 

     { 
      App app = new App(); 
      app.setTitle(p.applicationInfo.loadLabel(packageManager) 
        .toString()); 
      app.setPackageName(p.packageName); 
      app.setVersionName(p.versionName); 
      app.setVersionCode(p.versionCode); 
      CharSequence description = p.applicationInfo 
        .loadDescription(packageManager); 
      app.setDescription(description != null ? 
    description.toString() 
        : ""); 
      apps.add(app); 
      // } 
     } 
    } 
    return apps; 
} 

/** 
* An asynchronous task to load the icons of the installed applications. 
*/ 
private class LoadIconsTask extends AsyncTask<App, Void, Void> { 
    @Override 
    protected Void doInBackground(App... apps) { 

     Map<String, Drawable> icons = new HashMap<String, Drawable>(); 
     PackageManager manager = getApplicationContext() 
       .getPackageManager(); 

     for (App app : apps) { 
      String pkgName = app.getPackageName(); 
      Drawable ico = null; 
      try { 
       Intent i = 
     manager.getLaunchIntentForPackage(pkgName); 
       if (i != null) { 
        ico = manager.getActivityIcon(i); 
       } 
      } catch (NameNotFoundException e) { 
       Log.e("ERROR", "Unable to find icon for package '" 
         + pkgName + "': " + 
     e.getMessage()); 
      } 
      icons.put(app.getPackageName(), ico); 
     } 
     mAdapter.setIcons(icons); 

     return null; 
    } 

    @Override 
    protected void onPostExecute(Void result) { 
     mAdapter.notifyDataSetChanged(); 
    } 
} 


     } 
+0

我只是想這就是隻顯示列表視圖中的應用程序namme存在於數據庫中 –

回答

0
The method getString(int) in the type Cursor is not applicable for the arguments (String) 

該聲明說,這一切......你必須整PARAM傳遞給cursor.getString方法..

假設你想要檢索的第一列數據,然後通過cursor.getString(1)..等等..

在你的情況檢查KEY_NAME的列位置..和通整列位置....

而且你必須聲明String selectQuery = "SELECT * FROM table"; ..你創建表名作爲table ..如果沒有它會拋出異常,因爲表不存在...

你應該試試String selectQuery = "SELECT * FROM "+table_name;

希望這有助於...

0

改變方法getAllApps()來

public ArrayList<String> getAllApps() { 

    String selectQuery = "SELECT * FROM "+TABLE_CONTACTS; 
    ArrayList<String> apps = new ArrayList<String>(); 
    SQLiteDatabase db = this.getWritableDatabase(); 
    Cursor cursor = db.rawQuery(selectQuery, null); 

    // looping through all rows and adding to list 
    if (cursor.moveToFirst()) { 
     do { 
      apps.add(cursor.getString(cursor.getColumnIndex(KEY_NAME))); 
     } while (cursor.moveToNext()); 
    } 

    // return list 
    return apps; 
} 

,並把你的
List arraylist = db.getAllApps();
前的for循環