开发者

Http image parsing problem

开发者 https://www.devze.com 2023-02-24 09:25 出处:网络
I\'m trying to set different images by parsing, but I can set only last image.I don\'t know where the problem is in this code:

I'm trying to set different images by parsing, but I can set only last image. I don't know where the problem is in this code:

public class GridActivity extends Activity{
    private EfficientAdapter adap;
    String strUrl;
    AddAlbumDetailBean aBean;
    XmlParser parser;
    ArrayList<Object>  result;
    ArrayList<Object> data;
    ImageButton btnAdd;
    private Context context;
     static Bitmap bitmap;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        Utils.onActivityCreateSetTheme(this);
        setContentView(R.layout.photos_activity);
        GridView gView = (GridView)findViewById(R.id.gridview);
        adap = new EfficientAdapter(this);
        gView.setAdapter(adap);
        /*btnAdd = (ImageButton)findViewById(R.id.btnAddPhotos);
            btnAdd.setOnClickListener(new OnClickListener() {

                @Override
                public void onClick(View v) {
                    // TODO Auto-generated method stub
                    startActivity(new Intent(GridActivity.this,AddAlbum.class));
                }
            });
         */
    }

    public static class EfficientAdapter extends BaseAdapter {
        private LayoutInflater mInflater;
        private Context context;
        String strUrl;
        AddAlbumDetailBean aBean;
        XmlParser parser;
        ArrayList<Object>  result;

        public EfficientAdapter(Context context) {
            // Cache the LayoutInflate to avoid asking for a new one each time.
            mInflater = LayoutInflater.from(context);
            this.context = context;
            String  userId = ConstantData.user_id;
            String  albumId = ConstantData.album_id;
            int pageNo = 1;
            int limit = 20;

            try {
                DefaultHttpClient client = new DefaultHttpClient();
                HttpPost post = new HttpPost("http://192.168.5.10/ijoomer_development/index.php?option=com_ijoomer&plg_name=jomsocial&pview=album&ptask=photo_paging&userid="+ ConstantData.user_id +"&sessionid="+ ConstantData.session_id +"&tmpl=component&albumid="+ ConstantData.album_id +"&pageno=1&limit=20");
                StringBuffer strBuffer = new StringBuffer("<data><userid>" + userId + "</userid><albumid>" + albumId + "</albumid><pageno>" + pageNo +"</pageno><limit>"+ limit +"</limit></data>");
                StringEntity strEntity = new StringEntity开发者_Python百科(strBuffer.toString());
                post.setEntity(strEntity);
                HttpResponse response = client.execute(post);

                InputStream in = response.getEntity().getContent();

                String strResponse = convertStreamToString(in);
                parser = new XmlParser(in, new AddAlbumDetailBean());
                result = parser.parse("data", "data");

                String startThumb ="<thumb>";
                String endThumb = "</thumb>";
                String startUrl = "<url>";
                String endUrl = "</url>";
                if (startThumb.equalsIgnoreCase("<thumb>") && endThumb.equalsIgnoreCase("</thumb>"))
                {
                    int startT = strResponse.indexOf(startThumb);
                    int endT = strResponse.indexOf(endThumb);

                    Log.i("startThumb", ""+startT);
                    Log.i("endThumb", ""+endT);

                    String OldThumb =  strResponse.substring(startT, endT);
                    int startUrlindex = OldThumb.indexOf(">");
                    String thumb = OldThumb.substring(startUrlindex + 1).trim();// getting Url from webservice 
                    Log.i("Thu0mb", ""+thumb);
                    URL newurl = new URL(thumb); 
                    bitmap = BitmapFactory.decodeStream(newurl.openConnection() .getInputStream());// converting Url into Bitmap but dont know how to use bitmap array here 
                    Log.d("Bitmap in ConstantData", ""+bitmap);
                }               


                if (startUrl.equalsIgnoreCase("<url>") && endUrl.equalsIgnoreCase("</url>"))
                {
                    int startL = strResponse.indexOf(startUrl);
                    int endL = strResponse.indexOf(endUrl);

                    Log.i("startUrl", ""+startL);
                    Log.i("endUrl", ""+endL);

                    String OldUrl =  strResponse.substring(startL, endL);
                    int startUrlindex = OldUrl.indexOf(">");
                    String url = OldUrl.substring(startUrlindex + 1).trim(); 


                }                           
            } catch (UnsupportedEncodingException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (ClientProtocolException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (IllegalStateException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }

        public View getView(final int position, View convertView, ViewGroup parent) {
            ViewHolder holder;

            if (convertView == null) {
                convertView = mInflater.inflate(R.layout.icon, null);
                holder = new ViewHolder();
                holder.iconImage = (ImageView) convertView.findViewById(R.id.icon_image);

                convertView.setOnClickListener(new OnClickListener() {
                    private int pos = position;
                    @Override
                    public void onClick(View v) {
                        Toast.makeText(context, "Click-" + String.valueOf(pos), Toast.LENGTH_SHORT).show(); 
                        context.startActivity(new Intent(context,GridActivity.class));
                    }
                });

                convertView.setTag(holder);
            } else {
                holder = (ViewHolder) convertView.getTag();
            }


                    Log.d("Bitmap in ConstantData", ""+bitmap);
                    holder.iconImage.setImageBitmap(bitmap);

            return convertView;
        }

        static class ViewHolder {
            ImageView iconImage;
        }

        @Override
        public int getCount() {
            // TODO Auto-generated method stub
            return 5; // if i m trying to return result.size(); getting error and returning 5 i can only get 5 images  
        }

        @Override
        public Object getItem(int position) {
            // TODO Auto-generated method stub
            return null;
        }

        @Override
        public long getItemId(int position) {
            // TODO Auto-generated method stub
            return 0;
        }



    }
    public static String convertStreamToString(InputStream in)
    throws IOException {


        if (in != null) {
            Writer writer = new StringWriter();

            char[] buffer = new char[1024];
            try {
                Reader reader = new BufferedReader(
                        new InputStreamReader(in, "UTF-8"));
                int n;
                while ((n = reader.read(buffer)) != -1) {
                    writer.write(buffer, 0, n);
                }
            } finally {
                //  in.close();
            }
            return writer.toString();
        } else {       
            return "";
        }

    }
}

Through this code i am trying to set image into the dynamic gridview using adapter.... but i can set only last image into the gridview so i dont know how to use bitmap array


There are a lot of problems on your code:

  • your bitmap is static, so you overriding it...
  • you have no loop, so you have only the same bitmap "parsed"

(after that I stopped looking)

Try to clean up your code and try to debug step by step so that you understand what your code does...

update:

some tips:

  • use AsyncTask to request the XML and parse it there
  • when finished fill the adapter with the parsed image urls
0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号