2017-04-06 3 views
0

これは私のリストビューを表示する方法ですが、この種のメソッドを使用して表示すると、重複データが表示されます。これは私の "CondimentDescription"が1つ以上のデータを持つからだと私は思う。以下は、私のコードです:クエリで左外部結合を使用しているときに重複データを持つリスト

public List<OrderList> getOrderList() { 
      List<OrderList> OrderList = new ArrayList<OrderList>(); 
      OrderList list = new OrderList(); 
      try { 
       String selectQuery = "select t2.Id,t2.ProductCode,t2.Price,t2.Qty,t3.Description,t4.condimentDescription from TempCS t1 \n" + 
         "left outer join TempCSDetail t2 on t1.DocNo=t2.Docno\n" + 
         "left outer join mProduct t3 on t2.ProductCode=t3.Code \n" + 
         "left outer join TempCSCondiment t4 on t2.SeqNo=t4.SeqNo"+ 
         "where t1.DocNo=" + TablePageDocNo + "\n"; 

       SQLiteDatabase db1 = db.getReadableDatabase(); 
       Cursor cursor = db1.rawQuery(selectQuery, null); 

       if (cursor.moveToFirst()) { 
        do { 
         list.setProductCode(cursor.getString(cursor.getColumnIndex("ProductCode"))); 
         list.setPrice(Double.parseDouble(cursor.getString(cursor.getColumnIndex("Price")))); 
         list.setQty(cursor.getString(cursor.getColumnIndex("Qty"))); 
         list.setDescription(cursor.getString(cursor.getColumnIndex("Description"))); 
         list.set_ID(Integer.parseInt(cursor.getString(cursor.getColumnIndex("ID")))); 
     //this will more than 1 row in my Sqlite database 
         list.setCondimentDescription(cursor.getString(cursor.getColumnIndex("CondimentDescription"))); 
           OrderList.add(list); 
          } while (cursor.moveToNext()); 
         } 

      }catch(Exception e){ 
      } 

     return OrderList; 
    } 

アダプタ一覧

public class OrderListAdapter extends BaseAdapter { 
     LayoutInflater mInflater; 
     public OrderListAdapter() { 
      mInflater = LayoutInflater.from(ListFragmentActivity.this); 
     } 
     @Override 
     public int getCount() { 
      return orderlist.size(); 
     } 
     @Override 
     public Object getItem(int position) { 
      return null; 
     } 
     @Override 
     public long getItemId(int position) { 
      return position; 
     } 
     @Override 
     public View getView(final int position, View convertView, ViewGroup parent) { 
      if (convertView == null) { 
       convertView = mInflater.inflate(R.layout.listproduct1, null); 
      } 

      final TextView _ID = (TextView) convertView.findViewById(R.id.proID); 
      _ID.setText("" + orderlist.get(position).get_ID()); 
      final String proID = _ID.getText().toString(); 

      final TextView ProductCode = (TextView) convertView.findViewById(R.id.productcode); 
      ProductCode.setText("" + orderlist.get(position).getProductCode()); 

      final TextView Description = (TextView) convertView.findViewById(R.id.description); 
      Description.setText("" + orderlist.get(position).getDescription()); 

      final TextView Price = (TextView) convertView.findViewById(R.id.price); 
     Price.setText("" + String.format("%.2f",orderlist.get(position).getPrice())); 
     final Double price= Double.valueOf(Price.getText().toString()); 

     final TextView Qty = (TextView) convertView.findViewById(R.id.qty); 
     Qty.setText("" + orderlist.get(position).getQty()); 

     final TextView condimentDescription=(TextView)convertView.findViewById(R.id.condimentDescription); 
     condimentDescription.setText("" + orderlist.get(position).getCondimentDescription()); 

     notifyDataSetChanged(); 
     return convertView; 
    } 
} 
+0

これをチェックしてください[リンク](http://stackoverflow.com/a/38323180/6799753) –

+0

@VishrutPatilこのリンクは仕事ですが、私が望むものではありません。 –

+0

[重複を削除する方法リスト?](http://stackoverflow.com/questions/2849450/how-to-remove-duplicates-from-a-list) –

答えて

0

データベースのようにgetColumnIndex()メソッドでは、同じ列名を与える必要があります。

はこれを試してみてください:

public List<OrderList> getOrderList() { 


      SQLiteDatabase db1 = db.getReadableDatabase(); 

      String selectQuery = "select t2.Id,t2.ProductCode,t2.Price,t2.Qty,t3.Description,t4.condimentDescription from TempCS t1 \n" + 
         "left outer join TempCSDetail t2 on t1.DocNo=t2.Docno\n" + 
         "left outer join mProduct t3 on t2.ProductCode=t3.Code \n" + 
         "left outer join TempCSCondiment t4 on t2.SeqNo=t2.SeqNo"+ 
         "where t1.DocNo=" + TablePageDocNo + "\n"; 

      Cursor cursor = db1.rawQuery(selectQuery, null); 
      List<OrderList> OrderList = new ArrayList<OrderList>(); 
      OrderList list = new OrderList(); 
      try { 
       if (cursor.moveToFirst()) { 
        do { 
         list.setProductCode(cursor.getString(cursor.getColumnIndex("ProductCode"))); 
         list.setPrice(Double.parseDouble(cursor.getString(cursor.getColumnIndex("Price")))); 
         list.setQty(cursor.getString(cursor.getColumnIndex("Qty"))); 
         list.setDescription(cursor.getString(cursor.getColumnIndex("Description"))); 
         list.set_ID(Integer.parseInt(cursor.getString(cursor.getColumnIndex("Id")))); 
     //this will more than 1 row in my Sqlite database 
         list.setCondimentDescription(cursor.getString(cursor.getColumnIndex("condimentDescription"))); 
           OrderList.add(list); 
          } while (cursor.moveToNext()); 
         } 

      }catch(Exception e){ 
      } 

     return OrderList; 
    } 
1

はすぐにあなたのコードを見て:

"left outer join TempCSCondiment t4 on t2.SeqNo=t2.SeqNo"+ 

それはここでうまくいかないかもしれません。あなたはT4に参加したいのですが、句の:

t2.SeqNo = t2.SeqNo」

そして私はあなたのデータが複製されていないと仮定(とあなたが別の種類の結果を知っています

+0

これは私の間違いですが、主な問題ではありません。 –

関連する問題