Android Annotation - исключение нулевого указателя при инициализации метода сгенерированного класса

Я только начинаю новый проект Android с библиотекой аннотаций Android. Аннотация для Android

У меня есть два действия: StartScreen, который содержит кнопку «информация», которая запускает второе действие InfoActivity. Оба аннотированы.

Первый работает очень хорошо, но когда я нажимаю кнопку «Информация», у меня появляется NullPointerException на public static class IntentBuilder_ сгенерированного класса: «InfoActivity_»

Вот трассировка ошибки:

04-16 09:32:29.329: E/AndroidRuntime(561): FATAL EXCEPTION: main
java.lang.NullPointerException
at android.content.ComponentName.<init>(ComponentName.java:75)
at android.content.Intent.<init>(Intent.java:3122)
at com.cinapp.dombox.tablet.activity.InfoActivity_$IntentBuilder_.<init>(InfoActivity_.java:63)
at com.cinapp.dombox.tablet.activity.InfoActivity_.intent(InfoActivity_.java:53)
at com.cinapp.dombox.tablet.activity.StartScreen.buttonInformation(StartScreen.java:24)
at com.cinapp.dombox.tablet.activity.StartScreen_$1.onClick(StartScreen_.java:44)
at android.view.View.performClick(View.java:3511)
at android.view.View$PerformClick.run(View.java:14105)
at android.os.Handler.handleCallback(Handler.java:605)
at android.os.Handler.dispatchMessage(Handler.java:92)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:4424)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
at dalvik.system.NativeStart.main(Native Method)

Вот InfoActivity более-менее пустой:

@EActivity(R.layout.activity_info)
public class InfoActivity extends Activity {

}

Вот InfoActivity_ :

public final class InfoActivity_
extends InfoActivity
{


@Override
public void onCreate(Bundle savedInstanceState) {
    init_(savedInstanceState);
    super.onCreate(savedInstanceState);
    setContentView(layout.activity_info);
}

private void init_(Bundle savedInstanceState) {
}

private void afterSetContentView_() {
}

@Override
public void setContentView(int layoutResID) {
    super.setContentView(layoutResID);
    afterSetContentView_();
}

@Override
public void setContentView(View view, LayoutParams params) {
    super.setContentView(view, params);
    afterSetContentView_();
}

@Override
public void setContentView(View view) {
    super.setContentView(view);
    afterSetContentView_();
}

public static InfoActivity_.IntentBuilder_ intent(Context context) {
    return new InfoActivity_.IntentBuilder_(context);
}

public static class IntentBuilder_ {

    private Context context_;
    private final Intent intent_;

    public IntentBuilder_(Context context) {
        context_ = context;
        intent_ = new Intent(context, InfoActivity_.class);
    }

    public Intent get() {
        return intent_;
    }

    public InfoActivity_.IntentBuilder_ flags(int flags) {
        intent_.setFlags(flags);
        return this;
    }

    public void start() {
        context_.startActivity(intent_);
    }

    public void startForResult(int requestCode) {
        if (context_ instanceof Activity) {
            ((Activity) context_).startActivityForResult(intent_, requestCode);
        } else {
            context_.startActivity(intent_);
        }
    }

}

}

И, наконец, вот «Манифест Android».

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.exemple.application"
android:versionCode="1"
android:versionName="1.0" >

<uses-sdk
    android:minSdkVersion="15"
    android:targetSdkVersion="15" />

<application
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme" >
    <activity
        android:name=".activity.StartScreen_"
        android:label="@string/title_activity_start_screen" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    <activity
        android:name=".activity.InfoActivity_"
        android:label="@string/title_activity_info" >
        <meta-data
            android:name="android.support.PARENT_ACTIVITY"
            android:value="com.exemple.application.activity.StartScreen_" />
    </activity>
</application>

</manifest>

Это должно быть очень просто, но я что-то упустил


person Thomas Besnehard    schedule 16.04.2013    source источник
comment
немного не по теме, но откуда этот стиль _ для имён? Я вижу, что все больше и больше людей используют этот запутанный стиль имени...   -  person WarrenFaith    schedule 16.04.2013
comment
_ в конце имени класса используется для ссылки на сгенерированный класс. Это соглашение, используемое библиотекой аннотаций Android, см.: androidannotations.org   -  person Thomas Besnehard    schedule 16.04.2013
comment
Ок, спасибо за это...   -  person WarrenFaith    schedule 16.04.2013


Ответы (1)


Как начать свое второе занятие?

Согласно трассировке стека кажется, что контекст в Intent равен нулю, поэтому я думаю, что вы сделали свой вызов следующим образом InfoActivity_.intent(null).start()

Когда вы создаете новое действие, вам нужно передать ему контекст, поэтому в StartScreenActivity вы должны сделать что-то вроде этого: InfoActivity_.intent(this).start()

person DayS    schedule 16.04.2013
comment
Вау, я чувствую себя таким глупым. Я запускал активность следующим образом: ` InfoActivity_.intent(context).start();` НО я никогда не запускал context - person Thomas Besnehard; 16.04.2013
comment
каков наилучший способ Android Annotation для инициализации параметра контекста? Я сделал это: ` @Override protected void onCreate (Bundle saveInstanceState) { context = this; super.onCreate(savedInstanceState); }` - person Thomas Besnehard; 16.04.2013
comment
Если вы находитесь в действии, просто используйте this. Деятельность — это контекст. Если вы используете Bean, вы можете использовать аннотацию @RootContext. - person DayS; 16.04.2013