модернизация возвращает нулевую строку

#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 и свойство. Проблема остается той же. Не могли бы вы проверить мою Деятельность? Он запускается нажатием кнопки в основном действии.