2017-01-11 2 views
0

Со стороны сервера я в основном возвращаю объект, содержащий различные элементы. Мне нужна помощь в извлечении одного элемента (sensorID). Я уверен, что мой код для извлечения sensorID должен немного измениться, так как я использую expandableListView. Я попытался следующий код, но я получаю сообщение об ошибке, что читаетКак извлечь один элемент объекта из объекта, который содержит много элементов.

java.lang.ClassCastException: java.lang.String не может быть приведен к com.xera.deviceinsight.api.OrganisationDeviceSensorsResult

private void load(View view) 
    { 
     final Context context = getContext(); 
     expListView = (ExpandableListView) view.findViewById(R.id.lvExp); 
     prepareListData(); 
     //listAdapter = new ExpandableListAdapter(this.getActivity(), listDataHeader, listDataChild); 
     listAdapter = new com.xera.deviceinsight.home.ExpandableListAdapter(this.getActivity(), listDataHeader, listDataChild); 
     expListView.setAdapter(listAdapter); 
     expListView.setOnChildClickListener(new ExpandableListView.OnChildClickListener() { 
     @Override 
     public boolean onChildClick(ExpandableListView parent, View v, int groupPosition, int childPosition, long id) { 

      System.err.println("child clicked"); 
      Toast.makeText(getActivity(), "child clicked", Toast.LENGTH_SHORT).show(); 
      EventBus.getDefault().post(new ItemClickedEvent(SensorInformationChildFragment.TAB_CALL)); 
      //ExpandableListAdapter adapter = (ExpandableListAdapter)parent.getAdapter(); 
      ExpandableListAdapter adapter = (ExpandableListAdapter)parent.getExpandableListAdapter(); 
      Object sensorData = adapter.getChild(groupPosition , childPosition); 
      OrganisationDeviceSensorsResult deviceSensor = (OrganisationDeviceSensorsResult) adapter.getChild(groupPosition , childPosition); 
      sensorID = deviceSensor.SensorID; 

      ReportingGroup.get(childPosition); 
      return true; 
     } 
     }); 
    } 

мой адаптер класса

public class ExpandableListAdapter extends BaseExpandableListAdapter { 

    private Context _context; 
    private List<String> _listDataHeader; // header titles 
    // child data in format of header title, child title 
    private HashMap<String, List<String>> _listDataChild; 
    public List<OrganisationDeviceSensorsResult> Items; 
    List<String> ReportingGroup= new ArrayList<String>(); 

    public ExpandableListAdapter(Context context, List<String> listDataHeader, 
           HashMap<String, List<String>> listChildData) { 
     this._context = context; 
     this._listDataHeader = listDataHeader; 
     this._listDataChild = listChildData; 
    } 

    public ExpandableListAdapter(Context context) { 
    } 

    @Override 
    public Object getChild(int groupPosition, int childPosititon) { 
     return this._listDataChild.get(this._listDataHeader.get(groupPosition)) 
      .get(childPosititon); 
    } 

    @Override 
    public long getChildId(int groupPosition, int childPosition) { 
     return childPosition; 
    } 

    public Object getItemAtPosition(int index) 
    { 
     return getItemAtPosition(index); 
     //return this.getItem(index); 
    // return this.getChild(index , index2); 
     //return this.getItem(index); 
     //return index; 
     //return this.get 
     //return OrganisationDeviceSensorsResult.class; 
    } 

    @Override 
    public View getChildView(int groupPosition, final int childPosition, 
          boolean isLastChild, View convertView, ViewGroup parent) { 

     final String childText = (String) getChild(groupPosition, childPosition); 
     //OrganisationDeviceSensorsResult deviceSensor = getItemAtPosition(childPosition); 
     if (convertView == null) { 
     LayoutInflater infalInflater = (LayoutInflater) this._context 
       .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     convertView = infalInflater.inflate(R.layout.list_item, null); 
     } 

     TextView txtListChild = (TextView) convertView 
      .findViewById(R.id.lblListItem); 

     txtListChild.setText(childText); 
     String child=(String) getChild(groupPosition, childPosition); 
    // int s = deviceSensor.SensorID; 
    // Log.i(TAG, "value selected: " + deviceSensor.SensorID); 
     return convertView; 
    } 

    /*private OrganisationDeviceSensorsResult getItemAtPosition(int childPosition) { 
    }*/ 

    @Override 
    public int getChildrenCount(int groupPosition) { 
     return this._listDataChild.get(this._listDataHeader.get(groupPosition)) 
      .size(); 
    } 

    @Override 
    public Object getGroup(int groupPosition) { 
     return this._listDataHeader.get(groupPosition); 
    } 

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

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

    @Override 
    public View getGroupView(int groupPosition, boolean isExpanded, 
          View convertView, ViewGroup parent) { 
     String headerTitle = (String) getGroup(groupPosition); 
     if (convertView == null) { 
     LayoutInflater infalInflater = (LayoutInflater) this._context 
       .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     convertView = infalInflater.inflate(R.layout.list_group, null); 
     } 

     TextView lblListHeader = (TextView) convertView 
      .findViewById(R.id.lblListHeader); 
     lblListHeader.setTypeface(null, Typeface.BOLD); 
     lblListHeader.setText(headerTitle); 

     return convertView; 
    } 

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

    @Override 
    public boolean isChildSelectable(int groupPosition, int childPosition) { 
     return true; 
    } 


    public void get(int groupPosition) { 
    } 


    /*public int getName() { 
     return name; 
    }*/ 
} 
+0

что возвращаемый тип 'adapter.getChild (groupPosition, childPosition)' ? – jhamon

ответ

0

код ниже должен избегать исключения класса произнесения. Ошибка показывает, что вы пытаетесь передать строку объекту OrganisationDeviceSensorsResult.

Object obj = adapter.getChild(groupPosition , childPosition); 

if(obj instanceof OrganisationDeviceSensorsResult){ 
OrganisationDeviceSensorsResult deviceSensor = (OrganisationDeviceSensorsResult)obj; 
sensorID = deviceSensor.SensorID; 
} 
+0

@ Goldfish Я добавил свой класс адаптера. @ Srikanth ваш код извлекает идентификатор sensor, но значение всегда 0.0 – Zidane

+0

ok имеет смысл, единственная проблема заключается в том, что эта строка хочет вернуть строку 'return this._listDataChild.get (this._listDataHeader.get (groupPosition)) .get (childPosititon); ' – Zidane

+0

@Zidane - Отметить как ответ, который когда-либо отвечал. –

2

Edit: Ваш список _listDataHeader и _listDataChild HashMap имеют тип String. Поэтому, когда вы вызываете getChild, он возвращает объект String, а не объект OrganisationDeviceSensorsResult.


Не будучи в состоянии видеть свой класс адаптера, я хотел бы предложить изменения:

@Override 
public Object/String getChild(int groupPosition, int childPosition) { 
    return this._listDataChild.get(this._listDataHeader.get(groupPosition)) 
     .get(childPosititon); 
} 

в

@Override 
public OrganisationDeviceSensorsResult getChild(int groupPosition, int childPosition) { 
    return this._listDataChild.get(this._listDataHeader.get(groupPosition)) 
     .get(childPosititon); 
}