所以我已经能够将JSON读入我的列表视图,但现在我试图找出使用picasso从URL读取这些图像的位置。
示例JSON:
"results":
{
"name": "Luke Skywalker",
"height": "172",
"mass": "77",
"hair_color": "blond",
"skin_color": "fair",
"eye_color": "blue",
"birth_year": "19BBY",
"gender": "male",
"image": "https://loremflickr.com/320/240?lock=1"
},
{
"name": "C-3PO",
"height": "167",
"mass": "75",
"hair_color": "n/a",
"skin_color": "gold",
"eye_color": "yellow",
"birth_year": "112BBY",
"gender": "n/a",
"image": "https://loremflickr.com/320/240?lock=2"
},
Screenshot of listview 我知道我需要一个类似的代码:
String imageUri = "https://i.imgur.com/tGbaZCY.jpg";
ImageView ivBasicImage = (ImageView) findViewById(R.id.ivBasicImage);
Picasso.with(context).load(imageUri).into(ivBasicImage);
但我不确定在我的APP结构中插入的位置。 这是我的MainActivity.java:
public class MainActivity extends AppCompatActivity implements LoadJSONTask.Listener, AdapterView.OnItemClickListener {
private ListView mListView;
public static final String URL = "http://public.duethealth.com/api/project.json";
private List<HashMap<String, String>> mAndroidMapList = new ArrayList<>();
private static final String KEY_NAME = "name";
private static final String KEY_HT = "height";
private static final String KEY_MASS = "mass";
private static final String KEY_HAIR = "hair_color";
private static final String KEY_SKIN = "skin_color";
private static final String KEY_EYE = "eye_color";
private static final String KEY_BIRTH = "birth_year";
private static final String KEY_GEN = "gender";
private static final String KEY_IMAGE = "image";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mListView = (ListView) findViewById(R.id.list_view);
mListView.setOnItemClickListener(this);
new LoadJSONTask(this).execute(URL);
}
@Override
public void onLoaded(List<StarWar> androidList) {
for (StarWar android : androidList) {
HashMap<String, String> map = new HashMap<>();
map.put(KEY_NAME, android.getName());
map.put(KEY_HT, android.getHeight());
map.put(KEY_MASS, android.getMass());
map.put(KEY_HAIR, android.getHair_color());
map.put(KEY_SKIN, android.getSkin_color());
map.put(KEY_EYE, android.getEye_color());
map.put(KEY_BIRTH, android.getBirth_year());
map.put(KEY_GEN, android.getGender());
map.put(KEY_IMAGE,android.getImage());
mAndroidMapList.add(map);
}
loadListView();
}
@Override
public void onError() {
Toast.makeText(this, "Error !", Toast.LENGTH_SHORT).show();
}
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
Toast.makeText(this, mAndroidMapList.get(i).get(KEY_NAME),Toast.LENGTH_LONG).show();
}
private void loadListView() {
ListAdapter adapter = new SimpleAdapter(MainActivity.this, mAndroidMapList, R.layout.list_item,
new String[] { KEY_NAME, KEY_HT, KEY_MASS, KEY_HAIR,KEY_SKIN,KEY_EYE,KEY_BIRTH,KEY_GEN,KEY_IMAGE },
new int[] { R.id.name,R.id.height, R.id.mass, R.id.hair,R.id.skin,R.id.eye,R.id.birth,R.id.gender,R.id.image});
mListView.setAdapter(adapter);
}
}
我的hashmap能保持原样吗?或者我需要一个HashMap?因为即时加载这个列表视图,似乎我需要在我的for循环中加载图像,然后一旦我loadListView()它们应该在那里。
答案 0 :(得分:0)
如果您想添加一个从URL加载图片的列表视图,您应该创建custom adapter(回收站视图自定义适配器的示例)来完成这项工作,而不是SimpleAdapter
。使用