2011-04-14 64 views
-1

我试图通过解析来设置不同的图像,但我只能设置最后一张图像。我不知道是哪里的问题在此代码:Http图像解析问题

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

    } 
} 

通过这个代码我试图使用适配器.... 设置图像到动态gridview的,但我可以只设置最后一个图像到GridView控件所以我不知道如何使用位图阵列

+1

问题不是关于如何设置图像,这个问题是关于问一个问题,以可接受的方式填补适配器... – WarrenFaith 2011-04-14 12:10:28

+0

@WarrenFaith我试图打捞问题 – 2011-04-14 12:11:53

+0

那么现在我该怎么做? – ggg 2011-04-14 12:13:48

回答

0

有很多对你的代码的问题:

  • 您的位图是静态的,所以你重写它...
  • 你没有循环,所以你只有相同的位图“p arsed”

(在那之后我停止寻找)

尝试清理你的代码,并尝试调试一步一步让你了解你的代码做什么...

更新:

一些提示:

  • 使用的AsyncTask请求XML并解析它有
  • 当完成与解析图像的URL
+0

那么我该如何添加循环 – ggg 2011-04-14 12:39:21

+0

你应该封装你的XML解析。当你解析时,你应该填写一个图像路径列表,并在完成解析后,你可以遍历路径,并获取所有图像...也编辑我的答案 – WarrenFaith 2011-04-14 12:55:52

+0

你好朋友可以ü编辑我的代码或给我一些示例代码。 .. ??? – ggg 2011-04-15 05:12:25