问题描述
我正在从sql数据库获取数据到android Expandable listview。 我的所有数据都是正确的,只是listview组重复了相同数量的listview子级。
我不知道为什么,我已经尝试了所有想到的东西。 无论如何,我正在使用2个查询! 一个让小组,另一个让小组孩子!
这是我的代码:AsyncTask:
private class SyncData extends AsyncTask<String,String,String> {
String msg;
@Override
protected void onPreExecute() //Starts the progress dailog
{
System.out.println("Start");
//lottieAnimationView.playAnimation();
progressDialog.show();
}
@Override
protected String doInBackground(String... strings) // Connect to the database,write query and add items to array list
{
try {
Connection conn = connectionClass.CONN(); //Connection Object
if (conn == null) {
success = false;
msg = "Sorry something went wrong,Please check your internet connection";
} else {
// Change below query according to your own database.
String query = "SELECT SalesInvoice.SalesInvoiceID,SalesInvoice.SalesInvoiceSerial,SalesInvoice.SalesInvoiceDate,SalesInvoice.SalesInvoiceItemCount,SalesInvoice.SalesInvoicetotal,SalesInvoice.SalesInvoiceTaxs,SalesInvoice.SalesInvoiceLastTotal,SalesInvoice.SalesInvoiceBranchID FROM SalesInvoice where SalesInvoiceID = '321' AND SalesInvoiceBranchID = '2'";
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery(query);
if (rs != null) // if resultset not null,I add items to itemArraylist using class created
{
while (rs.next()) {
try {
ClassListItems classListItems = new ClassListItems(rs.getString("SalesInvoiceSerial"),rs.getString("SalesInvoiceDate"),rs.getString("SalesInvoiceItemCount"),rs.getString("salesInvoicetotal"),rs.getString("SalesInvoiceTaxs"),rs.getString("SalesInvoiceLastTotal"));
String query2 = "SELECT SalesProductName FROM SalesInvoiceDetail WHERE SalesInvoiceID = '"+rs.getString("SalesInvoiceID")+"'";
Statement stmt2 = conn.createStatement();
ResultSet rs2 = stmt2.executeQuery(query2);
if (rs2 != null){
while (rs2.next()){
System.out.println("ssss");
classListItems.getChildItemList().add(new ChildItem(rs2.getString("SalesProductName")));
itemArrayList.add(classListItems);
}
msg = "Found";
success = true;
}else {
msg = "Not Found";
success = false;
}
//Picasso.with(agzakhana_mainAr.this).load(rs.getString("SpecialityIcon")).into(specialityicon);
} catch (Exception ex) {
ex.printstacktrace();
}
}
}
}
} catch (Exception e) {
e.printstacktrace();
Writer writer = new StringWriter();
e.printstacktrace(new PrintWriter(writer));
msg = writer.toString();
Log.d("Error",writer.toString());
success = false;
}
return msg;
}
@Override
protected void onPostExecute(String msg) // disimissing progress dialoge,showing error and setting up my listview
{
//progress2.hideProgress();
progressDialog.hide();
if (msg!=null){
Toast.makeText(MainActivity.this,msg + "",Toast.LENGTH_LONG).show();
}
if (!success) {
System.out.println("EndNotSuccess");
} else {
try {
myAppAdapter = new MyAppAdapter(itemArrayList,MainActivity.this);
exlistView21.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
exlistView21.setAdapter(myAppAdapter);
System.out.println("End");
} catch (Exception ex) {
}
}
}
}
适配器:
public class MyAppAdapter extends Baseexpandablelistadapter//has a class viewholder which holds
{
public class ViewHolder {
TextView invoicenum;
TextView date;
TextView itemscount;
TextView total;
TextView tax;
TextView lasttotal;
TextView textchild;
}
public List<ClassListItems> parkingList;
public Context context;
ArrayList<ClassListItems> arraylist;
private MyAppAdapter(List<ClassListItems> apps,Context context) {
this.parkingList = apps;
this.context = context;
arraylist = new ArrayList<ClassListItems>();
arraylist.addAll(parkingList);
System.out.println("called");
}
@Override
public int getGroupCount() {
return parkingList.size();
}
@Override
public int getChildrenCount(int groupPosition) {
return parkingList.get(groupPosition).getChildItemList().size();
}
@Override
public Object getGroup(int groupPosition) {
return null;
}
@Override
public Object getChild(int groupPosition,int childPosition) {
return parkingList.get(groupPosition).getChildItemList().get(childPosition);
}
@Override
public long getGroupId(int groupPosition) {
return 0;
}
@Override
public long getChildId(int groupPosition,int childPosition) {
return childPosition;
}
@Override
public boolean hasstableIds() {
return true;
}
@Override
public View getGroupView(int groupPosition,boolean isExpanded,View convertView,ViewGroup parent) {
View rowView = convertView;
MyAppAdapter.ViewHolder viewHolder = null;
if (rowView == null) {
LayoutInflater inflater = getLayoutInflater();
rowView = inflater.inflate(R.layout.list_items,parent,false);
viewHolder = new MyAppAdapter.ViewHolder();
//initialize our labels
viewHolder.invoicenum = (TextView) rowView.findViewById(R.id.invoicenum);
viewHolder.date = (TextView) rowView.findViewById(R.id.date);
viewHolder.itemscount = (TextView) rowView.findViewById(R.id.itemcount);
viewHolder.total = (TextView) rowView.findViewById(R.id.total);
viewHolder.tax = (TextView) rowView.findViewById(R.id.tax);
viewHolder.lasttotal = (TextView) rowView.findViewById(R.id.lasttotal);
rowView.setTag(viewHolder);
} else {
viewHolder = (MyAppAdapter.ViewHolder) convertView.getTag();
}
// here setting up names and images
viewHolder.invoicenum.setText(parkingList.get(groupPosition).getSalesInvoiceSerial());
viewHolder.itemscount.setText(parkingList.get(groupPosition).getSalesInvoiceItemCount());
viewHolder.date.setText(parkingList.get(groupPosition).getSalesInvoiceDate());
viewHolder.total.setText(parkingList.get(groupPosition).getSalesInvoicetotal());
viewHolder.lasttotal.setText(parkingList.get(groupPosition).getSalesInvoiceLastTotal());
viewHolder.tax.setText(parkingList.get(groupPosition).getSalesInvoiceTax());
System.out.println("PARENT IS: "+parkingList.get(groupPosition).getSalesInvoiceSerial());
// Picasso.with(context).load(parkingList.get(position).getdiscountimage()).into(viewHolder.imagediscount);
exlistView21.setonItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent,View view,int position,long id) {
//What happens when you click on a place!
// Intent intent = new Intent(LoggedIn.this,MapsActivity.class);
// startActivity(intent);
}
});
return rowView;
}
@Override
public View getChildView(int groupPosition,int childPosition,boolean isLastChild,ViewGroup parent) {
View resultView = convertView;
ViewHolder holder;
LayoutInflater inflater = getLayoutInflater();
if (resultView == null) {
resultView = inflater.inflate(R.layout.listchildren,null); //Todo change layout id
holder = new ViewHolder();
holder.textchild = (TextView) resultView.findViewById(R.id.child); //Todo change view id
resultView.setTag(holder);
} else {
holder = (ViewHolder) resultView.getTag();
}
System.out.println("CHILD IS: "+parkingList.get(childPosition).getChildItemList().get(childPosition).getSs());
holder.textchild.setText(parkingList.get(childPosition).getChildItemList().get(childPosition).getSs());
return resultView;
}
@Override
public boolean isChildSelectable(int groupPosition,int childPosition) {
return true;
}
// public void filter(String charText) {
// charText = charText.toLowerCase(Locale.getDefault());
// itemArrayList.clear();
// if (charText.length() == 0) {
// itemArrayList.addAll(arraylist);
//
// } else {
// for (ClassListItems2 st : arraylist) {
// if (st.getSpecialityname().toLowerCase(Locale.getDefault()).contains(charText)) {
// itemArrayList.add(st);
// }
//
// }
// }
// notifyDataSetChanged();
// }
}
}
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)