Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> Android

एंड्रॉइड लोडर का उपयोग कैसे करें?

एंड्रॉइड में लोडर (लीगेसी) बनाम आधुनिक विकल्प

लोडर (android.app.LoaderManager, CursorLoader) API 28 में डिप्रिकेट हो गए हैं। नए कोड के लिए, ViewModel + LiveData/Flow + Room/Paging 3 या Coroutines + Flow का उपयोग करें। यह लेख लीगेसी लोडर API को संदर्भ के लिए दस्तावेज करता है और आधुनिक प्रतिस्थापन दिखाता है।

लीगेसी लोडर उदाहरण (केवल संदर्भ)

// डिप्रिकेट - नए प्रोजेक्ट्स में उपयोग न करें
public class LegacyLoaderActivity extends AppCompatActivity
        implements LoaderManager.LoaderCallbacks {

    private static final int LOADER_ID = 1;
    private SimpleCursorAdapter adapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ListView lv = findViewById(R.id.list);

        String[] from = {ContactsContract.Contacts.DISPLAY_NAME};
        int[] to = {android.R.id.text1};
        adapter = new SimpleCursorAdapter(this, android.R.layout.simple_list_item_1, null, from, to, 0);
        lv.setAdapter(adapter);

        getLoaderManager().initLoader(LOADER_ID, null, this);
    }

    @NonNull @Override
    public Loader onCreateLoader(int id, Bundle args) {
        return new CursorLoader(this, ContactsContract.Contacts.CONTENT_URI,
                new String[]{ContactsContract.Contacts._ID, ContactsContract.Contacts.DISPLAY_NAME},
                null, null, ContactsContract.Contacts.DISPLAY_NAME);
    }

    @Override
    public void onLoadFinished(@NonNull Loader loader, Cursor data) {
        adapter.swapCursor(data);
    }

    @Override
    public void onLoaderReset(@NonNull Loader loader) {
        adapter.swapCursor(null);
    }
}

आधुनिक प्रतिस्थापन: ViewModel + Room + LiveData

1. Room एंटिटी और DAO

@Entity(tableName = "contacts")
public class Contact {
    @PrimaryKey public long id;
    public String name;
    public String phone;
}

@Dao
public interface ContactDao {
    @Query("SELECT * FROM contacts ORDER BY name")
    LiveData> getAllContacts();
}

2. रिपॉजिटरी

public class ContactRepository {
    private final ContactDao dao;
    public ContactRepository(Application app) {
        dao = Room.databaseBuilder(app, AppDatabase.class, "db").build().contactDao();
    }
    public LiveData> getAll() { return dao.getAllContacts(); }
}

3. व्यूमॉडल

public class ContactViewModel extends AndroidViewModel {
    private final LiveData> contacts;
    public ContactViewModel(Application app) {
        super(app);
        contacts = new ContactRepository(app).getAll();
    }
    public LiveData> getContacts() { return contacts; }
}

4. गतिविधि/फ्रैगमेंट में अवलोकन करें

public class MainActivity extends AppCompatActivity {
    private ContactAdapter adapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        RecyclerView rv = findViewById(R.id.recyclerView);
        rv.setLayoutManager(new LinearLayoutManager(this));
        adapter = new ContactAdapter();
        rv.setAdapter(adapter);

        new ViewModelProvider(this).get(ContactViewModel.class)
                .getContacts()
                .observe(this, list -> adapter.submitList(list));
    }
}

क्यों आधुनिक स्टैक बेहतर है

पहलूलीगेसी लोडरViewModel + LiveData
जीवनचक्र-जागरूकहां (लोडर मैनेजर के माध्यम से)हां (ViewModel + LifecycleOwner)
कॉन्फिग परिवर्तन पर जीवित रहता हैहांहां
टाइप-सेफ क्वेरीनहीं (कर्सर/स्ट्रिंग कॉलम)हां (DAO मेथड्स)
पेजिनेशन सपोर्टनहींहां (Paging 3)
टेस्टेबिलिटीकठिनआसान (ViewModel मॉक करें)
कोरआउटिन/फ्लो इंटरऑपनहींमूल

माइग्रेशन चेकलिस्ट

  1. निर्भरताएं जोड़ें: Room, Lifecycle/ViewModel, RecyclerView, (वैकल्पिक) Paging 3।
  2. एंटिटी, DAO, डेटाबेस, रिपॉजिटरी, ViewModel बनाएं।
  3. ListView + CursorAdapter को RecyclerView + ListAdapter में बदलें।
  4. लोडर कॉलबैक को observe() से बदलें।
  5. परीक्षण करें: घुमाएं, बैकग्राउंड/फोरग्राउंड, बड़ा डेटासेट।

निष्कर्ष: रखरखाव, टाइप सुरक्षा और भविष्य-प्रूफिंग के लिए ViewModel + Room + LiveData/Flow का उपयोग करें। लोडर केवल पुराने कोडबेस को बनाए रखने के लिए हैं।

  1. एंड्रॉइड में ViewFlipper का उपयोग कैसे करें? एंड्रॉइड में ViewFlipper का उपयोग कैसे करें?

    एंड्रॉइड में ViewFlipper के साथ व्यू फ्लिपिंग एनिमेशन यह ट्यूटोरियल ViewFlipper का उपयोग करके व्यूज़ के बीच एनिमेटेड ट्रांजिशन बनाने का तरीका दिखाता है, जिसमें ऑटो-फ्लिपिंग और मैनुअल नेविगेशन शामिल है। लेआउट (activity_main.xml) <RelativeLayout xmlns:android=https://schemas.android.com/apk/res/an

  1. Android में Snackbar का उपयोग कैसे करें? Android में Snackbar का उपयोग कैसे करें?

    परिचय Snackbar Material Design का एक घटक है जो स्क्रीन के निचले भाग में एक संक्षिप्त संदेश दिखाता है। यह उदाहरण Snackbar के बुनियादी उपयोग और अनुकूलन को दर्शाता है। चरण 1: नया प्रोजेक्ट बनाएं Android Studio में नया प्रोजेक्ट बनाएं। चरण 2: लेआउट XML res/layout/activity_main.xml: <?xml version=1.

  1. Android में NavigationView (नेविगेशन ड्रॉअर) कैसे उपयोग करें? Android में NavigationView (नेविगेशन ड्रॉअर) कैसे उपयोग करें?

    परिचय NavigationView मटेरियल डिज़ाइन का साइड नेविगेशन ड्रॉअर (हैमबर्गर मेनू) है। यह DrawerLayout के अंदर होता है और मेनू आइटम्स, हेडर, और नेविगेशन हैंडलिंग प्रदान करता है। यह ट्यूटोरियल Navigation Components के साथ आधुनिक सेटअप दिखाता है। आवश्यक चरण चरण 1: नया प्रोजेक्ट बनाएं Android Studio में Fi