【发布时间】:2020-10-01 01:34:04
【问题描述】:
我正在尝试从改造回调中获取我的应用程序的文本视图中的字符串。我正在使用一个 android JSON 数据示例并进行改造调用以将该数据作为字符串检索。由于某种原因得到空值响应。 Gradle 和 Manifest 似乎很好。不幸的是,在相关主题中没有找到答案。将不胜感激。
API:
private const val BASE_URL =
"https://android-kotlin-fun-mars-server.appspot.com/"
private val moshi = Moshi.Builder()
.add(KotlinJsonAdapterFactory())
.build()
private val retrofit = Retrofit.Builder()
.addConverterFactory(MoshiConverterFactory.create(moshi))
.baseUrl(BASE_URL)
.build()
interface WordsApiService {
@GET("realestate")
fun getProperties():
Call<List<MarsProperty>>
}
object WordsApi {
val retrofitService : WordsApiService by lazy {
retrofit.create(WordsApiService::class.java) }
}
视图模型:
class QuizWordListViewModel: ViewModel() {
private var _response = String()
val myWordsAsString
get()=_response
init {
getWordsFromNet()
}
private fun getWordsFromNet():String {
WordsApi.retrofitService.getProperties().enqueue(
object: Callback<List<MarsProperty>> {
override fun onResponse(call: Call<List<MarsProperty>>, response: Response<List<MarsProperty>>) {
_response = "Success: ${response.body()?.size} Words retrieved"
}
override fun onFailure(call: Call<List<MarsProperty>>, t: Throwable) {
_response = "Failure: " + t.message
}
})
return _response
}
}
活动:
class QuizWordListActivity : AppCompatActivity() {
private val viewModel: QuizWordListViewModel
by lazy {ViewModelProvider(this).get(QuizWordListViewModel::class.java) }
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.quiz_word_list_activity)
var testObject:TextView = testObject
testObject.text = viewModel.myWordsAsString
}
}
物业
data class MarsProperty(
val id: String, @Json(name = "img_src") val imgSrcUrl: String,
val type: String,
val price: Double
)
【问题讨论】: