Ceci est un tutoriel sur le ContentProvider. A travers différents exemples, vous apprendrez à utiliser ContentProvider pour charger des données depuis un appareil Android. ContentProvider est l'un des composants fondamentaux d'android, avec activity, service, application et broadcastreceiver. En tant que tel, il est important pour votre parcours de développement android.

Exemple 1 - Comment charger des contacts depuis l'appareil.

Cet exemple examine comment utiliser le fournisseur de contenu pour charger des contacts depuis n'importe quel appareil android.

Étape 1 : Dépendances

Aucune dépendance de tierce partie n'est nécessaire.

Étape 2 : Ajouter des permissions

Pour lire les contacts d'un appareil d'un utilisateur, vous avez besoin de la permission de l'utilisateur. Ainsi, vous devez ajouter la permission READ_CONTACTS qui sera montrée à l'utilisateur lorsqu'il installera votre application.

<uses-permission android:name="android.permission.READ_CONTACTS"/>

Étape 3 : Conception de l'interface utilisateur

L'interface utilisateur comprendra un bouton et une liste. L'utilisateur appuie sur le bouton et les contacts sont récupérés et chargés sur le listview.

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.parag.contentprovidersample.MainActivity">

    <Button
        android:id="@+id/btn"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Get contact names"
        android:layout_margin="10dp"
        />

    <ListView
        android:id="@+id/listview"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_below="@+id/btn"
        android:layout_margin="10dp"/>

</RelativeLayout>

Étape 3 : Écrire le code

Le code est en java mais peut être converti en kotlin.

MainActivity.java

Ajouter les importations, y compris le LoaderManager et le cursorLoader :

import android.app.LoaderManager;
import android.content.CursorLoader;
import android.content.Loader;
import android.database.Cursor;
import android.net.Uri;
import android.provider.ContactsContract;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ListView;

import java.util.ArrayList;

Étendre la appcompactivity et implémenter plusieurs interfaces dont le LoaderManager.LoaderCallbacks<Cursor> :

public class MainActivity extends AppCompatActivity implements View.OnClickListener,LoaderManager.LoaderCallbacks<Cursor>{

Déclarez nos widgets d'interface utilisateur ainsi que la projection :

    Button button;
    ListView listView;
    String[] projection = {ContactsContract.Contacts.DISPLAY_NAME};
    boolean hasLoaded;

Voici le reste du code :

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        button = (Button)findViewById(R.id.btn);
        listView = (ListView)findViewById(R.id.listview);
        button.setOnClickListener(this);

    }

    @Override
    public Loader<Cursor> onCreateLoader(int i, Bundle bundle) { // CursorLoader instance
        Uri uri = ContactsContract.Contacts.CONTENT_URI;
        String orderBy = ContactsContract.Contacts.DISPLAY_NAME_PRIMARY;
        if(i == 1) {
            return new CursorLoader(this,uri ,projection,null,null,orderBy);
        }
        else
        {
            return null;
        }
    }

    @Override
    public void onLoadFinished(Loader<Cursor> loader, Cursor cursor) {

        ArrayList<String> contactList = new ArrayList<>();
        if(cursor != null && cursor.getCount() > 0)
        {
            while(cursor.moveToNext())
            {
                contactList.add(cursor.getString(0));
            }
            ArrayAdapter<String> contactArrayAdapter = new ArrayAdapter<>(this,android.R.layout.simple_list_item_1,contactList);
            listView.setAdapter(contactArrayAdapter);
        }
    }

    @Override
    public void onLoaderReset(Loader<Cursor> loader) {

    }

    @Override
    public void onClick(View view) {
        switch (view.getId())
        {
            case R.id.btn:
                if(!hasLoaded)
                {
                    getLoaderManager().initLoader(1,null,this);
                    hasLoaded = true;
                }
                else
                {
                    getLoaderManager().restartLoader(1,null,this);
                }
        }
    }
}

Référence

No. Nom
1. Télécharger maintenant
2. Visitez l'auteur

Catégorisé: