Ошибка при отправке POST при модернизации и непредвиденная ошибка JDWP: 103 - PullRequest
0 голосов
/ 26 сентября 2019

когда я пытаюсь вызвать saveEvent в EventViewModel.kt, всегда получаю onRetrievePostListSuccess (результат) и никогда не ошибаюсь, но запись никогда не вставляется в базу данных (ранее я проверял APi event / insertEvent от Postman и работал хорошо).Почему я не ошибся?Также, когда я попытался позвонить val response = eventApi.insertEvent("name","place"), я получил неожиданную ошибку JDWP: 103

Что я делаю неправильно?

Я использую инъекцию Dagger2

Я видел подобную проблему в stackoverflow, но кто-то просто забыл о addCallAdapterFactory.

Мои файлы ниже:

EventViewModel.kt

class EventViewModel : BaseViewModel()  {
    @Inject
    lateinit var eventApi: EventApi

val errorMessage: MutableLiveData<String> = MutableLiveData()



override fun onCleared() {
    super.onCleared()
    subscription.dispose()
}


private lateinit var subscription: Disposable

fun saveEvent(){
    subscription = Single.just { eventApi.insertEvent("name","place") }
        .subscribeOn(Schedulers.io())
        .observeOn(AndroidSchedulers.mainThread())
        .doOnSubscribe {
            onRetrievePostListStart(it) }
        .doOnTerminate {onRetrievePostListFinish() }
        .subscribe(
            { result -> onRetrievePostListSuccess(result) },
            { error -> onRetrievePostListError(error) }
        )

}

ViewModelInjector.kt

    @Singleton
@Component(modules = [(NetworkModule::class)])
interface ViewModelInjector {

    fun inject(eventViewModel: EventViewModel)

    @Component.Builder
    interface Builder {
        fun build(): ViewModelInjector

        fun networkModule(networkModule: NetworkModule): Builder
    }
}

NetworkModule.kt

@Module
@Suppress("unused")
object NetworkModule {



@Provides
@Reusable
@JvmStatic
internal fun provideEventApi(retrofit: Retrofit): EventApi {
    return retrofit.create(EventApi::class.java)
}


@Provides
@Reusable
@JvmStatic
internal fun provideRetrofitInterface(): Retrofit {
    return Retrofit.Builder()
        .baseUrl(BASE_URL)
        .addConverterFactory(GsonConverterFactory.create())
        .addCallAdapterFactory(RxJava2CallAdapterFactory.createWithScheduler(Schedulers.io()))
        .build()
}
}

BaseViewModel.kt

abstract class BaseViewModel:ViewModel(){
private val injector: ViewModelInjector = DaggerViewModelInjector
    .builder()
    .networkModule(NetworkModule)
    .build()

init {
    inject()
}

/**
 * Injects the required dependencies
 */
private fun inject() {
    when (this) {
        is EventViewModel -> injector.inject(this)
    }
}
}

EventApi.kt

interface EventApi{

@FormUrlEncoded
@POST("v1/event/insertEvent")
fun insertEvent(@Field("name") name: String, @Field("place") place: String) : Single<ErrorResponse>
}

ViewModelFactory.kt

class ViewModelFactory(private val activity: Activity): ViewModelProvider.Factory{
    override fun <T : ViewModel?> create(modelClass: Class<T>): T {

         if(modelClass.isAssignableFrom(EventViewModel::class.java)){
            val key = "EventViewModel"
            if(hashMapViewModel.containsKey(key)){
                return getViewModel(key) as T
            } else {
                addViewModel(key, EventViewModel())
                return getViewModel(key) as T
            }
        }
        throw IllegalArgumentException("Unknown ViewModel class")

    }


    companion object {
        val hashMapViewModel = HashMap<String, ViewModel>()
        fun addViewModel(key: String, viewModel: ViewModel){
            hashMapViewModel.put(key, viewModel)
        }
        fun getViewModel(key: String): ViewModel? {
            return hashMapViewModel[key]
        }
    }
}
...