2012-11-13 13 views
0

我有這個問題的TextView一個動態的TextView溼透了,應用程序停止意外,這裏是xml文件:應用與

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:layout_width="match_parent" 
android:layout_height="match_parent" > 

<Button 
    android:id="@+button/btnAnterior" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignParentBottom="true" 
    android:layout_alignParentLeft="true" 
    android:layout_marginLeft="46dp" 
    android:text="Anterior" /> 

<Button 
    android:id="@+button/btnProxima" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignParentBottom="true" 
    android:layout_alignParentRight="true" 
    android:layout_marginRight="45dp" 
    android:text="Próxima" /> 

<ScrollView 
    android:id="@+id/scrollView1" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_above="@+id/button2" 
    android:layout_alignParentLeft="true" 
    android:layout_alignParentRight="true" 
    android:layout_alignParentTop="true" > 

    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" > 

     <TextView 
    android:id="@+id/tvPiada" 
    android:layout_width="match_parent" 
    android:layout_height="400dp" 
    android:layout_alignParentLeft="true" 
    android:layout_alignParentTop="true" /> 

    </LinearLayout> 
</ScrollView> 

和這裏的的.java:

// Buttons 
Button btnProxima = (Button) findViewById(R.button.btnProxima); 
Button btnAnterior = (Button) findViewById(R.button.btnAnterior); 
int piadaN; 

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

// Strings 
    final String piada1 = ("Piada1"); 
    final String piada2 = ("Piada2"); 

    /*piada2 = ("Piada2"); 
    String piada3 = new String(); 
    piada3 = ("Piada3"); 
    String piada4 = new String(); 
    piada4 = ("Piada4");*/ 

    final TextView tvPiada = (TextView) findViewById(R.id.tvPiada); 

    // Evento dos botões 
    btnProxima.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      piadaN = piadaN + 1; 

      switch (piadaN) { 
      case 1: 
       tvPiada.setText(piada1); 
       break; 
      case 2: 
       tvPiada.setText(piada2); 
       break; 
      }    
     } 
    }); 

} 


@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    getMenuInflater().inflate(R.menu.activity_main, menu); 
    return true; 
} 

這裏是我運行應用程序時的logcat

11-13 19:00:47.843: E/AndroidRuntime(585): FATAL EXCEPTION: main 
11-13 19:00:47.843: E/AndroidRuntime(585): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.example.piadas/com.example.piadas.MainActivity}: java.lang.NullPointerException 
11-13 19:00:47.843: E/AndroidRuntime(585): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1879) 
11-13 19:00:47.843: E/AndroidRuntime(585): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1980) 
11-13 19:00:47.843: E/AndroidRuntime(585): at android.app.ActivityThread.access$600(ActivityThread.java:122) 
11-13 19:00:47.843: E/AndroidRuntime(585): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1146) 
11-13 19:00:47.843: E/AndroidRuntime(585): at android.os.Handler.dispatchMessage(Handler.java:99) 
11-13 19:00:47.843: E/AndroidRuntime(585): at android.os.Looper.loop(Looper.java:137) 
11-13 19:00:47.843: E/AndroidRuntime(585): at android.app.ActivityThread.main(ActivityThread.java:4340) 
11-13 19:00:47.843: E/AndroidRuntime(585): at java.lang.reflect.Method.invokeNative(Native Method) 
11-13 19:00:47.843: E/AndroidRuntime(585): at java.lang.reflect.Method.invoke(Method.java:511) 
11-13 19:00:47.843: E/AndroidRuntime(585): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784) 
11-13 19:00:47.843: E/AndroidRuntime(585): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551) 
11-13 19:00:47.843: E/AndroidRuntime(585): at dalvik.system.NativeStart.main(Native Method) 
11-13 19:00:47.843: E/AndroidRuntime(585): Caused by: java.lang.NullPointerException 
11-13 19:00:47.843: E/AndroidRuntime(585): at android.app.Activity.findViewById(Activity.java:1794) 
11-13 19:00:47.843: E/AndroidRuntime(585): at com.example.piadas.MainActivity.<init>(MainActivity.java:13) 
11-13 19:00:47.843: E/AndroidRuntime(585): at java.lang.Class.newInstanceImpl(Native Method) 
11-13 19:00:47.843: E/AndroidRuntime(585): at java.lang.Class.newInstance(Class.java:1319) 
11-13 19:00:47.843: E/AndroidRuntime(585): at android.app.Instrumentation.newActivity(Instrumentation.java:1023) 
11-13 19:00:47.843: E/AndroidRuntime(585): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1870) 
11-13 19:00:47.843: E/AndroidRuntime(585): ... 11 more 

回答

1

不利用上下文或積極佈局不能使用findViewById(),通話後把它們

// Buttons 
Button btnProxima; 
Button btnAnterior; 
int piadaN; 

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

    btnProxima = (Button) findViewById(R.button.btnProxima); 
    btnAnterior = (Button) findViewById(R.button.btnAnterior); 
1

它在我看來像你得到這個錯誤,因爲你在聲明你的佈局之前試圖聲明你的按鈕。移動的按鈕聲明您onCreate()方法的內部和後您的setContentView(R.layout.main)

所以,你需要將你的Button btnProxima = (Button)findViewById(R.button.btnProxima);你用你的setContentView

+0

你的給予好評,因爲我們提交了相同的基本答案的同時,並沒有理由爲什麼我們要互相幫助:這種方法在onCreate()setContentView()後。 :) – Sam

+0

感謝您的幫助!那是錯誤! :d –