图片网址未显示在网格中

时间:2013-04-25 10:55:20

标签: android image gridview

我为图片网址设置了gridview ..我无法在网格中看到图片..只显示背景...然后点击网格在下一个屏幕中播放。

我做错了什么?如何实现这个?

提前多多感谢

我的代码

    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;    
    }
}
}

logcat的

     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)

3 个答案:

答案 0 :(得分: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 :(得分: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;    
        }
    }

答案 2 :(得分:0)

GridView ImageLoading {{1}}

编辑:

你的代码注意到了错误。但你想要从服务器显示图像(在线它不在你的应用程序资源或sdcard,画廊等..)这就是为什么它没有在你的GridView中显示。所以,你必须从服务器下载图像。之后你必须在GridView中显示它们。我已经给你链接上面如何下载图像并在GridView中显示它们。