اختلال در Room با Rxjava

پرسیده شده
فعالیت 1237 روز پیش
دیده شده 536 بار
0

سلام خدمت دوستان..

:در حال انجام تمرینی که توی سرفصل بود بودم که موقعی که میخواستم بیلد بگیرم به همچین اروری برخورد میکردم

error: Not sure how to convert a Cursor to this method's return type (io.reactivex.rxjava3.core.Single<java.util.List<com.sevenlearn.todo.model.Task>>).    Single<List<Task>> getAll();

اینهم کدای TaskDao:

@Dao
public interface TaskDao {

    @Insert
    Single<Long> add(Task task);

    @Delete
    Single<Integer> delete(Task task);

    @Update
    Single<Integer> update(Task task);

    @Query("SELECT * FROM tbl_tasks")
    Single<List<Task>> getAll();

    @Query("SELECT * FROM tbl_tasks WHERE title LIKE '%' || :query || '%'")
    Single<List<Task>> search(String query);

    @Query("DELETE FROM tbl_tasks")
    Single<Void> deleteAll();

توی اینترنت سرچی کردم و متوجه شدم باید با استفاده از LiveData این بخش رو پیاده سازی کنم.. با توجه به اینکه من live data رو هنوز یادنگرفتم ایا توی سرفصلای آینده این مبحث تدریس خواهد شد؟

و اینکه اگه امکانش بود استاد بیشتر روی این سرفصل کار میکردن چون بعضی مباحث هنوز گنگه یه جورایی.. و آیا جواب تمرین بعد از آموزش سرفصل های دیگه قرار داده میشه؟

فایل پیوست

2
حذف شده

سلام و احترام

 

livedata  یک dataholder(نگه دارنده دیتا) بوده که در یک سری جاها (بسته به سناریو شما که در تاپیک قبل توضیح دادم قابل استفاده هست)

پس اجباری از استفاده livedata نبوده و شما میتوانید از rxjava استفاده کنید ولیdata holder نیست.

یکی از کاربرد های dataholder بودن این هست که وقتی گوشی rotate میشود دیتای از قبل موجود رو نمایش میدهد.

و همینطور lifecycler aware هست یعنی مثل rxjava لازم نیست disposable رو  dispose کنید .

در سر فصل های اینده(وبینار) در قالب پروژه به خوبی این مبحث مرور خواهد شد و شما به تسلط خواهید رسید.

دلیل ارور شما به احتمال زیاد :

استفاده از rxjava۳ بوده پس لایبرری خودتونو به rxjava۲ تغییر بدید (rx۲ نسبت به rx۳ تغیراتی دارد)

implementation 'io.reactivex.rxjava2:rxandroid:2.1.1'
// Because RxAndroid releases are few and far between, it is recommended you also
// explicitly depend on RxJava's latest version for bug fixes and new features.
// (see https://github.com/ReactiveX/RxJava/releases for latest 2.x.x version)
implementation 'io.reactivex.rxjava2:rxjava:2.x.x'
فایل پیوست

پوریا شفیعی

توسط

پوریا شفیعی

7 آذر 99

1
حذف شده

سلام و احترام

 

نظر من اینه که شما میتونی ReturnType متد های Delete , DeleteAll, Update رو void 

و مقدار برگشتی Add رو Single و متدهای getAll, Search رو Observable قرار بدین ، به این صورت اگر تغییری روی Task ها صورت بگیره ، به دلیل اینکه شما مقدار برگشتی متد getAll رو Observable قرار دادین ، view شما آپدیت خواهد شد .

 

در کنار اینکه شما باید dependency زیر رو به فایل Gradle اضافه کنید 

implementation "androidx.room:room-rxjava2:2.2.5"

با آرزوی موفقیت برای همه

فایل پیوست

Hamidreza Karimi

توسط

Hamidreza Karimi

7 آذر 99