如何比较反对我的数据库中的值? [英] How do I compare values against my database?

查看:196
本文介绍了如何比较反对我的数据库中的值?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在我的申请,我从插入谷歌用户访问应用程序软件包名称播放,并将其保存在数据库中。我只显示,从安装的应用程序,包名称是数据库应用程序。

该值成功插入到数据库中,但是当我在 PlayStoreApps 类在这一行比较如果(arraylist.equals(p.packageName ))

 公共类PlayStoreApps扩展活动实现OnItemClickListener {    私有静态最终布尔INCLUDE_SYSTEM_APPS = FALSE;
    数据库处理器分贝;
    私人的ListView mAppsList;
    私人AppListAdapter mAdapter;
    私人列表<应用> MAPPS;    DB =新数据库处理器(本);    私人列表<应用> loadInstalledApps(布尔includeSysApps){
        清单<应用>应用=新的ArrayList<应用>();        //包管理器包含所有安装的应用程序的信息
        软件包管理系统软件包管理系统= getPackageManager();        清单< PackageInfo>包= packageManager.getInstalledPackages(0);
        名单的ArrayList = db.getAllApps();        的for(int i = 0; I< packs.size();我++){
            PackageInfo p值= packs.get(ⅰ);
            ApplicationInfo applicationInfo = p.applicationInfo;            如果(arraylist.equals(p.packageName)){
                //如果((p.packageName).equals(数组列表))
                应用程序=新的App();
                app.setTitle(p.applicationInfo.loadLabel(软件包管理系统)的ToString());
                app.setPackageName(p.packageName);
                app.setVersionName(p.versionName);
                app.setVersion code(p.version code);
                CharSequence的描述= p.applicationInfo.loadDescription(软件包管理系统);
                app.setDescription(说明​​!= NULL?
                description.toString():);
                apps.add(应用);
            }
        }
        返回应用程序;
    }    公共类搜索扩展活动{
        / **当第一次创建活动调用。 * /
        数据库处理器分贝;
        的WebView网络;
        @覆盖
        公共无效的onCreate(捆绑savedInstanceState){
            super.onCreate(savedInstanceState);
            的setContentView(R.layout.search);
            DB =新数据库处理器(本);            串ID = url.substring(标准。长度(),url.indexOf(与&));
            db.addContact(新联系(ID));            Log.d(读,读所有联系人..);
            清单<联系与GT;接触= db.getAllContacts();            对于(联系CN:触点){
                字符串日志=ID:+ cn.getID()+,名称:+ cn.getName();                //字符串日志=ID:+ cn.getID()+,名称:+ cn.getName()+,电话:+ cn.getPhoneNumber();
                //写入联系人登录
                Log.d(姓名,日志);
            }            view.loadUrl(URL);            返回true;
        }公共类数据库处理器扩展SQLiteOpenHelper {    私有静态最终诠释DATABASE_VERSION = 1;    私有静态最后弦乐DATABASE_NAME =contactsManager;    私有静态最后弦乐TABLE_CONTACTS =接触;    私有静态最后弦乐KEY_ID =ID;
    私有静态最后弦乐KEY_NAME =名;    公共数据库处理器(上下文的背景下){
        超(背景下,DATABASE_NAME,空,DATABASE_VERSION);
    }    //创建表
    @覆盖
    公共无效的onCreate(SQLiteDatabase DB){
    //字符串CREATE_CONTACTS_TABLE =CREATE TABLE+ TABLE_CONTACTS +(+ KEY_ID +INTEGER PRIMARY KEY,+ KEY_NAME +TEXT+ KEY_PH_NO +TEXT+);        字符串CREATE_CONTACTS_TABLE =CREATE TABLE+ TABLE_CONTACTS +(+ KEY_ID +INTEGER PRIMARY KEY,+ KEY_NAME +TEXT+独特的+);        db.execSQL(CREATE_CONTACTS_TABLE);
    }    //数据库升级
    @覆盖
    公共无效onUpgrade(SQLiteDatabase分贝,INT oldVersion,诠释静态网页){
        如果存在//删除旧的表
        db.execSQL(DROP TABLE IF EXISTS+ TABLE_CONTACTS);        //再次创建表
        的onCreate(DB);
    }    / **
     *所有CRUD(创建,读取,更新,删除)操作
     * /    //添加新联系人
    无效的addContact(联系方式联系我们){
        SQLiteDatabase分贝= this.getWritableDatabase();        ContentValues​​值=新ContentValues​​();
        values​​.put(KEY_NAME,contact.getName()); // 联系人姓名
    // values​​.put(KEY_PH_NO,contact.getPhoneNumber()); // 联系电话        //插入行
        db.insert(TABLE_CONTACTS,空,价值);
        db.close(); //关闭数据库连接
    }    //获取单触点
    联系getContact(INT ID){
        SQLiteDatabase分贝= this.getReadableDatabase();        光标光标= db.query(TABLE_CONTACTS,新的String [] {KEY_ID,KEY_NAME},KEY_ID +=?,新的String [] {将String.valueOf(ID)},NULL,NULL,NULL,NULL);
        如果(指针!= NULL)
            cursor.moveToFirst();        联系方式联系我们=新的联系人(的Integer.parseInt(cursor.getString(0)),cursor.getString(1));
        //返回接触
        返回接触;
    }    //获取所有联系人
    公开名单<联系与GT; getAllContacts(){
        清单<联系与GT; contactList =新的ArrayList<联系与GT;();
        //选择所有查询
        字符串selectQuery =SELECT * FROM+ TABLE_CONTACTS;        SQLiteDatabase分贝= this.getWritableDatabase();
        光标光标= db.rawQuery(selectQuery,NULL);        //通过所有行循环,并增加列表
        如果(cursor.moveToFirst()){
            做{
                联系方式联系我们=新的联系人();
                contact.setID(的Integer.parseInt(cursor.getString(0)));
                contact.setName(cursor.getString(1));
                //contact.setPhoneNumber(cursor.getString(2));
                //添加联系人名单
                contactList.add(接触);
            }而(cursor.moveToNext());
        }        //返回联系人列表
        返回contactList;
    }    //更新单触点
    公众诠释updateContact(联系方式联系我们){
        SQLiteDatabase分贝= this.getWritableDatabase();        ContentValues​​值=新ContentValues​​();
        values​​.put(KEY_NAME,contact.getName());
// values​​.put(KEY_PH_NO,contact.getPhoneNumber());        //更新行
        返回db.update(TABLE_CONTACTS,价值观,KEY_ID +=?,新的String [] {将String.valueOf(contact.getID())});
    }    //删除单个联系人
    公共无效deleteContact(联系方式联系我们){
        SQLiteDatabase分贝= this.getWritableDatabase();
        db.delete(TABLE_CONTACTS,KEY_ID +=?,新的String [] {将String.valueOf(contact.getID())});
        db.close();
    }    公众诠释deleteContact(){
        尝试{
            SQLiteDatabase分贝= this.getWritableDatabase();
            返回db.delete(TABLE_CONTACTS,NULL,NULL);
        }赶上(例外五){
            e.printStackTrace();
        }
        返回0;
    }    //获取联系人计数
    公众诠释getContactsCount(){
        字符串countQuery =SELECT * FROM+ TABLE_CONTACTS;
        SQLiteDatabase分贝= this.getReadableDatabase();
        光标光标= db.rawQuery(countQuery,NULL);
        cursor.close();        //返回计数
        返回cursor.getCount();
    }    公众的ArrayList<串GT; getAllApps(){        字符串selectQuery =SELECT * FROM+ TABLE_CONTACTS;
        ArrayList的<串GT;应用=新的ArrayList<串GT;();
        SQLiteDatabase分贝= this.getWritableDatabase();
        光标光标= db.rawQuery(selectQuery,NULL);        //通过所有行循环,并增加列表
        如果(cursor.moveToFirst()){
            做{
                apps.add(cursor.getString(cursor.getColumnIndex(KEY_NAME)));
            }而(cursor.moveToNext());
        }        //返回列表
        返回应用程序;
    }
}


解决方案

首先:不使用非通用列表

在你的 loadInstalledApps 方法,您可以使用这一行:

 列表的ArrayList = db.getAllApps();

由于 getAllApps 返回的ArrayList<弦乐> 你的列表应该是类型列表与LT;弦乐方式>

二:你不能在列表中像你想做什么比较项目:

 如果(arraylist.equals(p.packageName)

你基本上想看看是否在的ArrayList 对象等于字符串。苹果与桔子比较不顺利要么...

第三:在code比较,而不是在SQL比较实在是太慢了performancewise,应该肯定是可以避免的,尤其是在移动操作系统的,因为这是内存和CPU的浪费

如果你真的想在code进行比较,你可以做这样的:

 如果(arraylist.contains(p.packageName)){
    // 做一点事
    应用程序=新的App();
    app.setTitle(p.applicationInfo.loadLabel(软件包管理系统)的ToString());
    app.setPackageName(p.packageName);
    app.setVersionName(p.versionName);
    app.setVersion code(p.version code);
    CharSequence的描述= p.applicationInfo.loadDescription(软件包管理系统);
    app.setDescription(说明​​!= NULL?
    description.toString():);
    apps.add(应用);
}

不过,我不会推荐这条道路。

In my application, I'm inserting the user visit apps package name from Google Play and save it in a database. I display only that apps from install apps that package name are in database.

The values insert successfully into the database, but when I compare in the PlayStoreAppsclass at this line if (arraylist.equals(p.packageName)):

public class PlayStoreApps extends Activity implements OnItemClickListener {

    private static final boolean INCLUDE_SYSTEM_APPS = false;
    DatabaseHandler db;
    private ListView mAppsList;
    private AppListAdapter mAdapter;
    private List<App> mApps;

    db = new DatabaseHandler(this);

    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); 
        List arraylist = db.getAllApps();

        for (int i = 0; i < packs.size(); i++) {
            PackageInfo p = packs.get(i);
            ApplicationInfo applicationInfo = p.applicationInfo;

            if (arraylist.equals(p.packageName)) {
                // if ( (p.packageName).equals(arraylist))
                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;
    }

    public class Search extends Activity {
        /** Called when the activity is first created. */
        DatabaseHandler db;
        WebView web;
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.search);
            db = new DatabaseHandler(this);

            String id= url.substring(Standard .length(), url.indexOf("&"));
            db.addContact(new Contact(id));

            Log.d("Reading: ", "Reading all contacts..");
            List<Contact> contacts = db.getAllContacts();       

            for (Contact cn : contacts) {
                String log = "Id: "+cn.getID()+" ,Name: " + cn.getName() ;

                //  String log = "Id: "+cn.getID()+" ,Name: " + cn.getName() + " ,Phone: " + cn.getPhoneNumber();
                // Writing Contacts to log
                Log.d("Name: ", log);
            }   

            view.loadUrl(url);

            return true;
        }

public class DatabaseHandler extends SQLiteOpenHelper {

    private static final int DATABASE_VERSION = 1;

    private static final String DATABASE_NAME = "contactsManager";

    private static final String TABLE_CONTACTS = "contacts";

    private static final String KEY_ID = "id";
    private static final String KEY_NAME = "name";

    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_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;
    }
}

解决方案

First of: don't use non-generic Lists.

In your loadInstalledApps method, you use this line:

List arraylist = db.getAllApps();

As the getAllApps returns an ArrayList<String> your List should be of type List<String>.

Second: You can't compare items in a list like what you're trying to do:

if(arraylist.equals(p.packageName)

You're essentially trying to see if the ArrayList object is equal to a String. Comparing apples with oranges doesn't go well either...

Third: Comparing in code instead of comparing in SQL is really slow performancewise and should definately be avoided, especially on mobile OS's, as this is a waste of memory and CPU.

If you really want to compare in code, you can do it like this:

if(arraylist.contains(p.packageName)) {
    // Do something
    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);
}

But I wouldn't recommend this path.

这篇关于如何比较反对我的数据库中的值?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆