从url picasso加载图片

时间:2018-01-26 22:50:05

标签: android json picasso

所以我已经能够将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()它们应该在那里。

1 个答案:

答案 0 :(得分:0)

如果您想添加一个从URL加载图片的列表视图,您应该创建custom adapter(回收站视图自定义适配器的示例)来完成这项工作,而不是SimpleAdapter。使用

相关问题