2016-03-08 21 views
-4

我的繼承人MainActivity Java代碼:需要幫助的Android應用程序的調試零點異常(JAVA)

package peter_seeproductions.deapp; 

import android.os.Bundle; 

import android.support.v7.app.AppCompatActivity; 
import android.support.v7.widget.Toolbar; 
import android.view.View; 
import android.view.Menu; 
import android.view.MenuItem; 
import android.widget.Button; 

import java.util.ArrayList; 
import java.lang.Math; 

public class MainActivity extends AppCompatActivity { 
class Body{ 
    String eng; 
    String ger; 
    public Body(String a, String b){ 
     eng = a; 
     ger = b; 
    } 
    public Body(){ 

    } 
} 
class buttonVal{ 

    Body word = new Body(); 
    public buttonVal(Body x){ 
     word = x; 
    } 

    public buttonVal() { 
    } 
} 

@Override 
protected void onCreate(Bundle savedInstanceState) { 


    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
    setSupportActionBar(toolbar); 

} 

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    // Inflate the menu; this adds items to the action bar if it is present. 
    getMenuInflater().inflate(R.menu.menu_main, menu); 
    return true; 
} 

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    // Handle action bar item clicks here. The action bar will 
    // automatically handle clicks on the Home/Up button, so long 
    // as you specify a parent activity in AndroidManifest.xml. 
    int id = item.getItemId(); 

    //noinspection SimplifiableIfStatement 
    if (id == R.id.action_settings) { 
     return true; 
    } 

    return super.onOptionsItemSelected(item); 
} 
buttonVal btn1 = new buttonVal(); 
buttonVal btn2 = new buttonVal(); 
buttonVal btn3 = new buttonVal(); 
buttonVal btn4 = new buttonVal(); 

Button button1 = (Button)findViewById(R.id.button1); 
Button button2 = (Button)findViewById(R.id.button2); 
Button button3 = (Button)findViewById(R.id.button3); 
Button button4 = (Button)findViewById(R.id.button4); 

public void List(int btn){ 
    ArrayList<Body> list = new ArrayList<Body>(); 

    list.add(new Body("der Finger","Finger")); 
    list.add(new Body("der Oberarm","Upper arm")); 
    list.add(new Body("der Unterarm","Lower arm")); 
    list.add(new Body("der Ellbogen","Elbow")); 
    list.add(new Body("die Hüfte","Hip")); 
    list.add(new Body("der Oberschenkel","Upper leg")); 
    list.add(new Body("der Unterschenkel","Lower leg")); 
    list.add(new Body("das Knie","Knee")); 
    list.add(new Body("die Zehe","Toe")); 
    list.add(new Body("der Fuss","Foot")); 
    list.add(new Body("das Bein","Leg")); 
    list.add(new Body("die Hand","Hand")); 
    list.add(new Body("der Bauch","Abdomen")); 
    list.add(new Body("der Nabel","Bellybutton")); 
    list.add(new Body("der Arm","Arm")); 
    list.add(new Body("die Brust","Breast")); 
    list.add(new Body("die Schulter","Shoulder")); 
    list.add(new Body("der Hals","Throat")); 
    list.add(new Body("der Mund","Mouth")); 
    list.add(new Body("die Nase","Nose")); 
    list.add(new Body("das Auge","Eye")); 
    list.add(new Body("das Haar","Hair")); 
    list.add(new Body("der Kopf","Head")); 

    int q1,q2,q3,q4; 

    if (btn == 0){ 

     q1 = (int)(Math.random()* (list.size() - 1)); 
     do { 
      q2 = (int)(Math.random()*(list.size() - 1)); 
     }while(q2 == q1); 
     do { 
      q3 = (int)(Math.random()*(list.size() - 1)); 
     }while(q3 == q2 || q3 == q1); 
     do { 
      q4 = (int)(Math.random()*(list.size() - 1)); 
     }while(q4 == q3||q4==q2||q4==q1); 

     btn1.word = list.get(q1); 
     btn2.word = list.get(q2); 
     btn3.word = list.get(q3); 
     btn4.word = list.get(q4); 

     button1.setText(btn1.word.ger); 
     button2.setText(btn2.word.ger); 
     button3.setText(btn3.word.ger); 
     button4.setText(btn4.word.ger); 
    } 

} 
public void Next(View view){ 
    List(0); 
} 

}

這一切似乎都很正常,但是當我運行它,我得到一個空指針異常會導致應用程序崩潰。我沒有做java太久,而且我也不擅長找到這些bug。當我運行我得到這個錯誤代碼:

03-07 23:55:43.885 32387-32387/peter_seeproductions.deapp E/AndroidRuntime: FATAL EXCEPTION: main 
Process: peter_seeproductions.deapp, PID: 32387 
java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{peter_seeproductions.deapp/peter_seeproductions.deapp.MainActivity}: java.lang.NullPointerException 
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2124) 
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2257) 
at android.app.ActivityThread.access$800(ActivityThread.java:139) 
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1210) 
at android.os.Handler.dispatchMessage(Handler.java:102) 
at android.os.Looper.loop(Looper.java:136) 
at android.app.ActivityThread.main(ActivityThread.java:5097) 
at java.lang.reflect.Method.invokeNative(Native Method) 
at java.lang.reflect.Method.invoke(Method.java:515) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601) 
at dalvik.system.NativeStart.main(Native Method) 
Caused by: java.lang.NullPointerException 
at android.app.Activity.findViewById(Activity.java:1892) 
at peter_seeproductions.deapp.MainActivity.<init>(MainActivity.java:79) 
at java.lang.Class.newInstanceImpl(Native Method) 
at java.lang.Class.newInstance(Class.java:1208) 
at android.app.Instrumentation.newActivity(Instrumentation.java:1084) 
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2115) 
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2257)  
at android.app.ActivityThread.access$800(ActivityThread.java:139)  
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1210)  
at android.os.Handler.dispatchMessage(Handler.java:102)  
at android.os.Looper.loop(Looper.java:136)  
at android.app.ActivityThread.main(ActivityThread.java:5097)  
at java.lang.reflect.Method.invokeNative(Native Method)  
at java.lang.reflect.Method.invoke(Method.java:515)  
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785)  
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)  
at dalvik.system.NativeStart.main(Native Method)  

伊夫試圖尋找空指針,但我真的不知道

回答

1

移動

Button button1 = (Button)findViewById(R.id.button1); 
Button button2 = (Button)findViewById(R.id.button2); 
Button button3 = (Button)findViewById(R.id.button3); 
Button button4 = (Button)findViewById(R.id.button4); 

onCreate()

1

首先..您需要在撥打setContentView()之後將findViewById() s移至onCreate()之內。這就是活動如何知道使用哪些組件映射的佈局。 關於閱讀的日誌,

Caused by: java.lang.NullPointerException 
at android.app.Activity.findViewById(Activity.java:1892) 
at peter_seeproductions.deapp.MainActivity.<init>(MainActivity.java:79) 

上面的線告訴你,NPE是您MainActivity.java的行數79存在的。

第二..確保你已經在所有組件的佈局中定義了id(s),像button1,button2一樣,並確保這些id與你的項目的R.java匹配,而不是Android的R .. I建議您閱讀更多關於android開發的內容,尤其是關於ui,佈局和相關的xml(s)。

這裏.. Accessing resources將是一個很好的開始。

+0

感謝您的替換方法onCreate(),似乎按鈕語句移動到固定的問題的方法。我覺得現在看起來很簡單。 –

+0

多數民衆贊成在某種程度上,這一點或另一個。我建議避免id(s)like button1並通讀,因爲[android.R.id.button1](http://developer.android.com/reference/android/R.id.html#button1)和R的歧義性。 java也會導致浪費時間,不必要的類型.. – user2450263

0

與此

@Override 
protected void onCreate(Bundle savedInstanceState) { 


    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
    setSupportActionBar(toolbar); 


Button button1 = (Button)findViewById(R.id.button1); 
Button button2 = (Button)findViewById(R.id.button2); 
Button button3 = (Button)findViewById(R.id.button3); 
Button button4 = (Button)findViewById(R.id.button4); 

}