3

I have set a gridview for image url..I can't able to see the image in grid.. Just shows the background...and on click the grid plays in next screen.

What im doing wrong? How to implement this?

Thanks a lot in advance

my code

    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)
4

3 回答 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;
    }

}
于 2013-04-26T05:57:07.710 回答
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;    
        }
    }
于 2013-04-25T12:08:24.417 回答
0

这是With的示例GridViewImageLoading

编辑:

注意你的代码是错误的。但是您要显示来自服务器的图像(在线它不在您的应用程序资源或 sdcard、图库等中),这就是它没有显示在您的 GridView 中的原因。因此,您必须从服务器下载该图像。之后,您必须在 GridView 中显示它们。我在上面为您提供了如何下载图像并在 GridView 中显示它们的链接。

于 2013-04-25T11:31:17.753 回答