Hilfe Unterprogramm startet nicht

  • 8 Antworten
  • Letztes Antwortdatum
K

kobra83

Fortgeschrittenes Mitglied
14
Ich habe ein GROßES PROBLEM.

Wieso kann ich nicht per Intent ein Unterprogramm starten? Die Anwendung stürzt einfach ab.


Funktion wird per Button aufgerufen in der MainActivity
i ist eine laufvariable vom typ int
public void rein(View view){
final Intent intent = new Intent(this,ausgabe.class);
intent.putExtra("lauf", i);
startActivity(intent);

}
ausgabe.java

public class ausgabe extends Activity {

.....



Intent intent = getIntent();
int i = intent.getExtra("lauf");

//@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.aus);
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {

MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.mainmenu, menu);
return true;
}

........

}

Manifest:
<activity
android:name=".MainActivity"
android:label="@string/title_activity_main" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name=".ausgabe" android:label="@string/app_name">

</activity>

Kann mir jemand sagen was ich falsch mache.
 
-> logcat ausgaben beachten

Gesendet von meinem Galaxy Nexus mit der Android-Hilfe.de App
 
Logcat habe ich einen Fehler gefunden danke für den Tip.

Jetzt habe ich aber ein anderes Problem:

Syntax error on token ";", , expected

In der Zeile
Intent intent = getIntent();
 
Zuletzt bearbeitet:
Die Zeile stimmt so - der Fehler ist mit Sicherheit irgendwo davor.
 
Ich Poste mal den kompletten Quelltext nur Kundendaten werden entfernt

package com.example.p_zeit;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Date;

import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog;
import android.app.AlertDialog.Builder;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
import android.os.Environment;
import android.text.format.DateFormat;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

public class ausgabe extends Activity {

//Variablen deklaration


String ankunft_soll_array[] = {"16:00", "16:42", "17:06", "17:31", "17:44","18:01", "18:17", "18:37","18:48","19:04", "19:18","19:28",
"19:42","19:52","20:02","20:12","20:35","20:45","20:58","21:08","21:29","21:41","22:04","22:31","23:04","00:48"};


String abfahrt_soll_array[] = { "16:15","16:51","17:15","17:43","17:56","18:12","18:34","18:46","18:57","19:13","19:27","19:37",
"19:51","20:01","20:11","20:33","20:44","20:57","21:07","21:17","21:38","21:53","22:23","22:41","00:14","Gar nicht"};

String ankunft_ist_array[] = {"0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","geschlossen bis 2013","0","0","0","0","-1"};

String abfahrt_ist_array[] = {"0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","geschlossen bis 2013","0","0","0","0","-1"};

static String lieferung_array_2[] = {"0","1","1","2","2","2","2","1","3","1","1","1","1","1","1","5","1","2","1","1","4","1","1","3","6","7"};

String offen_array[] = {"immer","11:00-23.00","15:00-18:00","17:00-0:00","12:00-0:00","15:00-0:00","15:00-0:00","11:30-0:00",
"17:00-23:00","18:00-0:00","12:00-22:00","16:00-0:00","17:00-0:00","17:30-0:00","15:30-0:00",
"17:00-0:00","18:00-0:00","17:00-0:00","17:00-0:00","0:00-23:59","17:00-0:00",
"geschlossen bis 2013","12:00-0:00","19:00-0:00","immer","immer"};

static String local_array[] = { Kundendaten wurden entfernt};

String string_Array_test[]={"0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0"};
String hallo;


Intent intent = getIntent();
int i = intent.getExtra("lauf");


//@Override
public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);
setContentView(R.layout.aus);

}

@Override
public boolean onCreateOptionsMenu(Menu menu) {

MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.mainmenu, menu);
return true;
}

// Deklaration Auswahlmenu
@Override
public boolean onOptionsItemSelected(MenuItem item) {


if (item.toString().equals("blockieren")) {
blockieren();
}

if (item.toString().equals("freigeben")) {
freigeben(null);
}

if (item.toString().equals("geschlossen")){
geschlossen(null);
}

if (item.toString().equals("save")){
save(null);
}

if (item.toString().equals("laden")){
zwischen_laden();
}

if (item.toString().equals("Info")){
showDialog(50);
}

return true;

}

//Ausgabe für jedem Standort
public void Standort ( int i){

TextView Loc=(TextView)findViewById(R.id.Local2);
TextView off=(TextView)findViewById(R.id.offen);
TextView lie=(TextView)findViewById(R.id.lieferung);
TextView Anks=(TextView)findViewById(R.id.Anf_soll);
TextView Abfs=(TextView)findViewById(R.id.Abf_soll);
TextView Anki=(TextView)findViewById(R.id.Anf_ist);
TextView Abfi=(TextView)findViewById(R.id.Abf_ist);

Loc.setText(String.valueOf(local_array));
off.setText(String.valueOf(offen_array));


//If-Schleifen für die korrekte Belieferung

Kundendaten wurden entfernt

Anki.setText(String.valueOf(ankunft_ist_array));
Abfi.setText(String.valueOf(abfahrt_ist_array));
Anks.setText(String.valueOf(ankunft_soll_array));
Abfs.setText(String.valueOf(abfahrt_soll_array));
}

//Dialog-Ausgabe
protected Dialog onCreateDialog(int id){

switch (id) {
case 10:
Builder builder = new AlertDialog.Builder(this);
builder.setMessage("Daten wurden gespeichert");
builder.setCancelable(true);
builder.setPositiveButton("OK", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
//MainActivity.this.finish();
}
});

if(id==10){
AlertDialog dialog = builder.create();
dialog.show();
}

case 20:
Builder builder1 = new AlertDialog.Builder(this);
builder1.setMessage("Fehler Datei wurde nicht gespeichert");
builder1.setCancelable(true);
builder1.setPositiveButton("OK", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
//MainActivity.this.finish();
}
});


if(id==20){
AlertDialog dialog = builder1.create();
dialog.show();
}

case 30:
Builder builder2 = new AlertDialog.Builder(this);
builder2.setMessage("Daten wurden geladen");
builder2.setCancelable(true);
builder2.setPositiveButton("OK", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
//MainActivity.this.finish();
}
});

if(id==30){
AlertDialog dialog = builder2.create();
dialog.show();
}
}
return super.onCreateDialog(id);
}

.........
SpeicherFunktionen hab ich jetzt mal hier entfernt da diese Funktionieren

.........
}

}






Der ursprüngliche Beitrag von 18:47 Uhr wurde um 19:02 Uhr ergänzt:

Bei allem was ich bis jetzt im Netz so gelesen habe, müsste es so Funktionieren wie oben gepostet

Komischerweise sobald ich beim Intent nichts mehr übergebe läuft das Programm (startet immer wieder beim Aufruf bei 0 ist aber normal da ich i=0 am anfang sage).

Was mache nur falsch beim übergeben von der Integer Variable
 
Zuletzt bearbeitet:
Hm, also
Code:
Intent intent = getIntent();
kann doch nicht funktionieren, wenn das Objekt ("this") noch nicht initialisiert ist.

Oder wo genau liegt denn jetzt dein Fehler? Ohne Einrückungen ist der Code leider unlesbar ...
 
Hab jetzt mal versucht den Text zu formatieren, aber leider ändert sich nichts. Kannst du das mit dem "this" mal genauer erklären?
 
Nein das ist kein Problem. Die Felder werden quasi beim Konstruktor initialisisert, da ist "this" schon vorhanden. Mir fallen da mehrere Sachen auf:
- Java (und damit Android) Konvention ist, dass Klassen mit Großbuchstaben beginnen, also Ausgabe statt ausgabe.
- In Java macht man ArrayKlammern eher an den Typ statt den namen "public String[] blaArr;". Dann ist schneller klar, dass es ein Array ist.
- intent.getExtra gibt es nicht, das müsste in dem Fall .getIntExtra sein
- In deinem switch() fehlen die break; bei dir macht er weiter (Google Stichwort "fall-through"
- Du solltest dir überlegen ob du die ganzen Daten dort hart drin stehen haben willst oder ob die nicht ausgelagert gehören.
- Intent Geschichten würde ich in der onCreate machen, nicht direkt in der Feld-Definition.
- Beim Zuweisen deines int i ist nicht unbedingt sicher gestellt, dass intent schon definiert ist. Der Compiler kann das theoretisch verschieben wie er will (ich glaube zwar, dass er in einem solchen Fall zuerst intent initialisiert, bin aber nicht sicher)

Deinen Syntax Fehler konnte ich jetzt leider nicht finden und die Datei kompiliert so auch nicht weil die ganzen Methoden fehlen...

Wenn ich mal alles unnötige wegstrippe ist eine } zuviel und das getExtra wird moniert weil es das nicht gibt, ansonsten sieht es "gut" (=syntaktisch korrekt) aus.
 
deek schrieb:
Nein das ist kein Problem. Die Felder werden quasi beim Konstruktor initialisisert, da ist "this" schon vorhanden
Deek hat Recht! :blushing:
Und hier hat er nochmal Recht:
Code:
intent.getExtra gibt es nicht, das müsste in dem Fall .getIntExtra sein
Also diese Methode hier: getIntExtra(String name, int defaultValue)
Und vor allem hier hat deek nochmal Recht:
Code:
In deinem switch() fehlen die break; bei dir macht er weiter (Google Stichwort "fall-through"
Dann sparst du dir auch deine zusätzlichen if-Abfragen.

Zusätzlich ist
Code:
showDialog(int id)
deprecated. Benutze stattdessen DialogFragment dafür, wenn du willst, dass deine App auch in Zukunft sauber läuft.

Und grundsätzlich in Java bitte Klassennamen groß und Methodennamen klein schreiben (das hat deek natürlich auch schon gesagt ...).

Veränderst du eigentlich deine String-Arrays während der Laufzeit? Sonst wäre es ratsam diese zusätzlich als
Code:
final
zu deklarieren.

Ansonsten scheint alles zu passen.
 
  • Danke
Reaktionen: deek

Ähnliche Themen

4
Antworten
10
Aufrufe
1.091
jogimuc
J
Zurück
Oben Unten