Jsonからの独自アダプターによるListの作成の際にimageがたまにしか表示されない
サーバー(PC)にある画像を取得して、ListViewのimageに表示させたいのですが、
ほんのたまにしか表示出来ません。
権限は宣言済み
サーバー側では200の成功と出ているので接続が失敗したとも考えられません。
どなたかimageを表示させる方法が
お分かりの方がいらっしゃいましたら
教えていただきたいです。宜しくお願いします
case R.id.navigation_notifications:
String strJson = "[{\"id\": takesi, \"n_id\": \"123\", \"time\": 20},{\"id\": hana, \"n_id\": \"234\", \"time\": 21},{\"id\": risa, \"n_id\": \"345\", \"time\": 22}]";
Gson gson = new Gson();
Notification[] notification_array_type = gson.fromJson(strJson,Notification[].class);
final ArrayList<listitem> notification_array = new ArrayList<>();
for(Notification user : notification_array_type) {
listitem noti_item = new listitem("http://192.168.11.11/user_images/" + user.id + ".png",user.id);
Log.i("test","192.168.11.11/user_images/" + user.id + ".png : " + user.id);
notification_array.add(noti_item);
}
// 出力結果をリストビューに表示
ListAdapter noti_adapter = new ListAdapter(MainActivity.this, R.layout.main_item, notification_array);
mListView.setAdapter(noti_adapter);
noti_adapter.notifyDataSetChanged();
return true;
listitem.java
public class listitem {
private Bitmap mThumbnail = null;
private String mTitle = null;
/**
* 空のコンストラクタ
*/
public listitem() {};
/**
* コンストラクタ
* @param image_url サムネイル画像
* @param title タイトル
*/
public listitem(final String image_url, final String title) {
new Thread(new Runnable() {
@Override
public void run() {
try {
// URL設定
URL url = new URL(image_url);
// HTTP接続開始
HttpURLConnection c = (HttpURLConnection) url.openConnection();
c.setRequestMethod("GET");
c.connect();
// ダウンロード開始
InputStream is = c.getInputStream();
mThumbnail = BitmapFactory.decodeStream(is);
c.disconnect();
} catch (IOException e) {
Bitmap bmp = null;
}
}
}).start();
mTitle = title;
}
/**
* サムネイル画像を設定
* @param thumbnail サムネイル画像
*/
public void setThumbnail(Bitmap thumbnail) {
mThumbnail = thumbnail;
}
/**
* タイトルを設定
* @param title タイトル
*/
public void setmTitle(String title) {
mTitle = title;
}
/**
* サムネイル画像を取得
* @return サムネイル画像
*/
public Bitmap getThumbnail() {
return mThumbnail;
}
/**
* タイトルを取得
* @return タイトル
*/
public String getTitle() {
return mTitle;
}
}
ListAdapter.java
public class ListAdapter extends ArrayAdapter<listitem> {
private int mResource;
private List<listitem> mItems;
private LayoutInflater mInflater;
/**
* コンストラクタ
* @param context コンテキスト
* @param resource リソースID
* @param items リストビューの要素
*/
public ListAdapter(Context context, int resource, List<listitem> items) {
super(context, resource, items);
mResource = resource;
mItems = items;
mInflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View view;
if (convertView != null) {
view = convertView;
}
else {
view = mInflater.inflate(mResource, null);
}
// リストビューに表示する要素を取得
listitem item = mItems.get(position);
// サムネイル画像を設定
ImageView thumbnail = (ImageView)view.findViewById(R.id.thumbnail);
thumbnail.setImageBitmap(item.getThumbnail());
// タイトルを設定
TextView title = (TextView)view.findViewById(R.id.title);
title.setText(item.getTitle());
return view;
}
}