2017-04-03 22 views
1

誰でも助けてくれますか? 私はPOSTメソッドを使用してサーバーからのデータをどこに展開可能リストを作成しようとします。ここに私のコードはAndroid Studio、JSONボレーからExpandableListViewを生成するには?

private ExpandableListView listView; 
 
    private ExpandableListAdapter listAdapter; 
 
    private List<String> listDataHeader; 
 
    private HashMap<String, List<String>> listHash; 
 
    Button btnSearch; 
 
    EditText search; 
 
    String kata; 
 
    String statutory_url = "http://ds.bki.co.id:7777/ds/android/datasurvey.php"; 
 

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

 
     btnSearch = (Button) findViewById(R.id.btnSearch); 
 
     search = (EditText) findViewById(R.id.editText); 
 
     listView = (ExpandableListView) findViewById(R.id.ExpList); 
 

 
     btnSearch.setOnClickListener(new View.OnClickListener() { 
 
      @Override 
 
      public void onClick(View v) { 
 

 
       kata = search.getText().toString(); 
 
       getData(); 
 
      } 
 
     }); 
 
     listAdapter = new ExpandableListAdapter(this,listDataHeader,listHash); 
 
     listView.setAdapter(listAdapter); 
 
    } 
 

 
    private void getData(){ 
 
     RequestQueue queue = Volley.newRequestQueue(this.getApplicationContext()); 
 
     StringRequest stringRequest = new StringRequest(Request.Method.POST, statutory_url, new Response.Listener<String>() { 
 
      @Override 
 
      public void onResponse(String response) { 
 

 
       try { 
 
        JSONArray jsonArray = new JSONArray(response); 
 
        listDataHeader = new ArrayList<>(); 
 
        listHash = new HashMap<>(); 
 
        final int result = jsonArray.length(); 
 
        for (int i = 0; i < result; i++){ 
 
         JSONObject jsonObject = jsonArray.getJSONObject(i); 
 
         String surv = jsonObject.getString("survey"); 
 
         String last = jsonObject.getString("last"); 
 
         String next1 = jsonObject.getString("next1"); 
 
         String next2 = jsonObject.getString("next2"); 
 
         String surveyor = jsonObject.getString("surveyor"); 
 

 
         listDataHeader.add(surv); 
 
         List<String> data = new ArrayList<>(); 
 
         data.add(last); 
 
         data.add(next1); 
 
         data.add(next2); 
 
         data.add(surveyor); 
 

 
         listHash.put(listDataHeader.get(i), data); 
 

 
        } 
 

 

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

 
      } 
 
     }, new Response.ErrorListener() { 
 
      @Override 
 
      public void onErrorResponse(VolleyError error) { 
 

 
      } 
 
     }) 
 
     { 
 
      @Override 
 
      protected Map<String, String> getParams()throws AuthFailureError { 
 
       Map<String, String> params = new HashMap<String, String>(); 
 

 
       params.put("noregister", kata); 
 
       return params; 
 
      } 
 
     }; 
 
     queue.add(stringRequest); 
 
    } 
 
}

と、これは

私のアダプタであるnullオブジェクト参照 に 'int型java.util.List.size()':しかし、私はエラーを得ました私はあなたの完全通過しなかった

public class ExpandableListAdapter extends BaseExpandableListAdapter { 
 
    private Context context; 
 
    private List<String> listDataHeader; 
 
    private HashMap<String,List<String>> listHashMap; 
 

 
    public ExpandableListAdapter(Context context, List<String> listDataHeader, HashMap<String, List<String>> listHashMap) { 
 
     this.context = context; 
 
     this.listDataHeader = listDataHeader; 
 
     this.listHashMap = listHashMap; 
 
    } 
 

 
    @Override 
 
    public int getGroupCount() { 
 
     return listDataHeader.size(); 
 
    } 
 

 
    @Override 
 
    public int getChildrenCount(int i) { 
 
     return listHashMap.get(listDataHeader.get(i)).size(); 
 
    } 
 

 
    @Override 
 
    public Object getGroup(int i) { 
 
     return listDataHeader.get(i); 
 
    } 
 

 
    @Override 
 
    public Object getChild(int i, int i1) { 
 
     return listHashMap.get(listDataHeader.get(i)).get(i1); 
 
    } 
 

 
    @Override 
 
    public long getGroupId(int i) { 
 
     return i; 
 
    } 
 

 
    @Override 
 
    public long getChildId(int i, int i1) { 
 
     return i1; 
 
    } 
 

 
    @Override 
 
    public boolean hasStableIds() { 
 
     return false; 
 
    } 
 

 
    @Override 
 
    public View getGroupView(int i, boolean b, View view, ViewGroup viewGroup) { 
 
     String headerTitle = (String)getGroup(i); 
 
     if (view == null){ 
 
      LayoutInflater inflater = (LayoutInflater)this.context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
 
      view = inflater.inflate(R.layout.list_group, null); 
 
     } 
 
     TextView lblListHeader = (TextView)view.findViewById(R.id.lblListHeader); 
 
     lblListHeader.setTypeface(null, Typeface.BOLD); 
 
     lblListHeader.setText(headerTitle); 
 
     return view; 
 
    } 
 

 
    @Override 
 
    public View getChildView(int i, int i1, boolean b, View view, ViewGroup viewGroup) { 
 
     final String childText = (String)getChild(i,i1); 
 
     if (view == null){ 
 
      LayoutInflater inflater = (LayoutInflater)this.context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
 
      view = inflater.inflate(R.layout.list_item, null); 
 
     } 
 
     TextView txtListChild = (TextView)view.findViewById(R.id.lblListItem); 
 
     txtListChild.setText(childText); 
 
     return view; 
 
    } 
 

 
    @Override 
 
    public boolean isChildSelectable(int i, int i1) { 
 
     return true; 
 
    } 
 
}

答えて

2

コード。私はonCreateそれ自体を開始する際にエラーが見つかりました。

listAdapter = new ExpandableListAdapter(this,listDataHeader,listHash); 
    listView.setAdapter(listAdapter); 
ここ

listDataHeaderlistHash両方ともNULLです。この行を削除してonCreateとし、この行をgetDataメソッドに入れます。

private void getData(){ 
    RequestQueue queue = Volley.newRequestQueue(this.getApplicationContext()); 
    StringRequest stringRequest = new StringRequest(Request.Method.POST, statutory_url, new Response.Listener<String>() { 
     @Override 
     public void onResponse(String response) { 

      try { 
       JSONArray jsonArray = new JSONArray(response); 
       listDataHeader = new ArrayList<>(); 
       listHash = new HashMap<>(); 
       final int result = jsonArray.length(); 
       for (int i = 0; i < result; i++){ 
        JSONObject jsonObject = jsonArray.getJSONObject(i); 
        String surv = jsonObject.getString("survey"); 
        String last = jsonObject.getString("last"); 
        String next1 = jsonObject.getString("next1"); 
        String next2 = jsonObject.getString("next2"); 
        String surveyor = jsonObject.getString("surveyor"); 

        listDataHeader.add(surv); 
        List<String> data = new ArrayList<>(); 
        data.add(last); 
        data.add(next1); 
        data.add(next2); 
        data.add(surveyor); 

        listHash.put(listDataHeader.get(i), data); 
        // Adapter code is added here. 
        listAdapter = new ExpandableListAdapter(this,listDataHeader,listHash); 
        listView.setAdapter(listAdapter); 
       } 


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

     } 
    }, new Response.ErrorListener() { 
     @Override 
     public void onErrorResponse(VolleyError error) { 

     } 
    }) 
    { 
     @Override 
     protected Map<String, String> getParams()throws AuthFailureError { 
      Map<String, String> params = new HashMap<String, String>(); 

      params.put("noregister", kata); 
      return params; 
     } 
    }; 
    queue.add(stringRequest); 
} 

onCreateからリストアダプタを削除し、getDataにそれを入れてみてください。このコードをもう一度チェックし、このメソッドを再実行してください。

+0

ありがとうございます。その仕事 – rizal

+0

それは私の喜びです。 :) –

+0

ok。私はそれを行う – rizal

関連する問題