2013-08-16 6 views
0

У меня есть программа, которая заключается в следующем: может ли кто-нибудь сказать мне, в чем причина получения NPE.Почему это вызывает исключение NullPointerException?

public class MainActivity extends Activity { 

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

     secondClass x = new secondClass(); 
     x.sText("Test Spring"); 

    } 

} 



public class secondClass extends MainActivity { 

    public void sText(String s) { 

     TextView text = (TextView) findViewById(R.id.text); 
     text.setText(s); 
    } 

} 

MainFest

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    ... 

    <TextView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="@string/hello_world" 
     android:id="@+id/text" 
    /> 

</RelativeLayout> 

LogCat

08-16 01:31:11.320 15032-15032/? E/Trace: error opening trace file: No such file or directory (2) 
08-16 01:31:11.420  836-987/? E/EmbeddedLogger: App crashed! Process: com.example.myapplication 
08-16 01:31:11.420  836-987/? E/EmbeddedLogger: App crashed! Package: com.example.myapplication v1 (1.0) 
08-16 01:31:11.420  836-987/? E/EmbeddedLogger: Application Label: My Application 
08-16 01:31:11.420 15032-15032/? E/AndroidRuntime: FATAL EXCEPTION: main 
     java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.myapplication/com.example.myapplication.MainActivity}: java.lang.NullPointerException 
     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java) 
     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java) 
     at android.app.ActivityThread.access$600(ActivityThread.java) 
     at android.app.ActivityThread$H.handleMessage(ActivityThread.java) 
     at android.os.Handler.dispatchMessage(Handler.java) 
     at android.os.Looper.loop(Looper.java) 
     at android.app.ActivityThread.main(ActivityThread.java) 
     at java.lang.reflect.Method.invokeNative(Native Method) 
     at java.lang.reflect.Method.invoke(Method.java) 
     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java) 
     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java) 
     at de.robv.android.xposed.XposedBridge.main(XposedBridge.java:110) 
     at dalvik.system.NativeStart.main(Native Method) 
     Caused by: java.lang.NullPointerException 
     at android.app.Activity.findViewById(Activity.java) 
     at com.example.myapplication.secondClass.sText(secondClass.java:13) 
     at com.example.myapplication.MainActivity.onCreate(MainActivity.java:14) 
     at android.app.Activity.performCreate(Activity.java) 
     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java) 

В моем понимании, это должно создать экземпляр и инициализировать затем объект secondClass вызвать метод sText(). Затем метод sText должен сохранять ссылку в TextView. Затем он вызывает метод setText() в TextView, который меняет текст в TextView на то, что было передано в sText().

Логарифм говорит, что он выбрасывает исключение NullPointerException, но я не совсем уверен, почему. Если это ошибка новобранец, это потому, что я новичок. Спасибо.

+2

Зачем вам нужен 'secondClass'? –

+1

Не могли бы вы разместить свой логарифм, может помочь – bidluo

+0

Можете ли вы поделиться более подробными сведениями о том, что вы пытаетесь архивировать. Наличие двух экземпляров действий - это очень редкий случай, а доступ к одному из другого - это не так, как работает андроид. –

ответ

3

Вам необходимо переопределить onCreate в вашей второй Активности и иметь setContentView(R.layout.mylayout). Затем вы можете инициализировать свое текстовое представление.

Кроме того, необходимо, чтобы начать активность, используя намерение

 Intent intent = new Intent(MainActivtiy.this,SecondActivity.class); 
    startActivity(intent); 

Не забудьте сделать запись для деятельности (SecondActivtiy) в файле манифеста

Если вам нужно передать строку второго использования активности намерения .putExtra

 Intent intent = new Intent(MainActivtiy.this,SecondActivity.class); 
     intent.putExtra("key",mystring); 
     startActivity(intent); 

Тогда в secondActivity

TextView tv ; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.mysecondlayout); 
    tv = (TextView) findViewByid(R.id.textView1); 
    Bundle extras = getIntent().getExtras(); 
    if (extras != null) { 
    String value = extras.getString("key"); 
    tv.setText(value); 
    //get the value based on the key 
    } 

http://developer.android.com/reference/android/content/Intent.html#putExtra(java.lang.String, android.os.Bundle)

Вы можете findViewById текущего вида herarchy набор для деятельности.

Кроме того, необходимо startActivity с помощью намерения, а делает это econdClass x = new secondClass()

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