#android #kotlin
#Android #kotlin
Вопрос:
Я пытаюсь получить строку в текстовом представлении моего приложения из обратного вызова retrofit. Я использую пример данных Android JSON и выполняю вызов retrofit для извлечения этих данных в виде строки. По какой-то причине получаю ответ с нулевым значением. 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) }
}
VIEWMODEL:
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
)
Ответ №1:
realestate
это ответ JSON; лучше использовать MoshiConverterFactory
вместо этого.
Комментарии:
1. Я реализовал moshiconverterfactory и свойство. Проблема остается той же. Не могли бы вы проверить мою Деятельность? Он запускается нажатием кнопки в основном действии.