当前位置:   article > 正文

【Android 四大组件之Content Provider】一文吃透Content Provider 内容提供者(1)_android 发布内容提供者content

android 发布内容提供者content

总结

学习技术是一条慢长而艰苦的道路,不能靠一时激情,也不是熬几天几夜就能学好的,必须养成平时努力学习的习惯。所以:贵在坚持!

最后如何才能让我们在面试中对答如流呢?

答案当然是平时在工作或者学习中多提升自身实力的啦,那如何才能正确的学习,有方向的学习呢?有没有免费资料可以借鉴?为此我整理了一份Android学习资料路线:

这里是一部分我工作以来以及参与过的大大小小的面试收集总结出来的一套BAT大厂面试资料专题包,主要还是希望大家在如今大环境不好的情况下面试能够顺利一点,希望可以帮助到大家。

好了,今天的分享就到这里,如果你对在面试中遇到的问题,或者刚毕业及工作几年迷茫不知道该如何准备面试并突破现状提升自己,对于自己的未来还不够了解不知道给如何规划。来看看同行们都是如何突破现状,怎么学习的,来吸收他们的面试以及工作经验完善自己的之后的面试计划及职业规划。

最后,祝愿即将跳槽和已经开始求职的大家都能找到一份好的工作!

这些只是整理出来的部分面试题,后续会持续更新,希望通过这些高级面试题能够降低面试Android岗位的门槛,让更多的Android工程师理解Android系统,掌握Android系统。喜欢的话麻烦点击一个喜欢再关注一下~

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

四、代码示例

====================================================================

  1. 在Activity 中添加两个点击按钮事件,分别实现添加和获取功能。

    
      public void onClickAddName(View view) {
    
    
    
            ContentValues contentValues = new ContentValues();
    
            contentValues.put(Students.NAME, ((EditText) findViewById(R.id.add_edi)).getText().toString());
    
    
    
            System.out.println(contentValues);
    
    
    
            Uri uri = getContentResolver().insert(
    
                    Students.CONTENT_URI, contentValues);
    
    
    
            System.out.println(uri);
    
    
    
            Toast.makeText(getBaseContext(),
    
                    uri.toString(), Toast.LENGTH_LONG).show();
    
    
    
        }
    
    
    
        @SuppressLint("Range")
    
        public void onClickRetrieveName(View view) {
    
    // Retrieve student records
    
            Cursor cursor = getContentResolver().query(Students.CONTENT_URI, null, "name", null, null);
    
            if (cursor.moveToFirst()) {
    
                do {
    
                    ((TextView) findViewById(R.id.get_edi)).setText(cursor.getString(cursor.getColumnIndex(Students.NAME)));
    
    
    
                    Toast.makeText(this,
    
                            cursor.getString(cursor.getColumnIndex(Students._ID)) +
    
                                    ", " + cursor.getString(cursor.getColumnIndex(Students.NAME)),
    
                            Toast.LENGTH_SHORT).show();
    
                } while (cursor.moveToNext());
    
            }
    
        }
    
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
  2. 创建一个Students 文件,继承自ContentProvider,并重新它的6个方法。我这里增、删、改、查都已经写好了,可以直接使用。


public class Students extends ContentProvider {



    static final String PROVIDER_NAME = "com.traveleasy.activitydemo";

    static final String URL = "content://" + PROVIDER_NAME + "/students";

    static final Uri CONTENT_URI = Uri.parse(URL);



    static final String _ID = "_id";

    static final String NAME = "name";



    private static HashMap<String, String> STUDENTS_PROJECTION_MAP;



    static final int STUDENTS = 1;

    static final int STUDENT_ID = 2;



    static final UriMatcher uriMatcher;



    static {

        uriMatcher = new UriMatcher(UriMatcher.NO_MATCH);

        uriMatcher.addURI(PROVIDER_NAME, "students", STUDENTS);

        uriMatcher.addURI(PROVIDER_NAME, "students/#", STUDENT_ID);

    }



    /**

     * 数据库特定常量声明

     */

    private SQLiteDatabase db;

    static final String DATABASE_NAME = "College";

    static final String STUDENTS_TABLE_NAME = "students";

    static final int DATABASE_VERSION = 1;

    static final String CREATE_DB_TABLE =

            " CREATE TABLE " + STUDENTS_TABLE_NAME +

                    " (_id INTEGER PRIMARY KEY AUTOINCREMENT, " +

                    " name TEXT NOT NULL);";



    /**

     * 创建和管理提供者内部数据源的帮助类.

     */

    private static class DatabaseHelper extends SQLiteOpenHelper {

        DatabaseHelper(Context context) {

            super(context, DATABASE_NAME, null, DATABASE_VERSION);

        }



        @Override

        public void onCreate(SQLiteDatabase db) {

            db.execSQL(CREATE_DB_TABLE);

        }



        @Override

        public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

            db.execSQL("DROP TABLE IF EXISTS " + STUDENTS_TABLE_NAME);

            onCreate(db);

        }

    }



    @Override

    public boolean onCreate() {

        Context context = getContext();

        DatabaseHelper dbHelper = new DatabaseHelper(context);



        /**

         * 如果不存在,则创建一个可写的数据库。

         */

        db = dbHelper.getWritableDatabase();

        return db != null;

    }



    @Nullable

    @Override

    public Cursor query(@NonNull Uri uri, @Nullable String[] projection, @Nullable String selection, @Nullable String[] selectionArgs, @Nullable String sortOrder) {

        SQLiteQueryBuilder qb = new SQLiteQueryBuilder();

        qb.setTables(STUDENTS_TABLE_NAME);



        switch (uriMatcher.match(uri)) {

            case STUDENTS:

                qb.setProjectionMap(STUDENTS_PROJECTION_MAP);

                break;



            case STUDENT_ID:

                qb.appendWhere(_ID + "=" + uri.getPathSegments().get(1));

                break;



            default:

                throw new IllegalArgumentException("Unknown URI " + uri);

        }



        if (sortOrder == null || sortOrder == "") {

            /**

             * 默认按照学生姓名排序

             */

            sortOrder = NAME;

        }

        Cursor c = qb.query(db, projection, selection, selectionArgs, null, null, sortOrder);



        /**

         * 注册内容URI变化的监听器

         */

        c.setNotificationUri(getContext().getContentResolver(), uri);

        return c;

    }



    @Nullable

    @Override

    public String getType(@NonNull Uri uri) {

        switch (uriMatcher.match(uri)) {

            /**

             * 获取所有学生记录

             */

            case STUDENTS:

                return "vnd.android.cursor.dir/vnd.example.students";



            /**

             * 获取一个特定的学生

             */

            case STUDENT_ID:

                return "vnd.android.cursor.item/vnd.example.students";



            default:

                throw new IllegalArgumentException("Unsupported URI: " + uri);

        }

    }



    @Nullable

    @Override

    public Uri insert(@NonNull Uri uri, @Nullable ContentValues values) {

        /**

         * 添加新学生记录

         */

        long rowID = db.insert(STUDENTS_TABLE_NAME, "", values);



        /**

         * 如果记录添加成功

         */



        if (rowID > 0) {

            Uri _uri = ContentUris.withAppendedId(CONTENT_URI, rowID);

            getContext().getContentResolver().notifyChange(_uri, null);

            return _uri;

        }

        throw new SQLException("Failed to add a record into " + uri);

    }



    @Override

    public int delete(@NonNull Uri uri, @Nullable String selection, @Nullable String[] selectionArgs) {

        int count = 0;



        switch (uriMatcher.match(uri)) {

            case STUDENTS:

                count = db.delete(STUDENTS_TABLE_NAME, selection, selectionArgs);

                break;



            case STUDENT_ID:

                String id = uri.getPathSegments().get(1);

                count = db.delete(STUDENTS_TABLE_NAME, _ID + " = " + id +

                        (!TextUtils.isEmpty(selection) ? " AND (" + selection + ')' : ""), selectionArgs);

                break;



            default:

                throw new IllegalArgumentException("Unknown URI " + uri);

        }



        getContext().getContentResolver().notifyChange(uri, null);

        return count;

    }



    @Override

    public int update(@NonNull Uri uri, @Nullable ContentValues values, @Nullable String selection, @Nullable String[] selectionArgs) {

        int count = 0;


### 最后

由于题目很多整理答案的工作量太大,所以仅限于提供知识点,详细的很多问题和参考答案我都整理成了 PDF文件

![](https://img-blog.csdnimg.cn/img_convert/7560a07790d46ac98c9cf693bab7f4cf.webp?x-oss-process=image/format,png)

![](https://img-blog.csdnimg.cn/img_convert/0c506dec63a29a6102e8a0c74f6bc88a.webp?x-oss-process=image/format,png)

![](https://img-blog.csdnimg.cn/img_convert/436c5a1899fff4e9961e34b8e31bc846.webp?x-oss-process=image/format,png)



**网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**

**[需要这份系统化学习资料的朋友,可以戳这里获取](https://bbs.csdn.net/topics/618156601)**

**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**



        int count = 0;


### 最后

由于题目很多整理答案的工作量太大,所以仅限于提供知识点,详细的很多问题和参考答案我都整理成了 PDF文件

[外链图片转存中...(img-CwkVBbXG-1715272300580)]

[外链图片转存中...(img-cdsJfcsv-1715272300581)]

[外链图片转存中...(img-tklUXqdw-1715272300581)]



**网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**

**[需要这份系统化学习资料的朋友,可以戳这里获取](https://bbs.csdn.net/topics/618156601)**

**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101
  • 102
  • 103
  • 104
  • 105
  • 106
  • 107
  • 108
  • 109
  • 110
  • 111
  • 112
  • 113
  • 114
  • 115
  • 116
  • 117
  • 118
  • 119
  • 120
  • 121
  • 122
  • 123
  • 124
  • 125
  • 126
  • 127
  • 128
  • 129
  • 130
  • 131
  • 132
  • 133
  • 134
  • 135
  • 136
  • 137
  • 138
  • 139
  • 140
  • 141
  • 142
  • 143
  • 144
  • 145
  • 146
  • 147
  • 148
  • 149
  • 150
  • 151
  • 152
  • 153
  • 154
  • 155
  • 156
  • 157
  • 158
  • 159
  • 160
  • 161
  • 162
  • 163
  • 164
  • 165
  • 166
  • 167
  • 168
  • 169
  • 170
  • 171
  • 172
  • 173
  • 174
  • 175
  • 176
  • 177
  • 178
  • 179
  • 180
  • 181
  • 182
  • 183
  • 184
  • 185
  • 186
  • 187
  • 188
  • 189
  • 190
  • 191
  • 192
  • 193
  • 194
  • 195
  • 196
  • 197
  • 198
  • 199
  • 200
  • 201
  • 202
  • 203
  • 204
  • 205
  • 206
  • 207
  • 208
  • 209
  • 210
  • 211
  • 212
  • 213
  • 214
  • 215
  • 216
  • 217
  • 218
  • 219
  • 220
  • 221
  • 222
  • 223
  • 224
  • 225
  • 226
  • 227
  • 228
  • 229
  • 230
  • 231
  • 232
  • 233
  • 234
  • 235
  • 236
  • 237
  • 238
  • 239
  • 240
  • 241
  • 242
  • 243
  • 244
  • 245
  • 246
  • 247
  • 248
  • 249
  • 250
  • 251
  • 252
  • 253
  • 254
  • 255
  • 256
  • 257
  • 258
  • 259
  • 260
  • 261
  • 262
  • 263
  • 264
  • 265
  • 266
  • 267
  • 268
  • 269
  • 270
  • 271
  • 272
  • 273
  • 274
  • 275
  • 276
  • 277
  • 278
  • 279
  • 280
  • 281
  • 282
  • 283
  • 284
  • 285
  • 286
  • 287
  • 288
  • 289
  • 290
  • 291
  • 292
  • 293
  • 294
  • 295
  • 296
  • 297
  • 298
  • 299
  • 300
  • 301
  • 302
  • 303
  • 304
  • 305
  • 306
  • 307
  • 308
  • 309
  • 310
  • 311
  • 312
  • 313
  • 314
  • 315
  • 316
  • 317
  • 318
  • 319
  • 320
  • 321
  • 322
  • 323
  • 324
  • 325
  • 326
  • 327
  • 328
  • 329
  • 330
  • 331
  • 332
  • 333
  • 334
  • 335
  • 336
  • 337
  • 338
  • 339
  • 340
  • 341
  • 342
  • 343
  • 344
  • 345
  • 346
  • 347
  • 348
  • 349
  • 350
  • 351
  • 352
  • 353
  • 354
  • 355
  • 356
  • 357
  • 358
  • 359
  • 360
  • 361
  • 362
  • 363
  • 364
  • 365
  • 366
  • 367
  • 368
  • 369
  • 370
  • 371
  • 372
  • 373
  • 374
  • 375
  • 376
  • 377
本文内容由网友自发贡献,转载请注明出处:https://www.wpsshop.cn/w/代码探险家/article/detail/981982
推荐阅读
相关标签
  

闽ICP备14008679号