2017-06-10 5 views
0

so bin ich ein Anfänger mit Programmierung und einfach nur selbst zu lehren alles. Ich habe ein paar Dinge zu arbeiten, aber jetzt habe ich das folgende Problem:Android: Intent funktioniert nicht onClick

Szenario: Ich habe 2 Aktivitäten. In einer Aktivität klicke ich auf eine Schaltfläche. onClick es sollte Text im Zeichenfolgenformat aus einer Textdatei im Ordner "Assets" abrufen und an die nächste Aktivität senden und die Zeichenfolge im Feld textView anzeigen.

Das Problem: , die ich jetzt habe, ist: Ich kann auf die Schaltfläche klicken, es öffnet die nächste Aktivität, aber ich sehe keinen Text. Und ich kann nicht wirklich herausfinden, was falsch läuft. Ich habe versucht, eine breakline auf der Schaltfläche während des Debuggens, aber ich kann keinen Sinn der Informationen machen, die der Debugger auf mich wirft. :(

Ich habe den folgenden Code:

Aktivität 1: IndoorMenuActivity.java

public class IndoorMenuActivity extends AppCompatActivity { 
public static final String EXTRA_MESSAGE = "com.example.myapp.MESSAGE"; 

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

    Button btn = (Button)findViewById(R.id.button66); 
    btn.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      Intent intent = new Intent(IndoorMenuActivity.this, ViewActivity.class); 
      String text = ""; 

      try{ 
       InputStream is = getAssets().open("file.txt"); 
       int size = is.available(); 
       byte[] buffer = new byte[size]; 
       is.read(buffer); 
       is.close(); 
       text = new String(buffer); 

      } catch (IOException ex) { 
       ex.printStackTrace(); 
      } 
      intent.putExtra(EXTRA_MESSAGE, text); 
      startActivity(intent); 
     } 
    }); 
} 
} 

Aktivität 2: ViewActivity.java

public class ViewActivity extends AppCompatActivity { 

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

    // Get the Intent that started this activity and extract the string 
    Intent intent = getIntent(); 
    String message = intent.getStringExtra("com.example.myapp.MESSAGE"); 

    // Capture the layout's TextView and set the string as its text 
    TextView textView = (TextView) findViewById(R.id.tv_text); 
    textView.setText(message); 
    } 
} 

Und mein Manifest-Datei: AndroidManifest.xml

<application 
    android:allowBackup="true" 
    android:icon="@mipmap/ic_launcher" 
    android:label="@string/app_name" 
    android:roundIcon="@mipmap/ic_launcher_round" 
    android:supportsRtl="true" 
    android:theme="@style/AppTheme"> 
    <activity android:name=".MainActivity"> 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 

      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 
    <activity android:name=".GeneralInformationActivity" /> 
    <activity android:name=".IndoorMenuActivity" > 
     <intent-filter> 
      <action android:name="android.intent.action.SEND"/> 
      <category android:name="android.intent.category.DEFAULT"/> 
      <data android:mimeType="text/plain"/> 
     </intent-filter> 
    </activity> 
    <activity android:name=".OutdoorMenuActivity" /> 
    <activity android:name=".ViewActivity" /> 
    <activity android:name=".DatabaseMenuActivity" /> 
    <activity android:name=".ToolsMenuActivity" /> 
    <activity android:name=".SplashActivity"></activity> 
</application> 

Ich weiß nicht, wie ich das lösen soll oder wo ich nach den richtigen Informationen suchen soll, damit ich sehen kann, wo ich falsch gelaufen bin. Ich habe Code einfach zerstückelt und zerschnitten und das meiste funktionierte irgendwie. Aber mit diesem tieferen Zeug bin ich im Grunde verloren. Und um es ein bisschen schwieriger zu machen: ich kenne keine Standard-Programmierpraktiken oder Begriffe, die damit einhergehen, so dass einige einfache Erklärungen und Hilfe sehr geschätzt werden. Prost und vielen Dank im Voraus.

+0

überprüfen Sie Ihre logcat –

+1

Sie sollten folgenden Schritt überprüfen: 1. Direkt 'intent.putExtra (EXTRA_MESSAGE, "diese Testnachricht ist");' sicher grundlegenden Code Arbeit 2. Lesen Sie Ihre Log (Android-Monitor auf machen IDE), wird es stackTrace zeigen, wenn es aufgrund Ihrer Datei eine Ausnahme gibt (nicht vorhanden, falscher Pfad, Zulässigkeit ....) 3. Überprüfen Sie Ihr Layout-Textfeld, ob sein Wert irgendwo in Ihrem Code zurückgesetzt wird. – TranVo

+0

Danke für den Vorschlag. Ich habe einige Fehlermeldungen und postete sie unten in einer Antwort. – user2645886

Antwort

1

In ViewActivity.java sieht alles gut aus, also sage ich Debug Ihre IndoorMenuActivity.java.
Lernen mit Log, diese Hilfe debuggen Code zu arbeiten:
Platz Log.e("MY_TEXT", "text=" + text); nach text = new String(buffer);
Dann überprüfen Sie die Android-Monitor und suchen Sie nach dem „my_text“, wird es in rot.
Wenn Sie es nicht sehen, das würde bedeuten, die Datei etwas schief gelaufen ist beim Lesen, jetzt eine andere Log hinzu: Log.e("MY_TEXT", "below is the error"); dieses Mal vor dem ex.printStackTrace();
bis Zusammengefasst:

try{ 
      InputStream is = getAssets().open("file.txt"); 
      int size = is.available(); 
      byte[] buffer = new byte[size]; 
      is.read(buffer); 
      is.close(); 
      text = new String(buffer); 
      Log.e("MY_TEXT", "text=" + text); 

     } catch (IOException ex) { 
      `Log.e("MY_TEXT", "below is the error"); 
      ex.printStackTrace(); 
     } 
+0

ich bekomme die erors aber – user2645886

0

ich denke, es könnte Probleme beim Lesen des Inhalts von InputStream. Bitte überprüfen Sie die Ausnahme (in Catch-Block) in Log und überprüfen Sie dies erneut. Wenn irgendein Fehler dort bitte diesen Code zum Lesen von Daten von InputStream verwenden

0

Welp, rufen Sie mich einfach dumm. -.- fand ich den Fehler ... i die Folge von Input misttyped ist = getAssets(). Open ("file.txt")

ich den Text für dieses Forum bearbeitet, sondern auf den Code zu lesen i gerade gemerkt habe ich vergessen, den ersten buchstaben im strippath mit einem capital zu machen, wie ich es im assetfolder getan habe.

Wie auch immer, vielen Dank für die Informationen und Hilfe. Es funktioniert jetzt wie es soll.

Verwandte Themen