【问题标题】:Fragment having a GridView to show images from url path具有 GridView 以显示来自 url 路径的图像的片段
【发布时间】:2015-01-22 15:03:45
【问题描述】:

我正在尝试制作一个显示图像的gridview,因此它显示gridview 但没有图像,如果单击它框gridview 会弹出链接。我不知道为什么我的图片在 gridview 上丢失了...

这是我的片段类

public class FragmentD extends Fragment {
    public FragmentD(){}
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {

    View rootView = inflater.inflate(R.layout.fragment_d, container, false);

    try {
        EditText main_searchField = (EditText) rootView.findViewById(R.id.editText_search_d);
        String main_search = main_searchField.getText().toString();

        Spinner main_categoryField = (Spinner) rootView.findViewById(R.id.spinner_d);
        String category = main_categoryField.getSelectedItem().toString();

        GridView main_gridviewField = (GridView) rootView.findViewById(R.id.gridView_main);
        main_gridviewField.setAdapter(new MyGridViewAdapter(getActivity()));


        main_gridviewField.setOnItemClickListener(new AdapterView.OnItemClickListener()  {

            public void onItemClick(AdapterView<?> arg0, View view, int position,long arg3) {
                Toast.makeText(getActivity(), MyGridViewConfig.getResim_list().
                        get(position), Toast.LENGTH_SHORT).show();

            }
        });

        if(main_gridviewField.isActivated()){
            ImageView sad_face = (ImageView)getActivity().findViewById(R.id.imageView_main_sadface);
            sad_face.setVisibility(View.INVISIBLE);
            TextView nosuchdata = (TextView)getActivity().findViewById(R.id.textView_main_nodatafound);
            nosuchdata.setVisibility(View.INVISIBLE);
        }


    } catch (Exception e){
        Toast.makeText(getActivity(), "EPIC FAIL", Toast.LENGTH_LONG).show();
    }

    //new search_mainActivity(getActivity()).execute(main_search, category);

    return rootView;
}

}

这是我的适配器

public class MyGridViewAdapter extends BaseAdapter implements ListAdapter {

private Context context;

public MyGridViewAdapter(Context context) {
    super();
    this.context = context;

    MyGridViewConfig.addImageUrls();
}


public int getCount() {
    return MyGridViewConfig.getResim_list().size();

}

public Object getItem(int position) {

    return MyGridViewConfig.getResim_list().get(position);
}


public long getItemId(int position) {

    return position;
}

public View getView(int position, View convertView, ViewGroup parent) {
    ImageView imageView;
    if(convertView==null)
    {
        imageView=new ImageView(context);
        imageView.setLayoutParams(new GridView.LayoutParams(100,100));
        imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
        imageView.setPadding(5,5,5,5);
    }else{
        imageView=(ImageView)convertView;

    }

    imageView.setImageDrawable(LoadImageFromURL(MyGridViewConfig.
            getResim_list().get(position)));
    return imageView;
}

private Drawable LoadImageFromURL(String url)

{
    try
    {
        InputStream is = (InputStream) new URL(url).getContent();
        Drawable d = Drawable.createFromStream(is, "src");
        return d;
    }catch (Exception e) {
        System.out.println(e);

        return null;
    }
}
}

这是我的配置 java

public class MyGridViewConfig {

private static ArrayList<String> resim_list=new ArrayList<String>();

public static ArrayList<String> getResim_list() {
    return resim_list;

}

public static void setResim_list(ArrayList<String> resim_list) {
    MyGridViewConfig.resim_list = resim_list;
}
public static void addImageUrls(){
    //  Here you have to specify your image url path

    resim_list.add("http://fc08.deviantart.net/fs71/f/2010/319/d/6/neko_chibi__s_by_alykun17-d32y2v5.jpg");
    resim_list.add("http://fc08.deviantart.net/fs71/f/2010/319/d/6/neko_chibi__s_by_alykun17-d32y2v5.jpg");
    resim_list.add("http://fc08.deviantart.net/fs71/f/2010/319/d/6/neko_chibi__s_by_alykun17-d32y2v5.jpg");
    resim_list.add("http://fc08.deviantart.net/fs71/f/2010/319/d/6/neko_chibi__s_by_alykun17-d32y2v5.jpg");
    resim_list.add("http://fc08.deviantart.net/fs71/f/2010/319/d/6/neko_chibi__s_by_alykun17-d32y2v5.jpg");
    resim_list.add("http://fc08.deviantart.net/fs71/f/2010/319/d/6/neko_chibi__s_by_alykun17-d32y2v5.jpg");

}
}

【问题讨论】:

    标签: java javascript android gridview android-fragments


    【解决方案1】:

    您无法在主 UI 线程上下载图像,因此请在 AsyncTask 中进行。创建这个类:

    class LoadImageTask extends AsyncTask<String, Void, Drawable > {
        public LoadImageTask(ImageView iv)
        {
            imageView = iv;
        }
        ImageView imageView;
        protected Drawable doInBackground(String... urls) {
            try {
                URLConnection connection = new URL(urls[0]).openConnection();
                connection.connect();
                InputStream is = (InputStream) connection.getContent();
                Drawable d = Drawable.createFromStream(is, "src");
                return d;
            } catch (Exception e) {
                // e.printStackTrace();
                return null;
            }
        }
    
        protected void onPostExecute(Drawable drawable) {
            if(drawable != null)
                imageView.setImageDrawable(drawable);
        }
    }
    

    然后更改您的 getView() 函数以使用 AsyncTask 而不是 LoadImageFromURL:

    // imageView.setImageDrawable(LoadImageFromURL(MyGridViewConfig.
    //        getResim_list().get(position)));
    new LoadImageTask(imageView).execute(MyGridViewConfig.getResim_list().get(position));
    

    【讨论】:

    • 您需要将图像加载移动到 AsyncTask - 请参阅编辑
    • 它需要 android lvl 16 im 使用 lvl 14
    • 更改 imageView.setBackground(drawable); to imageView.setImageDrawable(drawable);
    • 我尝试在您的 .setBackground 上使用 .setImageDrawable 无效
    • 看来我需要用别的东西重新做一遍
    【解决方案2】:

    您是否设置了 android.permission.INTERNET 权限?

    【讨论】:

    • 您需要在项目文件中添加权限。它是 AndroidManifest.xml。
    • 像这样:
    • 我试过但还是一样没有图像,我添加了 schemas.android.com/apk/res/android" package="com.serverbase" > <....> 我就是这样做的
    • 真的吗?我测试你的代码,当我添加权限时它可以工作。您确定您的图片网址 (fc08.deviantart.net/fs71/f/2010/319/d/6/…) 有效吗?
    猜你喜欢
    • 2018-12-11
    • 1970-01-01
    • 1970-01-01
    • 2022-06-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多