Я использую Retrofit2 для подключения моего android приложения к nodeJs серверу. Вставка данных в MongoDB у меня работает нормально, но когда я пытаюсь получить значения базы данных, отображается ошибка:
Процесс: com.example.transportor, PID: 2880 java .lang.IllegalArgumentException: невозможно создать конвертер для java .util.List
чего-то подобного, что заставляет меня добавить
` // Retrofit & OkHttp
implementation 'com.squareup.retrofit2:retrofit:2.7.1'
// JSON Converter
implementation 'com.squareup.retrofit2:converter-gson:2.7.1'
`
в build.gradle, чтобы попытаться решить эту проблему, но я обнаружил, что converter-gson
работает только для> API26, теперь, когда я использую эмулятор (API 26), новое отображение исключений:
java .lang.RuntimeException: невозможно получить провайдера androidx.lifecycle.ProcessLifecycleOwnerInitializer: java .lang.ClassNotFoundException: не найден класс «androidx.lifecycle.ProcessLifecycleOwnerInitializer" по пути: DexPathList [[zip] [[zip] data / app / com.example.transportor-ChZ6SODKyPbtuq6zCVZRfw == / base.apk "], nativeLibraryDirectories = [/ data / app / com.example.transportor-ChZ6SODKyPbtuq6zCVZRfw == / lib / x86, system / / vendor / lib]] в android .app.ActivityThread.installProvider (ActivityThread. java: 6288) в android .app.ActivityThread.installContentProviders (ActivityThread. java: 5851) в android .app .ActivityThread.handleBindApplication (ActivityThread. java: 5772) в android .app.ActivityThread.-wrap1 (неизвестный источник: 0) в android .app.ActivityThread $ H.handleMessage (ActivityThread. java: 1661 ) в android .os.Handler.dispatchMessage (Обработчик. java: 105) в android .os.Looper.l oop (Looper. java: 164) в android .app.ActivityThread .main (ActivityThread. java: 6541) в java .lang.reflect.Method.invoke (собственный метод) в com. android .internal.os.Zygote $ MethodAndArgsCaller.run (Zygote. java: 240) at com. android .internal.os.ZygoteInit.main (ZygoteInit. java: 767) Причина: java .lang.ClassNotFoundException: не найден класс "androidx.lifecycle.ProcessLifecycleOwnerInitializer" на пути : DexPathList [[zip-файл »/data/app/com.example.transportor-ChZ6SODKyPbtuq6zCVZRfw==/base.apk"],nativeLibraryDirectories=[/data/app/com.examp le.transportor-ChZ6SODKyPbtuq6zCVZRfw == / lib / x86, / system / lib, / vendor / lib]] в dalvik.system.BaseDexClassLoader.findClass (BaseDexClassLoader. java: 93) в java .lang.Classo (ClassLoader. java: 379) в java .lang.ClassLoader.loadClass (ClassLoader. java: 312) в android .app.ActivityThread.installProvider (ActivityThread. java: 6273) в android .app.ActivityThread.installContentProviders (ActivityThread. java: 5851) в android .app.ActivityThread.handleBindApplication (ActivityThread. java: 5772) в android .app.ActivityThread.-wrap1 (Неизвестный источник: 0) в android .app.ActivityThread $ H.handleMessage (ActivityThread. java: 1661) в android .os.Handler.dispatchMessage (Обработчик. java: 105) в android .os.Looper .l oop (Looper. java: 164) в android .app.ActivityThread.main (ActivityThread. java: 6541) в java .lang.reflect.Method.invoke (собственный метод) в com. android .internal.os.Zygote $ MethodAndArgsCaller.run (Zygote. java: 240) на com. android .internal.os.ZygoteInit.main (ZygoteInit. java: 767)
мой код дыры:
IMYServices:
@POST("collect")
@FormUrlEncoded
Observable<String> collect_pt(@Field("creator") String creator,
@Field("date_creation_col") String date_creation_col,
@Field("emailcol") String emailcol,
@Field("nom_col") String nom_col,
@Field("long_col") String long_col,
@Field("lat_col") String lat_col,
@Field("tel_fix_col") String tel_fix_col,
@Field("tel_mobile_col") String tel_mobile_col,
@Field("adress_col") String adress_col,
@Field("heure_matin_col") String heure_matin_col,
@Field("heure_apresmatin_col") String heure_apresmatin_col,
@Field("type") String type,
@Field("imagePath") String imagePath1
);
@POST("collect/get")
@FormUrlEncoded
Call<List<col>> getcollection(@Field("selector") String selector);
RetrofitClient:
public class RetrofitClient {
private static Retrofit instance;
public static Retrofit getInstance(){
if(instance == null){
instance = new Retrofit.Builder()
.baseUrl("http://transportor.ddns.net:3000/")
.addCallAdapterFactory(RxJava2CallAdapterFactory.create())
.addConverterFactory(ScalarsConverterFactory.create()).build();
}
return instance;
}
Main. java:
CompositeDisposable compositeDisposable = new CompositeDisposable();
IMyServices myServices;
///--------In onCreateView-----///
Retrofit retrofitClient = RetrofitClient.getInstance();
myServices = retrofitClient.create(IMyServices.class);
//--------In onMapReady ---------///
getallcollection("all");
//-------- getallcollection method---------//
private void getallcollection(String selector) {
Call<List<col>> call = myServices.getcollection(selector);
call.enqueue(new Callback<List<col>>() {
@Override
public void onResponse(Call<List<col>> call, Response<List<col>> response) {
List<col> colList = response.body();
//String[] colnames = new String[colList.size()];
/*for(int i=0; i< colList.size();i++){
}*/
for ( col c: colList){
Log.d("name : ",c.getNom_col());
}
}
@Override
public void onFailure(Call<List<col>> call, Throwable t) {
Toast.makeText(getActivity(),""+t.getMessage(),Toast.LENGTH_SHORT).show();
}
});
}
извините, ребята, но мне нужна реальная помощь, мне нужно сначала узнать, может ли implementation 'com.squareup.retrofit2:converter-gson:2.7.1'
решить мою первую проблему, и мне нужно знать, есть ли способ заставить ее работать на API 21 и, наконец, если мой код в порядке или нет и способ решить это исключение.