0

所以我想實現一個Cursor到我的類,所以我可以填充我的數據網格(不知道這是否正確的方式來做到這一點,當我需要使用可調用SP和準備語句)這是我從這個guide here做,但我得到了在AsyncTask PreparedStatement上的光標實現

DataGridActivity.Itemnumber不是抽象的,在光標不重寫抽象方法響應(束)

我不知道如何實現的抽象方法這裏作爲我 正常使用getstring methode爲我準備好的語句不知道是否有某種方式我可以做到這一點,而不是來填充我的網格,而不是使用遊標

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的活動類

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

您必須Itemnumber類中重寫最後一個方法。 這種方法在interface Cursor,並命名爲:respond(Bundle)

所以,如果你Itemnumber類實現Cursor,請加

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

和實施,你的方法必須返回

+0

不知道我是否做得對,因爲我仍然在遊標中實現抽象metode movertofirst() –

+0

好的,所以我認爲,你可以擴展不同的抽象類,從Cursor接口實現所有必要的方法,否則你有下一個問題,所以你必須實現下一個方法,並且一次又一次。但是現在,你擴展了AsyncTask,所以這個問題可以在設計 – MateuszW90

+0

,這似乎是不合邏輯的,這樣做可能會有其他方式通過使用準備語句中的數據源代替 –