मैं अपने सर्वर पर एक सरल विधि प्राप्त करने जा रहा हूं (यह Rails app है) और RxJava और Retrofit का उपयोग करके परिणाम प्राप्त करें। जो चीज मैंने की वह है:
मेरा इंटरफ़ेस:
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'
}