图片网址在网格中未显示

3
我已经为图像URL设置了一个网格视图。我无法在网格中看到图像,只显示背景。在单击网格时,它会在下一个屏幕中播放。
请问我哪里做错了?如何实现这个功能?
非常感谢您的帮助。
我的代码:
    public class act extends Activity {
static  String uri1="https://i3.ytimg.com/vi/bQaWsVQSLdY/default.jpg";
static String uri2="https://i4.ytimg.com/vi/cJQCniWQdno/mqdefault.jpg";
static String uri3="https://i1.ytimg.com/vi/D8dA4pE5hEY/mqdefault.jpg";
public static String[] urls={uri1,uri2,uri3};
public Bitmap bitmap;
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    GridView grd=(GridView)findViewById(R.id.gridView1);
    grd.setAdapter(new ImageAdapter(this));
    grd.setOnItemClickListener(new OnItemClickListener()
    {
    public void onItemClick(AdapterView<?> parent,View v,int pos,long id)
    {
        Toast.makeText(getBaseContext(),"pic"+(pos+1)+"select ",Toast.LENGTH_SHORT).show();
    }
    });
}
public class ImageAdapter extends BaseAdapter
{
    private Context context;
    private int itemBackground;
    ImageAdapter(Context c)
    {
    context=c;
    TypedArray a=obtainStyledAttributes(R.styleable.Gallery1);
    itemBackground=a.getResourceId(R.styleable.Gallery1_android_galleryItemBackground,0);
    a.recycle();
    }
    public int getCount()
    {
        return urls.length;
    }
    public Object getItem(int pos)
    {
        return pos;
    }
    public long getItemId(int pos)
    {
        return pos;
    }
    public View getView(int pos,View cv,ViewGroup vg)
    {
Bitmap bitmap=  DownloadImage( urls[pos] );
ImageView imageview=new ImageView(context);
imageview.setImageBitmap(bitmap);
return cv;    
    }
private Bitmap DownloadImage(String URL)
    {        
        final String URL1=URL;       
        new Thread()
        {
            public void run()
            {               
                InputStream in = null;  
                Message msg = Message.obtain();
                msg.what = 1;
                try {
                    in = OpenHttpConnection(URL1);
                    Bitmap bitmap = BitmapFactory.decodeStream(in);     
                    Bundle b = new Bundle();
                    b.putParcelable("bitmap", bitmap);
                    msg.setData(b);
                    in.close();
                } catch (IOException e1) {
                    // TODO Auto-generated catch block
                    e1.printStackTrace();
                }
            }
        }.start();
        return bitmap;
    }
    private InputStream OpenHttpConnection(String urlString)
            throws IOException
            {
                InputStream in = null;
                int response = -1;
                URL url = new URL(urlString);
                URLConnection conn = url.openConnection();
                if (!(conn instanceof HttpURLConnection))                    
                    throw new IOException("Not an HTTP connection");
                try{
                    HttpURLConnection httpConn = (HttpURLConnection) conn;
                    httpConn.setAllowUserInteraction(false);
                    httpConn.setInstanceFollowRedirects(true);
                    httpConn.setRequestMethod("GET");
                    httpConn.connect();
                    response = httpConn.getResponseCode();                
                    if (response == HttpURLConnection.HTTP_OK) 
                    {
                        in = httpConn.getInputStream();                                
                    }                    
                }
                catch (Exception ex)
                {
                    throw new IOException("Error connecting");            
                }
                return in;    
    }
}
}

日志记录器

     E/AndroidRuntime(832): java.lang.NullPointerException
       E/AndroidRuntime(832):   at android.widget.GridView.onMeasure(GridView.java:937)
        E/AndroidRuntime(832):  at android.view.View.measure(View.java:8313)
       E/AndroidRuntime(832):   at 
       android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:3138)
       E/AndroidRuntime(832):   at 
       android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1017)
        E/AndroidRuntime(832):  at 
        android.widget.LinearLayout.measureVertical(LinearLayout.java:386)
         E/AndroidRuntime(832):     at 
        android.widget.LinearLayout.onMeasure(LinearLayout.java:309)
         E/AndroidRuntime(832):     at android.view.View.measure(View.java:8313)
         E/AndroidRuntime(832):     at 
         android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:3138)
          E/AndroidRuntime(832):    at android.widget.FrameLayout.onMeasure(FrameLayout.java:250)
         E/AndroidRuntime(832):     at android.view.View.measure(View.java:8313)
         E/AndroidRuntime(832):     at 
          android.widget.LinearLayout.measureVertical(LinearLayout.java:531)
          E/AndroidRuntime(832):    at 
          android.widget.LinearLayout.onMeasure(LinearLayout.java:309)
          E/AndroidRuntime(832):    at android.view.View.measure(View.java:8313)
          E/AndroidRuntime(832):    at 
          android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:3138)
          E/AndroidRuntime(832):    at android.widget.FrameLayout.onMeasure(FrameLayout.java:250)
          E/AndroidRuntime(832):    at android.view.View.measure(View.java:8313)
          E/AndroidRuntime(832):    at android.view.ViewRoot.performTraversals(ViewRoot.java:839)
          E/AndroidRuntime(832):    at android.view.ViewRoot.handleMessage(ViewRoot.java:1859)
          E/AndroidRuntime(832):    at android.os.Handler.dispatchMessage(Handler.java:99)
           E/AndroidRuntime(832):   at android.os.Looper.loop(Looper.java:123)
           E/AndroidRuntime(832):   at android.app.ActivityThread.main(ActivityThread.java:3683)
           E/AndroidRuntime(832):   at java.lang.reflect.Method.invokeNative(Native Method)
           E/AndroidRuntime(832):   at java.lang.reflect.Method.invoke(Method.java:507)
           E/AndroidRuntime(832):   at 
           com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
            E/AndroidRuntime(832):  at 
           com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
            E/AndroidRuntime(832):  at dalvik.system.NativeStart.main(Native Method)

我的输出结果就像这样...请看截图。 - Make it Simple
1
你需要从服务器下载这些图片,然后在网格视图中显示。https://dev59.com/Y3RB5IYBdhLWcg3wtZMV#3068012 - Dhaval Parmar
我的代码能否正常工作?我犯了什么错误? - Make it Simple
3个回答

2
尝试将您的getView()替换为以下内容,并告诉我结果:
public class ImageAdapter extends BaseAdapter
{
    private Context context;
    private int itemBackground;
    public ImageLoader imageLoader; 

    ImageAdapter(Context c)
    {
    context=c;
    TypedArray a=obtainStyledAttributes(R.styleable.Gallery1);
    itemBackground=a.getResourceId(R.styleable.Gallery1_android_galleryItemBackground,0);
    a.recycle();
    imageLoader=new ImageLoader(context);
    }
    public int getCount()
    {
        return urls.length;
    }
    public Object getItem(int pos)
    {
        return pos;
    }
    public long getItemId(int pos)
    {
        return pos;
    }
      public View getView(int position, View convertView, ViewGroup parent)
    {
       ImageView imageView;
             if (convertView == null) {
               imageView = new ImageView(context);
               imageView.setLayoutParams(new GridView.LayoutParams(85, 85));
               imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
               imageView.setPadding(2, 2, 2, 2);
    } else {
             imageView = (ImageView) convertView;
    }

       imageLoader.DisplayImage(urls[position], imageView)
       return imageView;
    }

}

1

这是我尝试过的代码...图片正在显示...您可以根据需要自定义网格视图。您只需将以下代码复制并粘贴到您的活动中,然后尝试即可。

public class MainActivity extends Activity {

    static  String uri1="http://i3.ytimg.com/vi/bQaWsVQSLdY/default.jpg";
    static String uri2="http://i4.ytimg.com/vi/cJQCniWQdno/mqdefault.jpg";
    static String uri3="http://i1.ytimg.com/vi/D8dA4pE5hEY/mqdefault.jpg";
    public static String[] urls={uri1,uri2,uri3};
//  public Bitmap bitmap;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        GridView grd=(GridView)findViewById(R.id.gridview1);
        grd.setAdapter(new ImageAdapter(this));


    }
    public class ImageAdapter extends BaseAdapter
    {
        private Context context;
        private int itemBackground;
        ImageAdapter(Context c)
        {
        context=c;    
        }
        public int getCount()
        {
            return urls.length;
        }
        public Object getItem(int pos)
        {
            return pos;
        }
        public long getItemId(int pos)
        {
            return pos;
        }

    private Bitmap DownloadImage(String URL)
        {        
             String URL1=URL; 
             Bitmap bitmap = null;
//          new Thread()
//          {
//              public void run()
//              {               
                    InputStream in = null;  
                    Message msg = Message.obtain();
                    msg.what = 1;
                    try {
                        in = OpenHttpConnection(URL1);
                        bitmap = BitmapFactory.decodeStream(in);     
                        Bundle b = new Bundle();
                        b.putParcelable("bitmap", bitmap);
                        msg.setData(b);
                        in.close();
                    } catch (IOException e1) {
                        // TODO Auto-generated catch block
                        e1.printStackTrace();
                    }
//              }
//          }.start();
            return bitmap;
        }
        private InputStream OpenHttpConnection(String urlString)
                throws IOException
                {
//          System.out.println("Insdie conn");
                    InputStream in = null;
                    int response = -1;
                    URL url = new URL(urlString);
                    URLConnection conn = url.openConnection();
                    if (!(conn instanceof HttpURLConnection))                    
                        throw new IOException("Not an HTTP connection");
                    try{
//                      System.out.println("Inside try");
                        HttpURLConnection httpConn = (HttpURLConnection) conn;
                        httpConn.setAllowUserInteraction(false);
                        httpConn.setInstanceFollowRedirects(true);
//                      httpConn.setRequestMethod("GET");
                        httpConn.connect();
                        response = httpConn.getResponseCode();  
//                      System.out.println("res="+response);
//                      System.out.println("cccccc="+HttpURLConnection.HTTP_OK);
                        if (response == HttpURLConnection.HTTP_OK) 
                        {
//                          System.out.println("Inside if");
                            in = httpConn.getInputStream();                                
                        }                    
                    }
                    catch (Exception ex)
                    {
                        throw new IOException("Error connecting");            
                    }
                    return in;    
        }
        @Override
        public View getView(int position, View cv, ViewGroup parent) 
        {
            ImageView imageview = null;
//          System.out.println("vvvv="+urls[position]);
            Bitmap bitmap=  DownloadImage( urls[position] );        
            // TODO Auto-generated method stub
            if(cv == null)
            {
//              cv=LayoutInflater.from(parent.getContext()).inflate(R.layout.gridviewitem, null);
                imageview =  new ImageView(context);
            }
            else 
            {
                imageview = (ImageView) cv;
            }

            imageview.setImageBitmap(bitmap);
            return imageview;    
        }
    }

你需要将 <uses-permission android:name="android.permission.INTERNET" /> 添加为 application 标签的直接子标签。 - Subburaj
好的,我接受,当然你的帮助对我很有帮助......但是我为什么没有得到第三张图片呢? - Make it Simple
将xml更改为以下内容:<GridView android:id="@+id/gridView1" android:layout_width="fill_parent" android:layout_height="fill_parent" /> </LinearLayout> - Subburaj

0

这里是GridViewImageLoading示例

编辑:

你的代码没有问题。但是你试图从服务器上显示图片(不在应用程序资源或SD卡、相册等中),所以它没有显示在你的GridView中。因此,你需要从服务器下载这些图片。之后,你必须在GridView中显示它们。我已经给你提供了如何下载图片并在GridView中显示它们的链接。


在数组中的顺序应该与列表视图中的顺序相同,如何实现? - Make it Simple
无法理解,与ListView相同。 - Make it Simple
你已经下载了那个例子吗? - Dhaval Parmar

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接