Exemple de ContentProvider pour Android
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
| --- |
|---|