【问题标题】:Load Images in Picasso from Json从 Json 加载 Picasso 中的图像
【发布时间】:2015-08-06 20:00:30
【问题描述】:

您好,我想使用 Json 在 Picasso 中加载图像库我该如何实现?我搜索了很多次,但我找到的教程要么是本地图像,要么是在代码中使用 URL 不是 JSON 请帮助!

这是我的代码,但它使用本地图像:

MainActivity(图像加载到 GridView

import android.app.Activity;
        import android.content.Context;
        import android.content.Intent;
        import android.os.Bundle;
        import android.view.View;
        import android.view.ViewGroup;
        import android.widget.AdapterView;
        import android.widget.BaseAdapter;
        import android.widget.GridView;
        import android.widget.ImageView;

        import com.squareup.picasso.Picasso;

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        GridView gridview = (GridView) findViewById(R.id.gridview);
        gridview.setAdapter(new ImageAdapter(this));

        gridview.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                Intent intent = new Intent(MainActivity.this, ActivityTwo.class);
                intent.putExtra("position", position);
                startActivity(intent);
            }
        });
    }

    //    our custom adapter
    private class ImageAdapter extends BaseAdapter {
        private Context mContext;

        public ImageAdapter(Context context) {
            mContext = context;
        }

        @Override
        public int getCount() {
            return mThumbIds.length;
        }

        @Override
        public Object getItem(int position) {
            return null;
        }

        @Override
        public long getItemId(int position) {
            return 0;
        }

        @Override
        public View getView(int position, View convertView,
                            ViewGroup parent) {
            ImageView imageView;
//            check to see if we have a view
            if (convertView == null) {
//                no view - so create a new one
                imageView = new ImageView(mContext);
            } else {
//                use the recycled view object
                imageView = (ImageView) convertView;
            }

//            Picasso.with(MainActivity.this).setDebugging(true);
            Picasso.with(MainActivity.this)
                    .load(mThumbIds[position])
                    .placeholder(R.raw.place_holder)
                    .error(R.raw.big_problem)
                    .noFade().resize(150, 150)
                    .centerCrop()
                    .into(imageView);
            return imageView;
        }
    }

    static Integer[] mThumbIds = {R.raw.amazed, R.raw.angelic,
            R.raw.cool, R.raw.crying, R.raw.devil,
            R.raw.laughing, R.raw.loving, R.raw.question,
            R.raw.sad, R.raw.silence, R.raw.simple, R.raw.sleeping,
            R.raw.smiling, R.raw.tongue, R.raw.winking, R.raw.worried,
            R.raw.amazed, R.raw.angelic, R.raw.cool, R.raw.crying,
            R.raw.devil, R.raw.laughing, R.raw.loving, R.raw.question,
            R.raw.sad, R.raw.silence, R.raw.simple, R.raw.sleeping,
            R.raw.smiling, R.raw.tongue, R.raw.winking, R.raw.worried};
}

当点击图片时 ActivityTwo 处理请求并将点击的图片加载到 ImageView 这是代码:

import android.app.Activity;
import android.os.Bundle;
import android.widget.ImageView;

import com.squareup.picasso.Picasso;

public class ActivityTwo extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_two);

        ImageView imageView = (ImageView) findViewById(R.id.imageView);

        int position = getIntent().getIntExtra("position", -1);
        if (position != -1) {
            Picasso.with(ActivityTwo.this)
                    .load(MainActivity.mThumbIds[position])
                    .placeholder(R.raw.place_holder)
                    .noFade()
                    .resize(800, 800)
                    .centerCrop()
                    .error(R.raw.big_problem)
                    .into(imageView);
        } else {
            Picasso.with(ActivityTwo.this)
                    .load(R.raw.big_problem)
                    .noFade()
                    .resize(800, 800)
                    .centerCrop()
                    .into(imageView);
        }
    }
}

我是android新手,如果你能写一个代码来解决这个问题,请告诉我应该把它放在哪里

【问题讨论】:

  • 您的 json 可能包含图像的 URL。解析 json 并获取 URL,以便您可以将其提供给 Picasso
  • 向我们展示json的结构,以便我们帮助您解析成一个url
  • @MirianaItani 这是我的 json 结构,你能帮帮我吗? { "Assassins": [ { "link": "www.apadanadev.ir/development/game_wallpaper/img/1385140.jpg" } }, { "link": "www.apadanadev.ir/development/game_wallpaper/img/1403485.jpg" } }, { "link":"www.apadanadev.ir/development/game_wallpaper/img/1480444.jpg" } } ] }
  • @DEON 请检查​​我的回答,如果您需要任何帮助或不清楚的地方,请告诉我。

标签: android json gridview imageview picasso


【解决方案1】:

现在你要做的就是:

{ "Assassins": [ { "link": "www.apadanadev.ir/development/game_wallpaper/img/1385140.jpg" } }, { "link": "www.apadanadev.ir/development/game_wallpaper/img/1403485.jpg" } }, { "link":"www.apadanadev.ir/development/game_wallpaper/img/1480444.jpg" } } ] }

你有一个 jsonarray 的 json 对象: 让我们说出数组 urlArray 的名称:

List<String> urls= new ArrayList<>();
for(int i=0;i<urlArray.length();i++){
try{
    JSONObject o = urlArray.getJSONObject(i);
    urls.add(o.get("link").toString);
 }
   catch(Exception e){}
}

然后您返回 url,在这里您有一个可以传递给适配器的字符串列表。 在适配器中,您将它们传递给毕加索

【讨论】:

  • 谢谢,但我应该把你的代码放在哪里?我只是复制/粘贴您的代码,但“urlArray”是红色的!您的代码是否解析 json?我把我的 Json 链接放在哪里?我是 Android 新手,我对 JSON 一无所知,您能帮帮我吗?请给我完整的代码好吗?
  • @MirianaIteni 如何将网址返回到适配器和毕加索?
猜你喜欢
  • 2019-07-27
  • 2016-10-31
  • 1970-01-01
  • 2018-06-27
  • 2020-08-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-24
相关资源
最近更新 更多