0

그래서 내 DataGrid를 채울 수 있도록 Cursor를 구현하려고합니다 (SP와 Prepared Statement에 대해 callable을 사용해야 할 때 올바른 방법인지는 확실하지 않습니다) 이는 내가이 guide here 만든하지만 난AsyncTask에서 PreparedStatement에 대한 커서 구현

DataGridActivity.Itemnumber 추상적하지 얻고

내가 추상 메소드를 구현하는 방법을 잘 모르겠습니다 커서에서 추상 메소드의 응답 (번들)를 대체하지 않습니다 here as i normaly는 내 준비된 문장에 대해 getstring methode를 사용합니다. 어떻게 든이 있다면 내가 대신 내 그리드를 채우기 위해 그렇게하는 대신 당신은 Itemnumber 클래스의 마지막 메소드를 오버라이드 (override) 할 필요

Cursor csr = new Itemnumber(); 
//create DataTable object 
DataTable dtDataSource = new DataTable(); 
//define column 
dtDataSource.addAllColumns(new String[]{"column_1", "column_2","column_3", "column_4}); 
//create DataRow 
DataTable.DataRow drRow; 

//populate data from cursor into DataSource 
if(csr.moveToFirst()){ 
    do{ 
     drRow = dtDataSource.newRow(); 
     drRow.set("column_1", csr.getString(csr.getColumnIndex("field_1"))); 
     drRow.set("column_2", csr.getString(csr.getColumnIndex("field_2"))); 
     drRow.set("column_2", csr.getString(csr.getColumnIndex("field_3"))); 
     drRow.set("column_4", csr.getString(csr.getColumnIndex("field_4"))); 

     dtDataSource.add(drRow); 
    } while(csr.moveToNext()); 
    csr.close(); 
}   
/** 
* Prepare the DataGrid 
*/ 
//initialize DataGrid 
DataGrid dg = (DataGrid)findViewById(R.id.datagrid); 
//define column style, bond each DataGrid column by DataTable column 
dg.addColumnStyles(new DataGrid.ColumnStyle[]{ 
     new DataGrid.ColumnStyle(getString(R.string.ID), "column_1", 80), 
     new DataGrid.ColumnStyle(getString(R.string.ItemNumber), "column_2", 120), 
     new DataGrid.ColumnStyle(getString(R.string.Trashed), "column_3", 100), 
     new DataGrid.ColumnStyle(getString(R.string.Sold), "column_4", 150)  
}); 
//set the DataTable as source 
dg.setDataSource(dtDataSource); 
//generate the DataGrid 
dg.refresh(); 
+0

예에 가까운 것이 될 듯하지 않았다 가져 오기 android.database.Cursor 이잖아; –

답변

0

미리 작성된 진술을 사용하면됩니다.

모든 추상적 인 methodes 및 인터페이스를 구현으로

논리적

public class DataGridActivity extends Activity { 
    /** Called when the activity is first created. */ 
    ConnectionClass connectionClass; 
    //define column 
    DataTable.DataRow drRow; 
    DataTable dtDataSource = new DataTable(); 
    Button btnsearch; 
    DataGrid dg; 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.datagridt); 
     dg = (DataGrid)findViewById(R.id.datagrid); 
     btnsearch = (Button) findViewById(R.id.btnsearch); 
     connectionClass = new ConnectionClass(this.getApplicationContext()); 


     /** 
     * Prepare the DataGrid 
     */ 
     //initialize DataGrid 
     //define column style, bond each DataGrid column by DataTable column 
       dg.addColumnStyles(new DataGrid.ColumnStyle[]{ 
       new DataGrid.ColumnStyle(getString(R.string.dito_nr), "column_1", 80), 
       new DataGrid.ColumnStyle(getString(R.string.Biltype), "column_2", 120), 
       new DataGrid.ColumnStyle(getString(R.string.kort_nr), "column_3", 100), 
       new DataGrid.ColumnStyle(getString(R.string.Del_Type), "column_4", 150) 

     }); 

    } 


    public class Itemnumber extends AsyncTask<String,String,String> { 
     String z = ""; 
     @Override 
     protected void onPreExecute() { 
      dtDataSource.addAllColumns(new String[]{"column_1", "column_2","column_3", "column_4"}); 
      drRow = dtDataSource.newRow(); 
      dtDataSource.add(drRow); 
      dg.setDataSource(dtDataSource); 
      dg.refresh(); 
     } 
     @Override 
     protected void onPostExecute(String r) { 
     } 

     @Override 
     protected String doInBackground(String... params) { 
      try { 
       Connection con = connectionClass.CONN(); 
       if (con == null) { 
        z = "Error in connection with SQL server"; 
       } else { 
        PreparedStatement preparedStatement = null; 
        String sqli = "select ID,ItemNumber,Trashed,Sold from [file].[Item]"; 
        preparedStatement = con.prepareStatement(sqli); 
        ResultSet rs = preparedStatement.executeQuery(); 
        if (rs.next()) { 
         //create DataRow 
         drRow.set("column_1", rs.getString(1)); 
         drRow.set("column_2", rs.getString(2)); 
         drRow.set("column_3", rs.getString(3)); 
         drRow.set("column_4", rs.getString(4)); 

        } else { 
        } 

       } 
      } catch (Exception ex) { 
       z = "Exceptions"; 
      } 
      return z; 

     } 
    } 

    public void btnsearch (View view) { 
     // TODO Auto-generated method stub 

     Itemnumber item = new Itemnumber(); 
     item.execute(""); 
    } 
} 
0

public class Itemnumber extends AsyncTask<String,String,String> implements Cursor { 
    String z = ""; 
    @Override 
    protected void onPreExecute() { 
    } 
    @Override 
    protected void onPostExecute(String r) { 
    } 

    @Override 
    protected String doInBackground(String... params) { 
     try { 
      Connection con = connectionClass.CONN(); 
      if (con == null) { 
       z = "Error in connection with SQL server"; 
      } else { 
       PreparedStatement preparedStatement = null; 
       String sqli = "select ID,ItemNumber,Trashed,Sold from [file].[Item] where [ItemNumber] =?"; 
       preparedStatement = con.prepareStatement(sqli); 
       preparedStatement.setString(1, "test"); 
       ResultSet rs = preparedStatement.executeQuery(); 
       if (rs.next()) { 
       } else { 
       } 
      } 
     } catch (Exception ex) { 
      z = "Exceptions"; 
     } 
     return z; 
    } 
    @Override 
    public Bundle respond(Bundle extras){ 
     moveToFirst(); 
     return Bundle.EMPTY; 
    } 
} 

내에서 Datagrid 활동 클래스의 커서를 사용하여 수 있을까. 이 방법은 interface Cursor이며, 이름 : 귀하의 클래스 ItemnumberCursor을 구현하는 경우 respond(Bundle)

따라서, 귀하의 방법은 반환해야하는지

@Override 
Bundle respond(Bundle extras){ 
    return Bundle.EMPTY; 
} 

및 구현을 추가하십시오 내가 어떻게 알아 냈

+0

커서가 추상 metode movertofirst()를 구현할 때 제대로 처리했는지 확실하지 않습니다. –

+0

커서 인터페이스에서 필요한 모든 메서드를 구현하는 다른 추상 클래스를 확장 할 수 있습니다. 그렇지 않으면 다음 문제가 발생합니다. 그래서 당신은 다음 방법을 반복적으로 구현해야합니다. 하지만 이제 AsyncTask를 확장하면 문제가 디자인에 포함될 수 있습니다. – MateuszW90

+0

그런 식으로 논리를 수행하지 않는 것 같습니다. 대신 준비된 명령문에서 데이터 소스를 사용하여 다른 방법으로 대체 할 수 있습니다. –