2013-05-18 2 views
0

Я использую Android API 17 с инструментами для разработки Android (ADT) У меня есть Help buttton, который прослушивает событие click. HelpButtonListener прослушивает событие щелчка для Помощь кнопки следующим образом:OnClickListener throws NullPointerException on startActivity

Выдержка из MainActivity.java

private final class HelpButtonListener implements OnClickListener { 
    public void onClick(View v) {   
     Intent mainToHelpIntent = new Intent(MainActivity.this, HelpActivity.class); 
     startActivity(mainToHelpIntent);   
    } 
} 

После кода для HelpActivity работает просто отлично анс показывает мне Некоторые полезно материал ..HelpActivity создание:

public class HelpActivity extends RoboActivity { 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     TextView helpTextView = new TextView(HelpActivity.this); 
     helpTextView.setText("Some helpful stuff.."); 
     setContentView(helpTextView); 
    } 
} 

Но если я пытаюсь использовать набор текста в компоненте TextView просмотра впрыскиваемого с помощью RoboGuice 2 для впрыскивать TextView, используя следующий код, он дает мне NullPointerException:

HelpActivity.java

public class HelpActivity extends RoboActivity { 
    @InjectView(R.id.helpTextView) 
    private TextView helpTextView; 

    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     helpTextView.setText("Some helpful stuff.."); 
     setContentView(R.layout.activity_help); 
    } 
} 

Ниже ошибка я получаю, когда я нажимаю кнопку справки и попытаться установить текст в TextView созданный на activity_help.xml макет ресурса:

05-16 18:00:52.591: E/AndroidRuntime(9880): FATAL EXCEPTION: main 
05-16 18:00:52.591: E/AndroidRuntime(9880): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.wickedlynotsmart.myfirstapp/com.wickedlynotsmart.myfirstapp.activity.HelpActivity}: java.lang.NullPointerException 
05-16 18:00:52.591: E/AndroidRuntime(9880):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2180) 
05-16 18:00:52.591: E/AndroidRuntime(9880):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230) 
05-16 18:00:52.591: E/AndroidRuntime(9880):  at android.app.ActivityThread.access$600(ActivityThread.java:141) 
05-16 18:00:52.591: E/AndroidRuntime(9880):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234) 
05-16 18:00:52.591: E/AndroidRuntime(9880):  at android.os.Handler.dispatchMessage(Handler.java:99) 
05-16 18:00:52.591: E/AndroidRuntime(9880):  at android.os.Looper.loop(Looper.java:137) 
05-16 18:00:52.591: E/AndroidRuntime(9880):  at android.app.ActivityThread.main(ActivityThread.java:5041) 
05-16 18:00:52.591: E/AndroidRuntime(9880):  at java.lang.reflect.Method.invokeNative(Native Method) 
05-16 18:00:52.591: E/AndroidRuntime(9880):  at java.lang.reflect.Method.invoke(Method.java:511) 
05-16 18:00:52.591: E/AndroidRuntime(9880):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793) 
05-16 18:00:52.591: E/AndroidRuntime(9880):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560) 
05-16 18:00:52.591: E/AndroidRuntime(9880):  at dalvik.system.NativeStart.main(Native Method) 
05-16 18:00:52.591: E/AndroidRuntime(9880): Caused by: java.lang.NullPointerException 
05-16 18:00:52.591: E/AndroidRuntime(9880):  at com.wickedlynotsmart.myfirstapp.activity.HelpActivity.onCreate(HelpActivity.java:22) 
05-16 18:00:52.591: E/AndroidRuntime(9880):  at android.app.Activity.performCreate(Activity.java:5104) 
05-16 18:00:52.591: E/AndroidRuntime(9880):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080) 
05-16 18:00:52.591: E/AndroidRuntime(9880):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2144) 
05-16 18:00:52.591: E/AndroidRuntime(9880):  ... 11 more 

Может кто-нибудь помочь мне понять, почему я получаю эту ошибку?

Спасибо.

+0

@blackbelt: Я добавил 'super.onCreate' вызов в' onCreate' метод 'HelpActivity', но он по-прежнему не работает, и показывает тот же' NullPointerException' ошибку. – skip

+0

@blackbelt: Я ошибочно нажал на редактирование вашего аннулятора, когда я хотел щелкнуть комментарий, чтобы прокомментировать ваш ответ, я отменил редактирование и сохранил и все, что мог, но я не могу снова увидеть ваш ответ. – skip

+1

проверить мой ответ и не стесняйтесь спрашивать, есть ли какие-либо вопросы. – Abhi

ответ

3

Сначала задайте содержание для активности. Затем инициализируйте textview. Затем установите текст в текстовое окно. Вы не инициализировали текст. Следовательно, вы получили NullPointerException.

Это должно быть, как:

setContentView(R.layout.activity_help); 
TextView helpTextView = (TextView)findViewById(R.id.helpTextView); 
helpTextView.setText("Some helpful stuff.."); 
+1

Да, в первом случае вы создаете динамическое текстовое представление, а затем добавляете его в представление. Да, это сработает. Но во втором случае Чтобы получить доступ к текстовому окну или любому виджету из XML-файла макета, сначала нужно установить XML-файл в setContentView перед чтением. – Abhi

+0

См. Это: http://www.mkyong.com/android/android-textbox-example/ – Abhi

+0

Эта строка не нужна TextView helpTextView = (TextView) findViewById (R.id.helpTextView); RoboActivity позаботьтесь об этом –

1

// это ссылка

http://killertilapia.blogspot.in/2012/09/why-u-no-use-roboguice.html https://code.google.com/p/roboguice/wiki/SimpleExample

public class HelpActivity extends RoboActivity { 
@InjectView(R.id.helpTextView) 
private TextView helpTextView; 

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_help); 
    helpTextView.setText("Some helpful stuff.."); 

    } 
} 
+0

Привет, первый набор setcontent, тогда вы получите экземпляр textview –

+0

О, дорогой, что я делал? Благодарю. – skip

+0

вы также должны объяснить код. – Raghunandan

1

Вы можете установить содержание в деятельности затем инициализировать TextView по findViewById из просмотреть иерархию, а затем установить текст в текстовое окно. Ваше текстовое представление не инициализировано, поэтому вы получаете исключение NullPointerException.

private TextView helpTextView; 

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_help); //set content tot eh activity 
    helpTextView = (TextView) findViewById(R.id.textview); // initialize textview 
    helpTextView.setText("Some helpful stuff.."); //set text to textview 

} 

По этой ссылке https://code.google.com/p/roboguice/wiki/SimpleExample. Использование Robospice может быть следующим.

private TextView helpTextView; 
@InjectView(R.id.textview)    TextView helpTextView; 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_help); //set content tot eh activity 
    helpTextView.setText("Some helpful stuff.."); //set text to textview 

} 
+0

Он расскажет о RoboJuice http://killertilapia.blogspot.in/2012/09/why-u-no-use-roboguice.html –

+0

@pawanyadav могли бы вы объяснить, почему это происходит потому я не пробовал robospice себя – Raghunandan

+0

RoboJuice - это платформа google и избегает инъекции зависимостей. Эта ссылка объясняется в деталях. http://www.programmingmobile.com/2011/06/dependency-injection-for-android-with.html –

Смежные вопросы