Probleme beim Aufruf einer Sub-Activity

  • Antworten:3
  • Bentwortet
Babette R.
  • Forum-Beiträge: 239

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!

Antworten
Babette R.
  • Forum-Beiträge: 239

04.08.2014, 13:37:30 via Website

Hier noch das LogCat:

08-04 11:31:52.855: D/AndroidRuntime(413): >>>>>>>>>>>>>> AndroidRuntime START <<<<<<<<<<<<<<
08-04 11:31:52.855: D/AndroidRuntime(413): CheckJNI is ON
08-04 11:31:52.975: D/AndroidRuntime(413): --- registering native functions ---
08-04 11:31:53.436: D/AndroidRuntime(413): Shutting down VM
08-04 11:31:53.445: D/dalvikvm(413): Debugger has detached; object registry had 1 entries
08-04 11:31:53.455: I/AndroidRuntime(413): NOTE: attach of thread 'Binder Thread #3' failed
08-04 11:31:53.755: D/AndroidRuntime(421): >>>>>>>>>>>>>> AndroidRuntime START <<<<<<<<<<<<<<
08-04 11:31:53.755: D/AndroidRuntime(421): CheckJNI is ON
08-04 11:31:53.875: D/AndroidRuntime(421): --- registering native functions ---
08-04 11:31:54.366: I/ActivityManager(70): Force stopping package android.and05_lektion3 uid=10036
08-04 11:31:54.366: I/Process(70): Sending signal. PID: 405 SIG: 9
08-04 11:31:54.396: I/UsageStats(70): Unexpected resume of com.android.settings while already resumed in android.and05_lektion3
08-04 11:31:54.466: W/InputManagerService(70): Window already focused, ignoring focus gain of:     com.android.internal.view.IInputMethodClient$Stub$Proxy@43f42b38
08-04 11:31:54.476: I/ActivityManager(70): Starting activity: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER]   flg=0x10000000 cmp=android.and05_lektion3/.KeywordActivity }
08-04 11:31:54.476: D/AndroidRuntime(421): Shutting down VM
08-04 11:31:54.485: D/jdwp(421): Got wake-up signal, bailing out of select
08-04 11:31:54.485: D/dalvikvm(421): Debugger has detached; object registry had 1 entries
08-04 11:31:54.586: I/ActivityManager(70): Start proc android.and05_lektion3 for activity android.and05_lektion3/.KeywordActivity: pid=428 uid=10036 gids={}
08-04 11:31:54.736: W/ActivityThread(428): Application android.and05_lektion3 is waiting for the debugger on port 8100...
08-04 11:31:54.806: I/System.out(428): Sending WAIT chunk
08-04 11:31:54.838: I/dalvikvm(428): Debugger is active
08-04 11:31:55.016: I/System.out(428): Debugger has connected
08-04 11:31:55.025: I/System.out(428): waiting for debugger to settle...
08-04 11:31:55.226: I/System.out(428): waiting for debugger to settle...
08-04 11:31:55.429: I/System.out(428): waiting for debugger to settle...
08-04 11:31:55.625: I/System.out(428): waiting for debugger to settle...
08-04 11:31:55.826: I/System.out(428): waiting for debugger to settle...
08-04 11:31:56.027: I/System.out(428): waiting for debugger to settle...
08-04 11:31:56.226: I/System.out(428): waiting for debugger to settle...
08-04 11:31:56.435: I/System.out(428): waiting for debugger to settle...
08-04 11:31:56.636: I/System.out(428): waiting for debugger to settle...
08-04 11:31:56.838: I/System.out(428): debugger has settled (1459)
08-04 11:32:04.483: W/ActivityManager(70): Launch timeout has expired, giving up wake lock!
08-04 11:32:04.706: W/ActivityManager(70): Activity idle timeout for HistoryRecord{43f52d78 android.and05_lektion3/.KeywordActivity}
08-04 11:32:09.785: D/dalvikvm(359): GC_EXPLICIT freed 313 objects / 14072 bytes in 77ms
08-04 11:34:08.135: D/SntpClient(70): request time failed: java.net.SocketException: Address family not supported by protocol

Antworten
Fabian Simon
  • Forum-Beiträge: 359

04.08.2014, 13:47:20 via Website

Ich glaube du musst das :

  Intent pushIntent = this.getIntent();

in das ändern

Intent pushIntent = ew Intent(getApplicationContext(),KeywordActivity.class);

Gruß
Fabian

Antworten
Ludy
  • Admin
  • Forum-Beiträge: 7.958

04.08.2014, 14:04:06 via Website

private TextView tv_source = (TextView) this.findViewById(R.id.tv_source);

das bitte in die OnCreate methode!!!

Edit: Views und Ressourcen werden immer in einer Methode zugewiesen!

— geändert am 04.08.2014, 14:11:01

Gruß Ludy (App Entwickler)

Mein Beitrag hat dir geholfen? Lass doch ein "Danke" da.☺

☕ Buy Me A Coffee ☕

Lebensmittelwarnung-App

✨Meine Wunschliste✨

📲Telegram NextPit News📲

Antworten