изображение из JSON в Котлин

#android #json #kotlin #resources

Вопрос:

Список JSON всегда содержит одно из двух имен изображений (одно.png или два.png). Пожалуйста, объясните, как сделать так, чтобы это изображение появилось в приложении (в проекте эти два изображения уже находятся в src main res mipmap-hdpi).

Файл Json выглядит следующим образом:

{"Api":[{"Info":"Random text","Img":"one.png","Desc":"Alarm","TimeStamp":1626010201}]}

проект для Котлина, я только начинаю его изучать.

На php что-то подобное я бы написал:

 $onepng = sichomeresmipmap-hdione.png; // path in the project to 'one.png'
$twopng = sichomeresmipmap-hditwo.png; // path in the project to 'two.png'
$ImgOneTwo = (JSON IMG == one.png) ? $onepng : $twopng;```


In layout:
    ```<ImageView
        android:layout_width="25dp"
        android:layout_height="25dp"
        android:id="@ id/ImgOneTwo"
        android:src="@mipmap/one">
    </ImageView>```
 

Комментарии:

1. Ваш вопрос о разборе JSON или о том, как использовать просмотр изображений? Нам нужно знать, на чем конкретно вы застряли, чтобы иметь возможность ответить на этот вопрос, не просто цитируя полную документацию. Спасибо.

2. Вы также можете подумать о том, чтобы пометить свой вопрос android . Похоже, это действительно больше связано с Android, чем с Kotlin или JSON.

3. В PHP что-то вроде этого я бы написал: $onepng = sichomeresmipmap-hdione.png; // path in the project to 'one.png' $twopng = sichomeresmipmap-hditwo.png; // path in the project to 'two.png' $ImgOneTwo = (JSON IMG == one.png) ? $onepng : $twopng; в макете: « <ImageView android:layout_width=»25dp» android:layout_height=»25dp» android:id=»@ id/ImgOneTwo» android:src=»@mipmap/one»> </ImageView>«

Ответ №1:

Вы можете показать соответствующее изображение после получения ответа от api с помощью операторов if-else. Предполагая, что вы используете модернизацию для получения JSONArray, вы можете сделать это следующим образом:

 val retrofitBuilder = Retrofit.Builder()
        .baseUrl(BASE_URL)
        .addConverterFactory(GsonConverterFactory.create())
        .build()
        .create(YourApiInterface::class.java)

    val retrofitData = retrofitBuilder.getJSONArray()
    retrofitData.enqueue(object : Callback<ApiResponse?> {
        override fun onResponse(
            call: Call<ApiResponse?>,
            response: Response<ApiResponse?>
        ) {
            if (response.body()!!.api[0].Img == "one.png") {
                imageView.setImageResource(R.drawable.one)
            } else {
                imageView.setImageResource(R.drawable.two)
            }

        }

        override fun onFailure(call: Call<ApiResponse?>, t: Throwable) {
            Log.v("Ret fail", t.message.toString())
        }
    })