[OFFEN] Übereinstimmung Spracherkennung Datenbank finden

  • 5 Antworten
  • Letztes Antwortdatum
D

DMD-OL

Neues Mitglied
0
Hi
ich versuche den Result meiner Spracherkennung mit dem Inhalt meiner Datenbank zu vergleichen und
die/den Treffer dann in einem CustomAlertDialog darzustellen.
Aber ich bekomm es nicht hin:
Code:
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (requestCode == REQ_CODE_SPEECH_INPUT){
            if (resultCode == RESULT_OK && data != null){

                ArrayList<String> result = data.getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS);
                textView.setText(result.get(0));

                ArrayList<String> datenList = new ArrayList<String>();
                ArrayList<String> arrayList = new ArrayList<String>();

                List<MaterialModel> materialList = myDB.getAllMaterial();

                for (int i = 0; i < materialList.size(); i++) {
                    arrayList.clear();
                    MaterialModel material = materialList.get(i);

                    String name = material.getName() == null ? "" : material.getName();
                    String article = material.getArticle() == null ? "" : material.getArticle();
                    String description = material.getDescription() == null ? "" : material.getDescription();

                    // Bis hier hin funktioniert alles
                    
                    if(description.equals(result.get(0))) {
                        arrayList.add(name);
                        arrayList.add(article);
                        arrayList.add(description);

                    }else {
                        arrayList.add("???");
                        arrayList.add("???");
                        arrayList.add("???");
                    }

                    datenList.add(arrayList.toString());
                }

                CustomAlertDialog.createMessageOk(MainActivity.this, "Übereinstimmung:" ,datenList.toString()).show();
                //CustomAlertDialog.createMessageOk(MainActivity.this, "Übereinstimmung:" ,result.get(0)).show();
            }
        }
    }
Was mach ich denn falsch. Sind das beides Strings?
 
Aber ich bekomm es nicht hin:
Was genau bekommst du denn nicht hin? Woran scheitert es?

off topic: Deine Lösung sieht auf den ersten Blick nicht wirklich performant aus.
Wäre es nicht sinnvoll die Datenbank die ganze Auswertung machen zu lassen? Z.B. mit einer LIKE Klause?!


lg. Dagobert
 
  • Danke
Reaktionen: swa00
das wäre die beste lösung. nur wie?
habs so versucht:

Datenbank JAVA:
Code:
public List<MaterialModel> getMaterialWhere(String resultstr) {


        String query = SELECT_CLAUSE + TABLE_NAME + WHERE_CLAUSE + MATERIAL_COLUMN_BESCHREIBUNG + EQUALS + resultstr;


        // WOBEI ICH FOLGENDE DEFINITIONEN GANZ OBEN HABE:

        //public static final String DATABASE_NAME = "Datenbank.db";
        //private static final int DATABASE_VERSION = 1;

        //public static final String TABLE_NAME = "TABLENAME";
   
        //public static final String MATERIAL_COLUMN_ID = "ID";
        //public static final String MATERIAL_COLUMN_NAME = "NAME";
        //public static final String MATERIAL_COLUMN_ARTIKEL = "ARTIKEL";
        //public static final String MATERIAL_COLUMN_BESCHREIBUNG = "BESCHREIBUNG";

        //private static final String SELECT_CLAUSE = "SELECT * FROM ";
        //private static final String WHERE_CLAUSE = " WHERE ";
        //private static final String AND_CLAUSE = " AND ";
        //private static final String EQUALS = " = ";
        //private static final String QUESTIONMARK = " ? ";

        List<MaterialModel> materialList = new ArrayList<>();


        SQLiteDatabase db = this.getWritableDatabase();
        Cursor c = db.rawQuery(query, null);

        // looping through all rows and adding to list
        if (c.moveToFirst()) {
            do {
                MaterialModel material = new MaterialModel();
                material.setId(c.getInt((c.getColumnIndex(MATERIAL_COLUMN_ID))));
                material.setName(c.getString(c.getColumnIndex(MATERIAL_COLUMN_NAME)));
                material.setArticle(c.getString(c.getColumnIndex(MATERIAL_COLUMN_ARTIKEL)));
                material.setDescription(c.getString(c.getColumnIndex(MATERIAL_COLUMN_BESCHREIBUNG)));

                // adding to list
                materialList.add(material);
            } while (c.moveToNext());

        }
        c.close();
        return materialList;

    }

und MainActivity.java:
Code:
@Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (requestCode == REQ_CODE_SPEECH_INPUT){
            if (resultCode == RESULT_OK && data != null){

                ArrayList<String> result = data.getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS);
                textView.setText(result.get(0));

                ArrayList<String> datenList = new ArrayList<>();
                ArrayList<String> arrayList = new ArrayList<String>();

                List<MaterialModel> materialList = myDB.getMaterialWhere(result.get(0).toString());

                if (materialList.size() != 0) {
                    for (int i = 0; i < materialList.size(); i++) {

                        MaterialModel material = materialList.get(i);

                        String name = material.getName() == null ? "" : material.getName();
                        String article = material.getArticle() == null ? "" : material.getArticle();
                        String description = material.getDescription() == null ? "" : material.getDescription();
                  
                        arrayList.add(name);
                        arrayList.add(article);
                        arrayList.add(description);
                        datenList.add(arrayList.toString());
                        arrayList.clear();

                   }
                   if (datenList.size() != 0) {
                       CustomAlertDialog.createMessageOk(MainActivity.this, "Übereinstimmung:", datenList.toString()).show();
                  } else {
                       CustomAlertDialog.createMessageOk(MainActivity.this, "Übereinstimmung:", "Keine Übereinstimmung gefunden!").show();
                   }
                }else{
                    CustomAlertDialog.createMessageOk(MainActivity.this, "Übereinstimmung:", "Die Datenbank ist leer!").show();
                }
            }
        }
    }
Der Code bricht mit einem fatal.error komplett ab :(
Mittlerweile bin ich mir sicher, dass String query = SELECT_CLAUSE + TABLE_NAME + WHERE_CLAUSE + MATERIAL_COLUMN_BESCHREIBUNG + EQUALS + resultstr;
falsch ist.
nur zum verständnis: ich habe versucht, result.get(0), den ich von der Spracherkennung erhalte, mit dem/den Datenbankeintrag/-einträgen "BESCHREIBUNG" (MATERIAL_COLUMN_BESCHREIBUNG) zu vergleichen, und wenn gleich dieses auszugeben :)
 
Zuletzt bearbeitet:
Der Code bricht mit einem fatal.error komplett ab :(
Was heißt das? oO Du solltest mal die relevanten Log-Stellen mit anhängen.
 
  • Danke
Reaktionen: swa00
Es ist alles vorhanden. Ganz oben die Datenbank unten drunter der Zugriff auf die Datenbank mit der suchvariablen result.get(0), nach dir in der Datenbank gesucht werden soll.

Was soll denn fehlen?
 
Was soll denn fehlen?

Na das, was uns hilft Dir zu helfen :
Der Code bricht mit einem fatal.error komplett ab

Wo ist denn dein fatal Error ? was sagt der Errorlog in AS ? Hast du den dir mal angeschaut ?

Ergo : Wir können schlecht rätseln, wo bei dir der Code genau abstürzt.

Für die Zukunft : IMMER einen Errorlog mitschicken .
 
Zurück
Oben Unten