Output in zweiter Activity geht nicht

  • Antworten:15
Anfaengeer
  • Forum-Beiträge: 1

23.06.2018, 15:22:55 via Website

Hallo zusammen
Ich arbeite gerade an einer Spracherkennung.
Die Mainactivity sieht wie folgt aus:

package com.example.meinpc.spracherkennung;
import android.content.ActivityNotFoundException;
import android.content.Intent;
import android.speech.RecognizerIntent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.ImageView;
import android.widget.TextView;

import org.w3c.dom.Text;

import java.util.ArrayList;
import java.util.Locale;

public class MainActivity extends AppCompatActivity {

    private TextView voiceInput;
    private ImageView speakButton;
    private final int REQ_CODE_SPEECH_INPUT = 100;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        voiceInput = (TextView) findViewById(R.id.voiceInput);
        speakButton = (ImageView) findViewById(R.id.btnSpeak);

        speakButton.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                askSpeechInput();
            }
        });
    }

    // Showing google speech input dialog

    private void askSpeechInput() {
        Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
        intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL,
                RecognizerIntent.LANGUAGE_MODEL_FREE_FORM);
        intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE, Locale.getDefault());
        intent.putExtra(RecognizerIntent.EXTRA_PROMPT,
                "Hi speak something");
        try {
            startActivityForResult(intent, REQ_CODE_SPEECH_INPUT);
        } catch (ActivityNotFoundException a) {

        }
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);

        switch (requestCode) {
            case REQ_CODE_SPEECH_INPUT: {
                if (resultCode == RESULT_OK && null != data) {

                    ArrayList<String> result = data
                            .getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS);
                    voiceInput.setText(result.get(0));
                    Intent intent=new Intent(this,ZweitesActivity.class);
                    intent.putStringArrayListExtra("result",result);
                    startActivity(intent);
                }
                break;
            }

        }
    }
}

Der folgende Codeabschnitt ist für die Ausgabe zuständig:

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

            ArrayList<String> result = data
                    .getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS);
            voiceInput.setText(result.get(0));
            Intent intent=new Intent(this,ZweitesActivity.class);
            intent.putStringArrayListExtra("result",result);
            startActivity(intent);
        }
        break;
    }

} }

Nun will ich, dass er den Output in einer anderen Activity startet und nicht alles in einer.
Also habe ich eine zweite Activity erstellt und dort den verantwortlichen Code eingefügt, vergeblich.
Meine Frage:
Wie kriege ich es hin, dass der Output der Spracheingabe in einer anderen Activity angezeigt wird?

Lieber Gruss
,

Kommentieren
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

23.06.2018, 15:35:47 via Website

Hallo Anfaengeer,
herzlich wilkommen hier im Forum :)

Deine Daten werde ja per Intent schon an die zweite Activity übergeben, d.h. du musst deine ArrayList mit getIntent().getStringArrayListExtra(key) wieder auslesen und dann die ArrayList auswerten z.b. in einer ListView anzeigen lassen.
Wo genau hängt es denn bzw. was tust du aktuell in Activity Nummer2 ?

LG Pascal //It's not a bug, it's a feature. :) ;)

Hilfreich?
Kommentieren
Xaslka
  • Forum-Beiträge: 1

23.06.2018, 22:44:30 via Website

Hey Pascal
Habe das obengeführte Skript mal ausprobiert und in der zweiten Activity die ArrayList wie folgt

resultat= getIntent().getStringArrayListExtra("resultat");

Dies gebe ich weiter unten wie folgt

intent.putStringArrayListExtra("resultat",result);

Weisst du weshalb ich hier "cannot resolve symbol" erhalte?
Habe bereits folgendes gemacht:
- AndroidStudio neustart
- Sync Gradle
- Invalidate Caches
- Neu importiert
Nichts hilft. Weisst du vielleicht was helfen kann?

Hilfreich?
Kommentieren
Jokel
  • Forum-Beiträge: 1.530

23.06.2018, 23:25:46 via Website

Hallo
Habe meine Antwort geändert war so nicht ganz richtig.

  1. liest du den Intent mit dem falschen Key aus .

    resultat = getIntent().getExtras().getStringArrayList("result");
    oder
    resultat = getIntent().getStringArrayListExtra("result");

  2. beim aus lesen benutzt du die hoffentlich globale Variable "resultat"
    Als Intent Extra willst du aber "result" übergenen das ist eine andere Variable die warscheinlich nicht defienirt ist . Denke das ist ein schreibfehler.
    Der erste Parameter in Gänsefüschen ist der Key der zweite Parameter ist der Wert die Variable die Übergeben werden soll.
    intent.putStringArrayListExtra("result",resultat);

LG J.

— geändert am 24.06.2018, 13:01:44

Hilfreich?
Pascal P.
Kommentieren
asddsasdasdas
  • Forum-Beiträge: 5

27.06.2018, 09:59:54 via Website

Hallo zusammen
Bin auch an diesem Projekt dran und finde diesen Code recht gut.
Nun eine Frage:
Wie kann ich den Text "ihre Ausgabe" + die Ausgabe in der zweiten Activity ermöglichen?
- den Code "intent.putStringArrayListExtra("result",resultat);" habe ich in der zweiten Activity im OnCreate drin!

Hilfreich?
Kommentieren
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

27.06.2018, 10:18:12 via Website

das put extra brauchst du aber in der ersten Activity da wo du die Liste an die 2. Activity übergeben willst.

LG Pascal //It's not a bug, it's a feature. :) ;)

Hilfreich?
Jokel
Kommentieren
asddsasdasdas
  • Forum-Beiträge: 5

27.06.2018, 10:21:17 via Website

Also der muss in die erste Activity beim onCreate rein?
Und wo kommt dieser Codeabschnitt hin?

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

            ArrayList<String> result = data
                    .getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS);
            voiceInput.setText(result.get(0));
            Intent intent=new Intent(this,ZweitesActivity.class);
            intent.putStringArrayListExtra("result",result);
            startActivity(intent);
        }
        break;
    }

} }
Hilfreich?
Kommentieren
Jokel
  • Forum-Beiträge: 1.530

27.06.2018, 10:29:14 via Website

HI asddsasdasdas
Die Zeiele "intent.putStringArrayListExtra("result",resultat);" gehört nicht in die zweite Activity.
Mit diesem Code gibst du dem Intent der die zweite Activty startet die Arrayliste mit. Damit du die in der zweiten Activity wieder auslesen kannst.

In der zweiten dann
ArrayList resultat = getIntent().getStringArrayListExtra("result");

Hilfreich?
Pascal P.
Kommentieren
Jokel
  • Forum-Beiträge: 1.530

27.06.2018, 10:34:38 via Website

Pascal unsere post haben sich Überschnitten.

Hilfreich?
Kommentieren
asddsasdasdas
  • Forum-Beiträge: 5

27.06.2018, 10:43:12 via Website

Im onCreate von der ersten Activity diese Zeile einfügen?
intent.putStringArrayListExtra("result",resultat);

Hilfreich?
Kommentieren
Jokel
  • Forum-Beiträge: 1.530

27.06.2018, 10:46:49 via Website

Der Code den du gepostet hattest war doch richtig.
Vor allen nicht die Variable "resultat" in der Methode wird die Variable result erstellt und die willst du übergeben.

Glaube du schaust dir nochmal an was Intenst sind und was sie machen.

— geändert am 27.06.2018, 10:53:57

Hilfreich?
Kommentieren
asddsasdasdas
  • Forum-Beiträge: 5

27.06.2018, 11:00:35 via Website

Ich verstehe nicht's mehr, da Jokel das sagt und Pascal dies x)
Also
A) Wo muss diese Zeile hin im ersten Activity?
intent.putStringArrayListExtra("result",resultat);
Ist das beim onCreate Aufruf
B) Kann ich das auch auslesen lassen so das der User in der zweiten Activity vielleicht das angezeigt bekommt:
Haben Sie das gesagt //Usereingabe//

Hilfreich?
Kommentieren
Jokel
  • Forum-Beiträge: 1.530

27.06.2018, 11:26:48 via Website

A) nach dem du den Intent erstellt hast ("Intent intent=new Intent(this,ZweitesActivity.class);") und bevor du Ihn abschickst mit ("startActivity(intent);").
ob das nun in der onCreate ist oder in einenem Listner kommt auf deinen Code an.

B) Klar kannst du es in der zweiten Auslesen darum geht es ja.
das ist der zweite Code das machst du ambesten in der onCreate der zweiten in eine Globale Variable die kannst du dann überal lesen und benutzen zum ausgeben.

Pascal und ich wir haben uns nicht wiedersprochen .

— geändert am 27.06.2018, 11:27:32

Hilfreich?
Kommentieren
asddsasdasdas
  • Forum-Beiträge: 5

27.06.2018, 11:29:37 via Website

Welcher zweite Code? x)

Hilfreich?
Kommentieren
Jokel
  • Forum-Beiträge: 1.530

27.06.2018, 11:35:51 via Website

resultat = getIntent().getStringArrayListExtra("result");

wie soll ich das Beschreiben.
ein Intent ist ein Paket was verschickt wird . wenn der Empfänger es bekommt startet er die Activity.
so nun kannst du was in das packet rein packen oder nicht das machst du mit "put"
auspacken kannst du es mit "get".

Hilfreich?
asddsasdasdas
Kommentieren
Jokel
  • Forum-Beiträge: 1.530

27.06.2018, 11:42:10 via Website

public class ZweiteActivity extends AppCompatActivity {

ArrayList resultat;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_zwei);


    resultat = getIntent().getStringArrayListExtra("result");

    }

}

Hilfreich?
Pascal P.
Kommentieren