Невозможно установить URL-адрес изображения в адаптере массива списка - PullRequest
1 голос
/ 29 марта 2020

Я использую API для получения списка изображений и не могу установить массив изображений в ListView Array Adapter. Изображение в форме String URL. Пожалуйста, посмотрите код ниже. Что я пробовал.

private void jsonParse() {
        String url = "This is the API URL";

        JsonObjectRequest objectRequest = new JsonObjectRequest(Request.Method.GET, url, null,
                new Response.Listener<JSONObject>() {
                    @Override
                    public void onResponse(JSONObject response) {
                        try {
                            JSONObject photos = response.getJSONObject("photos"); //photos
                            JSONArray jsonArray = photos.getJSONArray("photo"); //photos.photo[0]

                            ImageView[] im = new ImageView[jsonArray.length()];

                            for (int i = 0; i < jsonArray.length(); i++) {
                                JSONObject pics = jsonArray.getJSONObject(i);

                                String id = pics.getString("id");
                                String server = pics.getString("server");
                                String farm = pics.getString("farm");
                                String secret = pics.getString("secret");


                                String URLs = "https://farm" + farm + ".staticflickr.com/" + server + "/" + id + "_" + secret + ".jpg";
                                System.out.println(URLs);
                                // Use Bitmap for converting the String form into Image Format
                                try {
                                    Bitmap bitmap = BitmapFactory.decodeStream((InputStream) new URL(URLs).getContent());
                                    imageView.setImageBitmap(bitmap);

                                } catch (MalformedURLException e) {
                                    e.printStackTrace();
                                } catch (IOException e) {
                                    e.printStackTrace();
                                }

                                im[i] = imageView;

                            }
                            //Below, 'im' is not readable by the ArrayAdapter
                            ArrayAdapter<String> adapter = new ArrayAdapter<String>(MainActivity.this, R.layout.image_layout,im); 
                            listView.setAdapter(adapter);

                        } catch (JSONException e) {
                            e.printStackTrace();
                        }
                    }
                }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                error.printStackTrace();
            }
        });
        requestQueue.add(objectRequest);

    }

ImageView [] 'im' массив не может прочитать ArrayAdapter. Может кто-нибудь помочь мне решить эту проблему?

image_layout. xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <ImageView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/image_id"
        android:contentDescription="DefaultImage"
        android:src="@android:drawable/btn_star_big_on"/>


</LinearLayout>

main_activity. xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:orientation="vertical"
    android:layout_height="match_parent"
    tools:context=".MainActivity"
    android:background="#ffffff">

    <RelativeLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content">

        <Button
            android:id="@+id/button"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginLeft="430px"
            android:text="Click" />
    </RelativeLayout>

    <ListView
        android:padding="50px"
        android:id="@+id/list_view_id"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:visibility="visible"
        tools:visibility="visible" />
</LinearLayout>

Ответы [ 2 ]

0 голосов
/ 29 марта 2020

Здравствуйте, вы должны использовать обновленный android api. Вы находитесь в слишком старой эпохе

вот как обновить ваш проект

  1. сначала используйте RecycelrView вместо listview
  2. для извлечения данных из API-интерфейса сервера используйте Retrofit вместо необработанного API-интерфейса сервера call.it, черт возьми, просто
  3. , а затем используйте адаптер recyclerview, чтобы показать data.its легко и просто.
0 голосов
/ 29 марта 2020

Я порекомендую установить изображение из inte rnet с помощью Glide или Picasso lib

https://github.com/bumptech/glide

Glide.with(this).load(url).into(imageView);

https://square.github.io/picasso/

Picasso.get().load(url).into(imageView);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...