Io.reactivex.Observable এর জন্য কল অ্যাডাপ্টার তৈরি করতে অক্ষম


96

আমি আমার সার্ভারে একটি সহজ get পদ্ধতি প্রেরণ করতে যাচ্ছি (এটি রেলস অ্যাপ্লিকেশন) এবং আরএক্সজাভা এবং রেট্রোফিট ব্যবহার করে ফলাফলটি পাব। আমি যে জিনিসটি করেছি তা হ'ল:

আমার ইন্টারফেস:

public interface ApiCall {
    String SERVICE_ENDPOINT = "https://198.50.214.15";
    @GET("/api/post")
    io.reactivex.Observable<Post> getPost();
}

আমার মডেলটি হ'ল:

public class Post
{
    @SerializedName("id")
    private String id;
    @SerializedName("body")
    private String body;
    @SerializedName("title")
    private String title;

    public String getId ()
    {
        return id;
    }


    public String getBody ()
    {
        return body;
    }


    public String getTitle ()
    {
        return title;
    }

}

এবং আমি আমার ক্রিয়াকলাপে এটিই করেছি:

public class Javax extends AppCompatActivity {
    RecyclerView rvListContainer;
    postAdapter postAdapter;
    List<String> messageList=new ArrayList<>();
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_javax);

        rvListContainer=(RecyclerView)findViewById(R.id.recyclerView);
        postAdapter=new postAdapter(messageList);

        rvListContainer.setAdapter(postAdapter);
    }
    @Override
    protected void onResume() {
        super.onResume();
        Retrofit retrofit=new Retrofit.Builder()
                .addCallAdapterFactory(RxJavaCallAdapterFactory.create())
                .addConverterFactory(GsonConverterFactory.create())
                .baseUrl("https://198.50.214.15")
                .build();
        ApiCall apiService=retrofit.create(ApiCall.class);

        Observable<Post> observable=apiService.getPost();

        observable.subscribeOn(Schedulers.newThread())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(responseData -> {
                    messageList.add(responseData.getTitle());
                    postAdapter.notifyDataSetChanged();
                });

    }
}

আমি জানি না কেন আমি এই ত্রুটিটি পাই যা বলে যে অ্যাডাপ্টারে আমার সমস্যা আছে। আমি অ্যাডাপ্টারের গ্রেডের মধ্যেও অন্তর্ভুক্ত করেছি:

E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.hussein.sqlitedatabase, PID: 19445
java.lang.RuntimeException: Unable to resume activity {com.example.hussein.sqlitedatabase/com.example.hussein.sqlitedatabase.Javax}: java.lang.IllegalArgumentException: Unable to create call adapter for io.reactivex.Observable<com.example.hussein.sqlitedatabase.Post>
    for method ApiCall.getPost
    at android.app.ActivityThread.performResumeActivity(ActivityThread.java:2964)
    at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:2993)
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2395)
    at android.app.ActivityThread.access$800(ActivityThread.java:151)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1321)
    at android.os.Handler.dispatchMessage(Handler.java:110)
    at android.os.Looper.loop(Looper.java:193)
    at android.app.ActivityThread.main(ActivityThread.java:5292)
    at java.lang.reflect.Method.invokeNative(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:515)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:824)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:640)
    at dalvik.system.NativeStart.main(Native Method)
 Caused by: java.lang.IllegalArgumentException: Unable to create call adapter for io.reactivex.Observable<com.example.hussein.sqlitedatabase.Post>
    for method ApiCall.getPost
    at retrofit2.ServiceMethod$Builder.methodError(ServiceMethod.java:751)
    at retrofit2.ServiceMethod$Builder.createCallAdapter(ServiceMethod.java:236)
    at retrofit2.ServiceMethod$Builder.build(ServiceMethod.java:161)
    at retrofit2.Retrofit.loadServiceMethod(Retrofit.java:169)
    at retrofit2.Retrofit$1.invoke(Retrofit.java:146)
    at $Proxy0.getPost(Native Method)
    at com.example.hussein.sqlitedatabase.Javax.onResume(Javax.java:42)
    at android.app.Instrumentation.callActivityOnResume(Instrumentation.java:1197)
    at android.app.Activity.performResume(Activity.java:5343)
    at android.app.ActivityThread.performResumeActivity(ActivityThread.java:2950)
        ... 12 more
 Caused by: java.lang.IllegalArgumentException: Could not locate call adapter for io.reactivex.Observable<com.example.hussein.sqlitedatabase.Post>.
  Tried:
   * retrofit2.adapter.rxjava.RxJavaCallAdapterFactory
   * retrofit2.ExecutorCallAdapterFactory
    at retrofit2.Retrofit.nextCallAdapter(Retrofit.java:240)
    at retrofit2.Retrofit.callAdapter(Retrofit.java:204)
    at retrofit2.ServiceMethod$Builder.createCallAdapter(ServiceMethod.java:234)
        ... 20 more

এটি আমার গ্রেডল নির্ভরতা:

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
        exclude group: 'com.android.support', module: 'support-annotations'
    })
    compile 'com.android.support.constraint:constraint-layout:1.0.2'
    compile 'com.android.support:appcompat-v7:25.3.1'
    testCompile 'junit:junit:4.12'

    compile 'com.squareup.retrofit2:retrofit:2.2.0'

    compile 'com.android.support:recyclerview-v7:25.3.1'
    compile 'com.android.support:design:25.3.1'

    compile 'io.reactivex.rxjava2:rxandroid:2.0.1'
    compile 'io.reactivex.rxjava2:rxjava:2.0.1'

    compile 'com.jakewharton.retrofit:retrofit2-rxjava2-adapter:1.0.0'
    compile 'com.squareup.retrofit2:adapter-rxjava:2.0.2'

    compile 'com.squareup.retrofit2:converter-gson:2.0.0'

    compile 'com.google.code.gson:gson:2.4'

}

উত্তর:


223

আপনাকে রেট্রোফিটকে বলতে হবে যে আপনি আরএক্সজেভা 2 ব্যবহার করতে চান:

addCallAdapterFactory(RxJava2CallAdapterFactory.create())

সুতরাং, আপনার Retrofitঅবজেক্ট তৈরি করার জন্য আপনার কাছে এমন কিছু হবে:

Retrofit retrofit = new Retrofit.Builder()
    .baseUrl(SERVICE_ENDPOINT)
    .addCallAdapterFactory(RxJava2CallAdapterFactory.create())
    .build();

ধন্যবাদ তবে আর একটি সমস্যা যা আমি পেয়েছি তা আমার ইউআরএল সম্পর্কে এটি বলে ---> /198.50.214.15:80 সাথে সংযোগ করতে ব্যর্থ
হুসেন ওজাহী

আমি এই .BaseUll (" 198.50.214.15/" ) এ পরিবর্তিত হয়েছি তবে আমি এখনও একই ত্রুটি
পেয়েছি

4
: এখানে RxJava2CallAdapterFactory ভিতরে লাইব্রেরিতে লিঙ্ক github.com/square/retrofit/tree/master/retrofit-adapters/...
চাক

ওহ, ওহ! অনেক ধন্যবাদ.
ভিআইপিপঙ্কজোশারস দ্রুপি

72

আমি একই ইস্যু মধ্যে দৌড়ে। নতুন ভাণ্ডার যুক্ত করার পরিবর্তে আপনি জ্যাক ওয়ার্টনের লাইব্রেরির নির্ভরতা যুক্ত করতে পারেন:

implementation 'com.jakewharton.retrofit:retrofit2-rxjava2-adapter:1.0.0'

তারপরে আপনি কারখানা যুক্ত করতে পারেন:

Retrofit retrofit = new Retrofit.Builder()
    .baseUrl("https://api.example.com")
    .addCallAdapterFactory(RxJava2CallAdapterFactory.create())
    .build();

অ্যাডাপ্টারের সংস্করণ 2 রয়েছে এই সত্যটি এর অর্থ এই নয় যে এটি RxJava 2 এর সাথে ব্যবহারের উদ্দেশ্যে করা হয়েছিল, যেমনটি আমি ভেবেছিলাম।

implementation 'com.squareup.retrofit2:adapter-rxjava2:2.1.0'

@ শক্তিসীহজাদেজা মানুষকে ধন্যবাদ জানায়, আমি আপনার সাহায্যকারী হয়েছি বলে ভাল লাগল
রাউত দর্পণ

7
আপনাকে com.squareup.retrofit2: অ্যাডাপ্টার-আরএক্সজাভা 2 ব্যবহার করতে হবে। লক্ষ্য করুন যে আপনি 2 :) মিস করছেন
ড্রিল করুন

আরএক্সজেভা 2 কলএডাপ্টারফ্যাক্টরি আর ব্যবহার করা হয় না - এখনই আরএক্সজাভা ক্যালএডাপ্টারফ্যাক্টরি সকলকে সমর্থন করে
কনরাড ক্রাকওইয়াক

13

সমস্যাটি লাইব্রেরিটি ব্যবহৃত হচ্ছে।

আমি প্রতিস্থাপন করেছি

implementation 'com.squareup.retrofit2:adapter-rxjava:2.4.0'

সঙ্গে

implementation 'com.squareup.retrofit2:adapter-rxjava2:2.4.0'

এবং ব্যবহৃত

Retrofit retrofit = new Retrofit.Builder()
                .baseUrl(BASE_URL).client(client)
                .addConverterFactory(GsonConverterFactory.create(gson))
                .addCallAdapterFactory(RxJava2CallAdapterFactory.create())
                .build();

আপনার উভয় গ্রেড এন্ট্রি একই?
নাদিম শুকুর

আমি rxjava2: 2.4.0 এর সাথে rxjava: 2.4.0- প্রতিস্থাপন করেছি
অনুদীপ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.