【发布时间】:2019-10-22 05:39:28
【问题描述】:
我想使用改造添加自签名证书,因为我需要传递上下文但在通过 MVC 模型传递上下文时遇到一些问题
改造客户端
object RetrofitClient {
fun call(context: Context): Webservice {
val webservice by lazy {
Retrofit.Builder()
// .baseUrl("http://68.183.183.255:8080")
//.baseUrl("http://my-json-server.typicode.com")
.baseUrl("https://54roh005p5.execute-api.us-west-2.amazonaws.com/mdv/cloud/login/")
.addConverterFactory(GsonConverterFactory.create(GsonBuilder().create()))
.addConverterFactory(ScalarsConverterFactory.create())
.client(SelfSigningClientBuilder.createClient(context))
.build().create(Webservice::class.java)
}
return webservice
}
}
存储库
class TodoRepository(context:Context) {
private var client:Webservice = RetrofitClient.call(context)
//suspend fun getTodo(id: String) = client.getTodo(id)
suspend fun getTodo(id: User) = client.getTodo(id)
}
视图模型
class NetworkViewModel(context: Context) : ViewModel() {
var repository: TodoRepository = TodoRepository(context)
fun getTodo(arg : User):LiveData<Response<com.example.myapplication.entity.UserData>> {
val result = liveData(Dispatchers.IO) {
val retrivedTodo = repository.getTodo(arg)
emit(retrivedTodo)
}
return result
}
}
主活动
networkViewModel=ViewModelProviders.of(this).get(NetworkViewModel(this)::class.java)
报错
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.myapplication/com.example.myapplication.MainActivity}: java.lang.RuntimeException: Cannot create an instance of class com.example.myapplication.network.NetworkViewModel
我做错了什么。如果有更好的方法请推荐
【问题讨论】:
-
为什么要将上下文传递给每个类?只需创建一个应用程序类并从那里获取上下文
-
我试过它给我错误 MyApp.getContext() must not be null
-
添加您的 MyApp 代码。我会更新
-
类 MainApplication : Application() { init { instance = this } 伴随对象 { private var instance: MainApplication? = null fun applicationContext() : Context { return instance!!.applicationContext } } 覆盖 fun onCreate() { super.onCreate() val context: Context = MainApplication.applicationContext() } }
-
类 MainApplication : Application() { 伴侣对象 { private lateinit var instance: MainApplication fun applicationContext() : Context { return instance.applicationContext } } override fun onCreate() { super.onCreate() instance =这个 } }
标签: android ssl kotlin retrofit2