2014-09-04 74 views
0

我得到json数据并将其放入hashmap和hashmap中,并放入一个数组列表中。延长ListFragment显示来自Arraylist of Hashmap的数据

protected String doInBackground(String... urls) { 
     JSONObject jsonObject = new JSONObject(); 

     try { 

      jsonObject.put("full_name", etUserSearch.getText().toString()); 
      responseReceive = JsonPostClient.SendHttpPost(urls[0], 
        jsonObject); 

     } catch (JSONException e) { 
      e.printStackTrace(); 
     } 

     try { 
      Success = responseReceive.getJSONArray("Success"); 

      for (int i = 0; i < Success.length(); i++) { 
       JSONObject c = Success.getJSONObject(i); 

       String full_name = c.getString(TAG_FULL_NAME); 
       String user_name = c.getString(TAG_USER_NAME); 
       String user_id = c.getString(TAG_USER_ID); 

       HashMap<String, String> friends = new HashMap<String, String>(); 

       // adding each child node to HashMap key => value 
       friends.put(TAG_FULL_NAME, full_name); 
       friends.put(TAG_USER_NAME, user_name); 
       friends.put(TAG_USER_ID, user_id); 

       // adding contact to contact list 
       FriendSearchList.add(friends); 

      } 
     } catch (JSONException e) { 
      // TODO Auto-generated catch block 
      Log.d("hello", ""); 
      e.printStackTrace(); 
     } 

     return null; 
    } 

    protected void onPostExecute(String result) { 
     super.onPostExecute(result); 
     if (pDialog.isShowing()) 
      pDialog.dismiss(); 
     printFriends(); 
    }; 

我检查这些数据是printFriends所有有效的是发生在片段()方法,并想只显示“TAG_FULL_NAME”在ListView数据。在ListView的检查数据和装载

public void printFriends() { 
    int len = FriendSearchList.size(); 

    for (int i = 0; i < len; i++) { 
     String f_name = FriendSearchList.get(i).get(TAG_FULL_NAME); 
     String u_name = FriendSearchList.get(i).get(TAG_USER_NAME); 
     String u_id = FriendSearchList.get(i).get(TAG_USER_ID); 

     Log.d("full_name", f_name); 
     Log.d("user_name", u_name); 
     Log.d("user_id", u_id); 
    } 


    ListAdapter adapter = new SimpleAdapter(getActivity(), 
      FriendSearchList, R.layout.tab_addfriend_list, 
      new String[] { TAG_FULL_NAME }, new int[] { R.id.full_name }); 

    setListAdapter(adapter); 

} 

tab_add_friends XML布局

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" > 

    <ListView 
     android:id="@android:id/list" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content"/> 

</LinearLayout> 

tab_addfriend_list XML布局

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:orientation="vertical" 
    android:padding="10dp" 
    android:paddingLeft="10dp" 
    android:paddingRight="10dp" > 

<!-- Name Label --> 

    <TextView 
     android:id="@+id/full_name" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:paddingBottom="2dip" 
     android:paddingTop="6dip" 
     android:textColor="#43bd00" 
     android:textSize="16sp" 
     android:textStyle="bold" /> 


</LinearLayout> 

我的ListView控件初始化

View rootView = inflater.inflate(R.layout.tab_add_friends, container, 
      false); 
    lv = (ListView) rootView.findViewById(R.id.listView); 

方法没有显示没有显示到列表视图中的错误。需要建议或线索摆脱这个问题。

+0

看看这个:http://stackoverflow.com/questions/25375831/customarrayadapter-implementationunable-to-get-the-resource-id/25376257#25376257并使用HashMap的,而不是用户类。 – 2014-09-04 05:36:53

+0

为什么不使用自定义适配器?或者创建MyUser类并覆盖toString()方法,只需放入“TAG_FULL_NAME”并将此类添加到arraylist – thegiga 2014-09-04 05:44:46

+0

@GiGa thnx以获得建议。我认为它应该工作,但我也尝试其他方式 – 2014-09-04 05:52:17

回答

0

问题是你正在传递一个HashMap的Arraylist,其中SimpleAdapter将不知道哪些数据放入ListView项目的布局。

您可以使用它来实现项目的ListView

样本:

ListAdapter adapter = new SimpleAdapter(getActivity(), 
              FriendSearchList, R.layout.tab_addfriend_list, 
              new String[] { TAG_FULL_NAME }, new int[] { R.id.full_name }){ 
     @Override 
     public int getCount() { 
      return FriendSearchList.size(); 
     } 
     @Override 
     public View getView(int position,View convertView,ViewGroup parent) { 
      View v; 
      if(convertView == null) 
      { 
       v = getActivity().getLayoutInflater().inflate(R.layout.tab_addfriend_list, parent); 
       TextView tx = (TextView) v.findViewById(R.id.full_name); 
       tx.setText(FriendSearchList.get(i).get(TAG_FULL_NAME)); 
      } else 
       v = convertView; 

      return v; 
     } 
    }; 
0

我有同样的问题,一旦 问题是您正在使用简单的适配器喂养的数据,但你可能会在UI线程之外膨胀rowView,然后从post执行。这就是为什么你的观点没有获取数据。实际上,你不必为这里的rowview充气,这是你的漏洞代码。另一件事打印朋友的方法也没用,只是初始化onPostExecute()方法中的简单适配器。

'公共类MainActivity扩展ListActivity {

private ProgressDialog pDialog; 


// URL to get contacts JSON 
private static String url = "http://api.androidhive.info/contacts/"; 

// JSON Node names 
private static final String TAG_CONTACTS = "contacts"; 
private static final String TAG_ID = "id"; 
private static final String TAG_NAME = "name"; 
private static final String TAG_EMAIL = "email"; 
private static final String TAG_ADDRESS = "address"; 
private static final String TAG_GENDER = "gender"; 
private static final String TAG_PHONE = "phone"; 
private static final String TAG_PHONE_MOBILE = "mobile"; 
private static final String TAG_PHONE_HOME = "home"; 
private static final String TAG_PHONE_OFFICE = "office"; 


private boolean isConnection = false; 

// contacts JSONArray 
JSONArray contacts = null; 

// Hashmap for ListView 
ArrayList<HashMap<String, String>> contactList; 

ArrayList<HashMap<String, String>> oflineContactList; 

private MyContactDataSource dataSource; 

List<Contatcs> oflineContatcs; 

//私人ListAdapter适配器1;

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 



    dataSource = new MyContactDataSource(MainActivity.this); 
    dataSource.open(); 




    contactList = new ArrayList<HashMap<String,String>>(); 



    oflineContactList = dataSource.getContatcs(); 


    Log.i("data", oflineContactList.toString()); 
     ListView lv = getListView(); 

     ListAdapter adapter = new SimpleAdapter(
       MainActivity.this, oflineContactList, 
       R.layout.list_item, new String[] { TAG_NAME, TAG_EMAIL, 
         TAG_PHONE_MOBILE }, new int[] { R.id.email, 
         R.id.name, R.id.mobile }); 

     setListAdapter(adapter); 




    lv.setOnItemClickListener(new OnItemClickListener() { 



     @Override 
     public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, 
       long arg3) { 
      // getting values from selected ListItem 
      String name = ((TextView) arg1.findViewById(R.id.name)) 
        .getText().toString(); 
      String cost = ((TextView) arg1.findViewById(R.id.email)) 
        .getText().toString(); 
      String description = ((TextView) arg1.findViewById(R.id.mobile)) 
        .getText().toString(); 

      // Starting single contact activity 
      Intent intent = new Intent(MainActivity.this, SingleListItemActivity.class); 
      intent.putExtra(TAG_NAME, name); 
      intent.putExtra(TAG_EMAIL, cost); 
      intent.putExtra(TAG_PHONE_MOBILE, description); 

      startActivity(intent); 

     } 
    }); 

    new GetContacts().execute(); 


} 



private class GetContacts extends AsyncTask<Void, Void, Void>{ 

    @Override 
    protected void onPreExecute() { 

     super.onPreExecute(); 
     pDialog = new ProgressDialog(MainActivity.this); 
     pDialog.setMessage("Data is loading...please wait..."); 
     pDialog.setCancelable(false); 
     pDialog.show(); 
    } 


    @Override 
    protected Void doInBackground(Void... params) { 
     // Creating service handler class instance 
     ServiceHandler mHandler = new ServiceHandler(); 


     // Making a request to url and getting response 
     String jsonStr = mHandler.makeServiceCall(url, ServiceHandler.GET); 

     Log.d("Response: ", "> " + jsonStr); 

     if(jsonStr != null){ 
      try { 
       JSONObject jsonObject = new JSONObject(jsonStr); 

       //Getting JSON Array node 
       contacts = jsonObject.getJSONArray(TAG_CONTACTS); 

       // looping through All Contacts 
       for (int i = 0; i < contacts.length(); i++) { 
        JSONObject c = contacts.getJSONObject(i); 

        String id = c.getString(TAG_ID); 
        String name = c.getString(TAG_NAME); 
        String email = c.getString(TAG_EMAIL); 
        String address = c.getString(TAG_ADDRESS); 
        String gender = c.getString(TAG_GENDER); 

       // Phone node is JSON Object 
        JSONObject phone = c.getJSONObject(TAG_PHONE); 
        String mobile = phone.getString(TAG_PHONE_MOBILE); 
        String home = phone.getString(TAG_PHONE_HOME); 
        String office = phone.getString(TAG_PHONE_OFFICE); 


       // tmp hashmap for single contact 
        HashMap<String, String> contact = new HashMap<String, String>(); 

       // adding each child node to HashMap key => value 
        contact.put(TAG_ID, id); 
        contact.put(TAG_NAME, name); 
        contact.put(TAG_EMAIL, email); 
        contact.put(TAG_PHONE_MOBILE, mobile); 

       // adding contact to contact list 
        contactList.add(contact); 

       } 
       dataSource.creareContacts(contactList); 
       dataSource.close(); 
      } catch (JSONException e) { 
       e.printStackTrace(); 
      } 


     } 
     else { 
      Log.e("ServiceHandler", "Couldn't get any data from the url"); 
     } 
     return null; 
    } 


    @Override 
    protected void onPostExecute(Void result) { 

     super.onPostExecute(result); 

     // Dismiss the progress dialog 
     if(pDialog.isShowing()){ 
      pDialog.dismiss(); 
     } 

     /** 
     * Updating parsed JSON data into ListView 
     * */ 
     ListAdapter adapter = new SimpleAdapter(
       MainActivity.this, contactList, 
        R.layout.list_item, new String[] { TAG_NAME, TAG_EMAIL, 
          TAG_PHONE_MOBILE }, new int[] { R.id.name, 
          R.id.email, R.id.mobile }); 

     setListAdapter(adapter); 
    } 
} 

}`

+0

ThankYou,你的代码帮助了我! – Opriday 2017-09-29 18:19:18