Как преобразовать строку URL изображения в android - PullRequest
0 голосов
/ 15 февраля 2020

У меня есть список (100) URL-адресов изображений, которые я хочу отобразить в ListView вместе с текстом. Проблема, с которой я столкнулся, заключается в том, что мой список отображает все URL-адреса в виде строки, а не ИЗОБРАЖЕНИЯ. Я реализовал класс BITMAP и протестировал его с URL-адресом изображения, и на IMAGEVIEW это сработало. Я прочитал какой-то пост, но не могу понять, как он работает с ListView. Как загрузить ImageView по URL в Android?

В моем коде ниже, imageUrls содержит все URL-адреса изображения в виде строки и concatString содержит текст img +, который использовался в адаптере. Мой вопрос заключается в том, как применить класс BITMAP к STRING, который содержит все URL-адреса, прежде чем помещать его в адаптер, то есть imageUrls ? Или это лучший подход.

Bitmap bitmap;
String temp, json, namesImg, imageUrls, allImageANDnames;
StringBuffer sb = new StringBuffer();
ArrayList<String> concatString = new ArrayList<String>(); // ARRAYLIST THAT HOLDS IMG & TXT
JSONObject object;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_contact);

    // Reading json file from assets folder
    BufferedReader br = null;
    try {
        br = new BufferedReader(new InputStreamReader(getAssets().open(
                "myjson.json")));
        while ((temp = br.readLine()) != null)
            sb.append(temp);

        json = new String(sb);
        JSONArray jsonArray = new JSONArray(json);

        for (int i = 0; i < jsonArray.length(); i++) {
            // Creating JSONObject from JSONArray
            object = jsonArray.getJSONObject(i);
            namesImg = object.getString("name"); // holds all text
            imageUrls = object.getString("url"); // holds all image urls (HERE IS WHERE I NEED HELP)
            allImageANDnames = imageUrls + "\t\t" + namesImg; // holds text and img urls
            concatString.add(allImageANDnames); //(I WANT THIS TO HOLD IMAGES & TEXT) not urls & text
        }

    } catch (IOException e) {
        e.printStackTrace();
    }  catch (JSONException e) {
        e.printStackTrace();
    }finally {
        if ((br != null)) {
            try {
                br.close(); // stop reading
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

    // adapter to show list in activity
    ArrayAdapter<String> adapter = new ArrayAdapter<String>(MainActivity.this,
            android.R.layout.simple_list_item_1, concatString); // I USED THE HOLDER HERE

    ListView list = (ListView) findViewById(R.id.listView);
    list.setAdapter(adapter); // LIST THAT POPULATE THE IMG & TXT
}

    // HOW CAN I APPLY THIS CLASS ON ***imageUrls***
    public class ImageFromUrl extends AsyncTask<String, Void, Bitmap> {
    ImageView imageView;
    public GetImageFromUrl(ImageView img){
        this.imageView = img;
    }
    @Override
    protected Bitmap doInBackground(String... url) {
        String stringUrl = url[0];
        bitmap = null;
        InputStream inputStream;
        try {
            inputStream = new java.net.URL(stringUrl).openStream();
            bitmap = BitmapFactory.decodeStream(inputStream);
        } catch (IOException e) {
            e.printStackTrace();
        }
        return bitmap;
    }
    @Override
    protected void onPostExecute(Bitmap bitmap){
        super.onPostExecute(bitmap);
        imageView.setImageBitmap(bitmap);
    }
}

. xml

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <ListView
        android:id="@+id/listView"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" >
    </ListView>
</androidx.constraintlayout.widget.ConstraintLayout>

Извините, я не согласен с этим.

1 Ответ

0 голосов
/ 15 февраля 2020

Используйте ImageView для показа изображений с изображением реселлера вместо списка.

и решение простое. Используйте библиотеку (например, glide, Picasso и т. Д. c), которая включает URL-адрес в изображение и устанавливает местоположение. Picasso.get() .load(url) .resize(50, 50) .centerCrop() .into(imageView)

Использовать эту библиотеку Пикассо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...