0

Also ich versuche, einen Cursor zu meiner Klasse zu implementieren, so dass ich mein Datagrid ausfüllen kann (nicht sicher, ob dies der richtige Weg ist, wenn ich für SP und vorbereitete Anweisung aufrufbar verwenden muss) die ich gemacht von diesem guide here aber ich bekommt einCursor implementieren auf PreparedStatement in AsyncTask

DataGridActivity.Itemnumber nicht abstrakt ist und überschreibt nicht abstrakte Methode respond (Bundle) in Cursor

ich bin nicht sicher, wie die abstrakte Methode zu implementieren hier als ich verwende normalerweise getstring Methode für meine vorbereiteten Aussagen fragen, ob es irgendwie ich, dass stattdessen tun könnte mein Gitter anstatt den Cursor

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; 
    } 
} 

Meine Datagrid Aktivitätsklasse

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

ja zu sein, etwas schien das ist der Import android.database.Cursor; –

Antwort

0

ich, wie herausgefunden zu Mach es einfach mit meiner vorgefertigten Aussage.

Wie alle abstrakten methodes und Schnittstellen der Umsetzung nicht in der Nähe von logischen

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

Sie letzte Methode in Itemnumber Klasse außer Kraft füllen müssen. Diese Methode ist in interface Cursor und benannt: respond(Bundle)

Also, wenn Ihre Klasse ItemnumberCursor implementiert, bitte

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

und umgesetzt hinzufügen, was Ihre Methode zurückgeben muss

+0

nicht sicher, ob ich es richtig gemacht hatte, wie ich immer noch implementieren abstrakte Metode movertofirst() im Cursor –

+0

Ok, so denke ich, können Sie verschiedene abstrakte Klasse zu erweitern, die alle notwendigen Methoden von Cursor-Schnittstelle implementieren, sonst haben Sie das nächste Problem, Sie müssen also die nächste Methode implementieren und immer wieder. Aber jetzt, Sie erweitern AsyncTask, so dass das Problem im Design – MateuszW90

+0

sein kann, das scheint nicht logisch zu sein, es so zu tun, dann könnte es ein anderer Weg um es wahrscheinlich durch die Verwendung der Datenquelle in der vorbereiteten Anweisung stattdessen sein –

Verwandte Themen