简体   繁体   English

从URL毕加索加载图像

[英]load image from url picasso

so I've been able to read JSON into my listview but now I'm trying to figure out where to use picasso to read these images from URL. 因此我已经能够将JSON读取到我的列表视图中,但是现在我试图找出在哪里可以使用picasso从URL读取这些图像。

Sample JSON: 样本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 I know I need a code similar to: 我知道我需要类似以下代码的listview屏幕截图

String imageUri = "https://i.imgur.com/tGbaZCY.jpg";
ImageView ivBasicImage = (ImageView) findViewById(R.id.ivBasicImage);
Picasso.with(context).load(imageUri).into(ivBasicImage);

But im not sure where to insert in my APP structure. 但是我不确定在哪里插入我的APP结构。 Here is my MainActivity.java: 这是我的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);

}

} }

Can my hashmap remain how it is? 我的哈希图可以保持现状吗? Or do i need a HashMap?? 还是我需要HashMap? Since im loading this listview all at once, it seems I need to load the images in my for-loop, then once I loadListView() they should be there. 由于我是一次全部加载此listview的,所以看来我需要将图像加载到我的for循环中,然后一旦我将它们加载到ListListView()中,它们就应该在那里。

If you want to add a list view that loads images from URL you should create your custom adapter (example for recycler view custom adapter) that will do that work, instead of the SimpleAdapter that you are using 如果要添加从URL加载图像的列表视图,则应创建可以完成此工作的自定义适配器 (例如回收者视图自定义适配器的示例),而不要使用正在使用的SimpleAdapter

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM