设置动态列表活动

时间:2011-07-10 02:03:02

标签: android

请指出以下代码的错误,即它没有创建正确的列表活动,包括动态图像及其来自服务器的描述 输出。这是图像 enter image description here

应该是这样的

enter image description here

因为可以看到只有一个图像没有描述而加载,其余的图像没有图像,即使没有空格,请指出xml和代码的错误。 这是代码

主要班级

public class Test extends ListActivity  {


    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.listplaceholder);

        // install handler for processing gui update messages
        ArrayList<HashMap<String, Object>> mylist = new ArrayList<HashMap<String, Object>>(); 
       JSONObject json = JSONfunctions.getJSONfromURL("http://midsweden.gofreeserve.com/proj/androidjson.php?identifier=123" );


        try{

            JSONArray  earthquakes = json.getJSONArray("services");

            for(int i=0;i<earthquakes.length();i++){                        
                HashMap<String, Object> map = new HashMap<String, Object>();
                 JSONObject e = earthquakes.getJSONObject(i);

                map.put("id", e.getString("taskid"));
                map.put("pic", "Service name : " + e.getString("employeepic"));
                map.put("serviceinfo", "" +  e.getString("employeename")+ " : "+ e.getString("starttime")
                        +" To " +  e.getString("endtime"));


                 String imageid = e.getString("employeepic");


                    ImageView iv = (ImageView) findViewById(R.id.image);
                    Bitmap b = getUserPic(imageid);
                    iv.setImageBitmap(b);


                    map.put("img",b);
                mylist.add(map);            
            }       
        }catch(JSONException e)        {
             Log.e("log_tag", "Error parsing data "+e.toString());
        }

        SimpleAdapter adapter = new SimpleAdapter(this, mylist , R.layout.test,new String[] {"img", "servicename", "serviceinfo" }, 
                        new int[] {  R.id.image ,R.id.items, R.id.item_subtitle });

        setListAdapter(adapter);

        final ListView lv = getListView();
        lv.setTextFilterEnabled(true);  
        lv.setOnItemClickListener(new OnItemClickListener() {
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {              
                @SuppressWarnings("unchecked")
                HashMap<String, String> o = (HashMap<String, String>) lv.getItemAtPosition(position);                   
                Toast.makeText(Test.this, "ID '" + o.get("id") + "' was clicked.", Toast.LENGTH_SHORT).show(); 

            }
        });

    }

    public Bitmap getUserPic(String picID) {
        String imageURL;
        Bitmap bitmap = null;
        Log.d("BITMAP", "Loading Picture");
        imageURL = "http://midsweden.gofreeserve.com/proj/admin/"+picID;
        try {
            bitmap = BitmapFactory.decodeStream((InputStream)new URL(imageURL).getContent());
        } catch (Exception e) {
            Log.d("BITMAP", "Loading Picture FAILED");
            e.printStackTrace();
        }
        return bitmap;
    }


}

这是jsonfunction类,我认为需要发布,但只是为了理解其他人遵循

public class JSONfunctions {

    public static JSONObject getJSONfromURL(String url){
        InputStream is = null;
        String result = "";
        JSONObject jArray = null;

        //http post
        try{
                HttpClient httpclient = new DefaultHttpClient();
                HttpPost httppost = new HttpPost(url);
                HttpResponse response = httpclient.execute(httppost);
                HttpEntity entity = response.getEntity();
                is = entity.getContent();

        }catch(Exception e){
                Log.e("log_tag", "Error in http connection "+e.toString());
        }

      //convert response to string
        try{
                BufferedReader reader = new BufferedReader(new InputStreamReader(is,"iso-8859-1"),8);
                StringBuilder sb = new StringBuilder();
                String line = null;
                while ((line = reader.readLine()) != null) {
                        sb.append(line + "\n");
                }
                is.close();
                result=sb.toString();
        }catch(Exception e){
                Log.e("log_tag", "Error converting result "+e.toString());
        }

        try{

            jArray = new JSONObject(result);            
        }catch(JSONException e){
                Log.e("log_tag", "Error parsing data "+e.toString());
        }

        return jArray;
    }
}

我有两个xml文件,然后是这个项目的主要文件 的test.xml          

<TextView  

    android:id="@+id/items"
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:textAppearance="?android:attr/textAppearanceMedium"
    android:padding="2dp"
    android:textSize="20dp" />
    <TextView  
    android:id="@+id/item_subtitle"
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:padding="2dp"
    android:textSize="18dp" />
</LinearLayout>

listplace holder

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">    
     <ImageView
      android:id="@+id/image"
      android:layout_width="50dip"
      android:layout_height="50dip"
       android:scaleType="centerCrop"/>
    <ListView
        android:id="@id/android:list"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:drawSelectorOnTop="false" />

    <TextView
        android:id="@id/android:empty"
        android:layout_width="fill_parent"
       android:layout_height="wrap_content"
        android:text="No data"/>

</LinearLayout>

我知道有lazylist可用,但我想根据我的理解进行设置。谢谢

2 个答案:

答案 0 :(得分:4)

对,我有另一个示例项目,你可以下载here.它太多的代码发布所以我已经压缩了项目,所以你可以下载它。如果您不确定有什么用,请问!享受。

BTW看起来像这样:

答案 1 :(得分:0)

几天前我遇到了同样的问题。 AFAIK您需要创建一个自定义ArrayAdapter。这篇文章对我有所帮助:

http://www.softwarepassion.com/android-series-custom-listview-items-and-adapters/

..这篇文章似乎也是一个很好的方法:

http://united-coders.com/phillip-steffensen/android-dealing-with-listactivities-customized-listadapters-and-custom-designed-0