setText bei EditText führt zu Absturz

A

AdventureCraft

Gast
Hallo,
ich habe folgendes Problem:

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

if (savedInstanceState == null) {
getSupportFragmentManager().beginTransaction()
.add(R.id.container, new PlaceholderFragment())
.commit();
}

this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

SharedPreferences settings = getSharedPreferences(PREFERENCES, MODE_PRIVATE);
String username = settings.getString("username", "");
String password = settings.getString("password", "");
boolean autologin = settings.getBoolean("autologin", true);

EditText txtUsername = (EditText)this.findViewById(R.id.txtUsername);
txtUsername.setText(username); // <- Problem

if(autologin && checkUser(username, password)) {
login(username, password);
}
}

Die gekennzeichnete Zeile "txtUsername.setText(username);" führt zum Absturz. Wenn ich die Zeile auskommentiere geht's.

LogCat:

03-30 12:48:57.590: E/AndroidRuntime(1071): FATAL EXCEPTION: main
03-30 12:48:57.590: E/AndroidRuntime(1071): Process: redcross.hb.jugend, PID: 1071
03-30 12:48:57.590: E/AndroidRuntime(1071): java.lang.RuntimeException: Unable to start activity ComponentInfo{rc.hb.j/rc.hb.j.MainActivity}: java.lang.NullPointerException
03-30 12:48:57.590: E/AndroidRuntime(1071): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2195)
03-30 12:48:57.590: E/AndroidRuntime(1071): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2245)
03-30 12:48:57.590: E/AndroidRuntime(1071): at android.app.ActivityThread.access$800(ActivityThread.java:135)
03-30 12:48:57.590: E/AndroidRuntime(1071): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196)
03-30 12:48:57.590: E/AndroidRuntime(1071): at android.os.Handler.dispatchMessage(Handler.java:102)
03-30 12:48:57.590: E/AndroidRuntime(1071): at android.os.Looper.loop(Looper.java:136)
03-30 12:48:57.590: E/AndroidRuntime(1071): at android.app.ActivityThread.main(ActivityThread.java:5017)
03-30 12:48:57.590: E/AndroidRuntime(1071): at java.lang.reflect.Method.invokeNative(Native Method)
03-30 12:48:57.590: E/AndroidRuntime(1071): at java.lang.reflect.Method.invoke(Method.java:515)
03-30 12:48:57.590: E/AndroidRuntime(1071): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
03-30 12:48:57.590: E/AndroidRuntime(1071): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
03-30 12:48:57.590: E/AndroidRuntime(1071): at dalvik.system.NativeStart.main(Native Method)
03-30 12:48:57.590: E/AndroidRuntime(1071): Caused by: java.lang.NullPointerException
03-30 12:48:57.590: E/AndroidRuntime(1071): at redcross.hb.jugend.MainActivity.onCreate(MainActivity.java:34)
03-30 12:48:57.590: E/AndroidRuntime(1071): at android.app.Activity.performCreate(Activity.java:5231)
03-30 12:48:57.590: E/AndroidRuntime(1071): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
03-30 12:48:57.590: E/AndroidRuntime(1071): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2159)
03-30 12:48:57.590: E/AndroidRuntime(1071): ... 11 more

Ich hoffe Ihr könnt mir helfen.
 
R.id.txtUsername gibt es nicht.

schau im layout ob es diese textview wirklich gibt? da dürfte es irgendwo ein problem geben.
 
Vermutlich gibt es das Textfeld in der activity_main.xml aber im PlaceholderFragment wird ein anderes Layout gesetzt :)
 
R.id.txtUsername gibt es (wird von ADT auch erkannt/färbig angezeigt)

Das PlaceholderFragment hab ich Standard gelassen:

public static class PlaceholderFragment extends Fragment {
public PlaceholderFragment() { }

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_main, container, false);
return rootView;
}
}
 
In welchem Layout befindet sich denn R.id.txtUsername? Wenn es NICHT im R.layout.activity_main ist, dann kannst du es nicht in der Activity über this.findViewById ansprechen!

Du kannst es dann im Fragment nach dem Inflatern über rootView.findViewById entsprechend bearbeiten. Wenn es sich denn im R.layou.fragment_main befindet...

Gruß
 
R.id.txtUsername befindet sich in fragment_main.xml

Wie soll ich es dann ansprechen? Da ich Anfänger in der Android-Programmierung bin weiß ich nicht wo ich anfangen soll :(
 
Entweder in der Activity Main schon inflatern und setzten. Oder erst beim Fragment "adden" setzten.

Bei ersteren müsstest du das View allerdings an das Fragment als Paramter übergeben.

Gruß
 
Danke für die Hilfe!
Funktioniert super :D
 

Ähnliche Themen

D
Antworten
17
Aufrufe
407
datNeMo
D
M
Antworten
3
Aufrufe
163
moin
M
Y
Antworten
4
Aufrufe
1.223
swa00
swa00
Zurück
Oben Unten