У меня есть список (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>
Извините, я не согласен с этим.