2017-04-03 1 views
1

아무도 도와 줄 수 있습니까? POST 메서드를 사용하여 서버의 데이터를 확장 가능한 목록보기로 만들려고합니다. 하지만 난 오류가있어 여기에 null 객체 참조 에 'INT java.util.List.size()가'내 코드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); 
 
    } 
 
}

이며,이 내 어댑터입니다

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

그것은 내 기쁨이야. 일단 당신이 대답을 한 번 만족 시키면 위로 upvote. :) –

+0

확인. 나는 그것을 할 것이다 – rizal

관련 문제