- Forum-Beiträge: 239
04.08.2014, 13:25:02 via Website
04.08.2014 13:25:02 via Website
Hallo zusammen,
ich beschäftige mich gerade mit dem Thema Datenhaltung und SQLite.
Nun soll die erste Activity (KeywordActivity) im Intent-Objekt den Wert von sourceIdentifier speichern und über startActivityForResult die zweite Activity (SourceActivity) aufrufen. Doch schon da bekomme ich eine Fehlermeldung:
Unable to instantiate activity ComponentInfo{android.and05_lektion3/android.and05_lektion3.KeywordActivity}: java.lang.NullPointerException
Hier der Code meiner KeywordActivity:
package android.and05_lektion3;
public class KeywordActivity extends Activity {
private static final String TAG = KeywordActivity.class.getSimpleName();
public static final String SOURCE_IDENTIFIER = "android.and05_lektion3.SourceId";
private final int REQUEST_CODE = this.hashCode();
// Felder und Zugriffsmethoden
private SQLiteDatabase registerDB;
public SQLiteDatabase getRegisterDB() {
return registerDB;
}
private String sourceIdentifier = "Test";
public String getSourceIdentifier() {
return sourceIdentifier;
}
private RegisterHelper helper;
private TextView tv_source = (TextView) this.findViewById(R.id.tv_source);
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_keyword);
Button btSource = (Button) this.findViewById(R.id.bt_source);
btSource.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// Aufruf der Sub-Activity SourceActivity
callSourceActivity(sourceIdentifier);
}
});
// Verkopplung mit RegisterHelper
if (helper == null)
helper = new RegisterHelper(this);
registerDB = helper.getWritableDatabase();
}
protected void onStop() {
super.onStop();
registerDB.close();
}
// Aufruf vorstehend
public void callSourceActivity(String sourceIdentifier) {
Intent intent = new Intent(this, SourceActivity.class);
intent.putExtra(SOURCE_IDENTIFIER, sourceIdentifier);
this.startActivityForResult(intent, REQUEST_CODE);
}
// Callback-Methode
@Override
protected void onActivityResult(int requestCode, int resultCode,
Intent returnIntent) {
super.onActivityResult(requestCode, resultCode, returnIntent);
Log.d(TAG, "requestCode = " + REQUEST_CODE + ", resultCode = "
+ resultCode);
Bundle extrasBundle = returnIntent.getExtras();
if (extrasBundle != null) {
String temp = extrasBundle.getString(SOURCE_IDENTIFIER);
if (temp != null) {
this.sourceIdentifier = temp;
tv_source.setText("geänderte Quelle: \"" + sourceIdentifier
+ "\"");
} else
tv_source.setText("keine Quelle zurückgeliefert");
} else
Log.d(TAG, "Keine Extras im return-Intent");
}
}
Der Code meiner SourceActivity sieht so aus:
public class SourceActivity extends Activity {
private static final String TAG = SourceActivity.class.getSimpleName();
private String returnSourceIdentifier = "testReturnValue";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_source);
Button btReturn = (Button) findViewById(R.id.bt_return_source);
btReturn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
SourceActivity.this.callback();
SourceActivity.this.finish();
}
});
}
private void callback() {
Intent pushIntent = this.getIntent();
Bundle intentBundle = pushIntent.getExtras();
if (intentBundle == null)
Log.d(TAG, "keine Extras im Push-Intent");
else {
String intentParam = intentBundle
.getString(KeywordActivity.SOURCE_IDENTIFIER);
if (intentParam == null)
Log.d(TAG, "No key = \"" + KeywordActivity.SOURCE_IDENTIFIER
+ "\" in Intent-Bundle");
else
Log.d(TAG, "key = \"" + KeywordActivity.SOURCE_IDENTIFIER
+ "\" / value = \"" + intentParam + "\" recieved");
}
pushIntent.putExtra(KeywordActivity.SOURCE_IDENTIFIER,
returnSourceIdentifier);
this.setResult(Activity.RESULT_OK, pushIntent);
Log.d(TAG, "SourceIdentifier \"" + returnSourceIdentifier
+ "\" returned.");
}
}
Im Manifest sieht meiner Meinung nach auch alles normal aus:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="android.and05_lektion3"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="8" />
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name="KeywordActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name="SourceActivity"
android:label="@string/title_activity_source" >
</activity>
</application>
</manifest>
Das LogCat selbst liefert keine Fehlermeldungen, nur wenn ich mich im Debug-Modus per F5 durchklicke, kommt die o.g. Fehlermeldung. Ich habe eben den Aufruf der callSourceActivity in einen try-catch-Block gekleidet, um herauszufinden, ob dort der Fehler liegt, aber es gibt im LogCat immer noch keine Fehlermeldung.
Könnt ihr mir weiterhelfen? Ich bin nicht ständig online, da ich mich im Urlaub im Ausland befinde, aber ich versuche wenigstens einmal täglich reinzuschauen.
Ganz lieben Dank!
Empfohlener redaktioneller Inhalt
Mit Deiner Zustimmung wird hier ein externer Inhalt geladen.
Mit Klick auf den oben stehenden Button erklärst Du Dich damit einverstanden, dass Dir externe Inhalte angezeigt werden dürfen. Dabei können personenbezogene Daten an Drittanbieter übermittelt werden. Mehr Infos dazu findest Du in unserer Datenschutzerklärung.