2015-07-11 51 views
0

我有一個JsonObject,我試圖傳遞給我的CustomListView,我已經讀過類似於此的其他線程,但沒有任何工作。我有一個簡單的JSONObject產生這種輸出android:我如何從自定義列表適配器中讀取Jsonobject

{ 「localstreams」:[{ 「人」: 「約翰」, 「郵報」: 「我的第一篇文章」}]}

,然後我通過到我的列表視圖SetAdapter。問題是我完全沒有錯誤,並且活動顯示爲空白事件,儘管我可以看到它正在形成JsonObject。我的代碼是容易複製,它是這個..

LocalFeed.Java

 public class LocalFeed extends Activity 
    { 


    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.local_feed); 
    try { 
     ListView lv=(ListView)findViewById(R.id.localfeed); 

     JSONObject json = new JSONObject(); 

     JSONArray array = new JSONArray(); 
     JSONObject item = new JSONObject(); 
     item.put("post", "My first post"); 
     item.put("people", "John"); 
     array.put(item); 

     json.put("localstreams", array); 



     DemoLocalFeed DMF=new DemoLocalFeed(json,this); 
     lv.setAdapter(DMF); 
    } catch (Exception e) { 
     System.err.println("failed: "+ e.getMessage()); 
     e.printStackTrace(); 
    } 
    } 
     } 

與此相關的活動是local_feed.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
     xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" 
     android:layout_height="match_parent" 
    tools:context="com.exoler.LocalFeed" 
     android:id="@+id/LocalFeed"> 
     <ListView 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:id="@+id/localfeed" 
      android:layout_centerHorizontal="true" /> 

這是我的自定義列表適配器是 DemoLocalFeed.java

public class DemoLocalFeed extends BaseAdapter { 

    JSONObject names; 
    Context ctx; 
LayoutInflater myiflater; 
    public DemoLocalFeed(JSONObject arr,Context c) 
    { 
    ctx=c; 
     names=arr; 
     myiflater= (LayoutInflater)c.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    } 


    @Override 
    public int getCount() { 
     return names.length(); 
    } 

    @Override 
    public Object getItem(int position) { 
     return 1; 
    } 

    @Override 
    public long getItemId(int position) { 
     return position; 
    } 

    @Override 
public View getView(int position, View convertView, ViewGroup parent) { 

    if(convertView==null) 
    { 
     try { 
      convertView = myiflater.inflate(R.layout.customadapter, null); 
      TextView posts = (TextView) convertView.findViewById(R.id.posts); 
      TextView people= (TextView) convertView.findViewById(R.id.people); 
      JSONArray jArray = new JSONArray("localstreams"); 
    String postss=""; 
    String peoples=""; 
      for(int i=0; i < jArray.length(); i++) { 
      postss= names.getString("post"); 
      peoples= names.getString("people"); 
      } 

      posts.setText(postss); 
      people.setText(peoples); 
      return convertView; 
     } 
     catch (Exception e) { 
     e.printStackTrace(); 
    } 
    } 
return convertView; 
} 
} 

和它的活動customadapter.xml

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

    <TextView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:textColor="#000099" 
     android:textAppearance="?android:attr/textAppearanceMedium" 
     android:id="@+id/posts" /> 

<TextView 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:textColor="#000099" 
    android:textAppearance="?android:attr/textAppearanceMedium" 
    android:id="@+id/people" /> 
</LinearLayout> 

在這之前表示不給我一個錯誤,它只是表明了在相比之下ListView的空白,如果我改變的JSONObject轉換成String [ ]然後ListView得到填充。我已閱讀關於此主題的其他主題,例如Android JSONObject to ListView,但無法使其工作。我認爲我靠近,但似乎無法找出什麼是不工作的任何建議將是偉大的..

+0

犯了錯,嘗試用編輯。 –

回答

0

試試這個:

convertView = myiflater.inflate(R.layout.customadapter, null); 
TextView posts = (TextView) convertView.findViewById(R.id.posts); 
TextView people= (TextView) convertView.findViewById(R.id.people); 

JSONArray jaLocalstreams = names.getJSONArray("localstreams"); 
JSONObject jsonObject = jaLocalstreams.getJSONObject(position); 
String postss = jsonObject.getString("post"); 
String peoples = jsonObject.getString("people"); 

posts.setText(postss); 
people.setText(peoples); 
+0

剛試過,它由於某種原因仍然顯示空白。我不能這樣放置,因爲它期望一個字符串,所以我把** JSONObject jsonObject = names.getJSONObject(String.valueOf(position)); ** –

+0

@IgnacioPerez嘗試編輯.. JSONObject jsonObject = jaLocalstreams.getJSONObject位置); –

+0

完美!非常感謝@ Alexandre-G你發佈的代碼已經解決了這個問題。 –

相關問題