2013-05-08 56 views
0

所以我試圖爲Android做一個非常簡單的MVC應用程序。觀察者實現和Observable可以正確地擴展,所以一切都很華麗。但是,每當我運行應用程序,我收到一個NullPointerException。任何人都可以找出原因嗎?這一定是我錯過的簡單東西。Android奇怪ComponentInfo空指針異常

activity_main.xml中

<ScrollView 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" 
    android:paddingBottom="@dimen/activity_vertical_margin" 
    android:paddingLeft="@dimen/activity_horizontal_margin" 
    android:paddingRight="@dimen/activity_horizontal_margin" 
    android:paddingTop="@dimen/activity_vertical_margin" 
    tools:context=".MainActivity" > 

    <RelativeLayout 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content"> 

     <TextView 
      android:id="@+id/nameView" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_alignParentTop="true" 
      android:layout_centerHorizontal="true" 
      android:text="@string/hello_world" 
      android:textAppearance="?android:attr/textAppearanceMedium" /> 

     <Button 
      android:id="@+id/nameSet" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_alignParentTop="true" 
      android:layout_centerHorizontal="true" 
      android:text="@string/change" 
      android:layout_marginTop="20dp" 
      android:textAppearance="?android:attr/textAppearanceMedium" /> 

     <TextView 
      android:id="@+id/storeView" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_alignParentTop="true" 
      android:layout_centerHorizontal="true" 
      android:text="@string/hello_world" 
      android:layout_marginTop="80dp" 
      android:textAppearance="?android:attr/textAppearanceMedium" /> 

     <Button 
      android:id="@+id/storeSet" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_alignParentTop="true" 
      android:layout_centerHorizontal="true" 
      android:text="@string/change" 
      android:layout_marginTop="100dp" 
      android:textAppearance="?android:attr/textAppearanceMedium" /> 

    </RelativeLayout> 

</ScrollView> 

MainActivity.java

public class MainActivity extends Activity implements Observer{ 
    private ClipboardModel model; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     this.model = new ClipboardModel(); 
     System.out.println(this.model.getName()); 
     this.model.addObserver(this); 
     //redraw(); 
     setContentView(R.layout.activity_main); 
    } 

    @Override 
    public void update(Observable arg0, Object arg1) { 
     redraw(); 
    } 

    private void redraw(){ 
     TextView nameView = (TextView)findViewById(R.id.nameView); 
     nameView.setText(this.model.getName()); 
     TextView storeView = (TextView)findViewById(R.id.storeView); 
     storeView.setText(this.model.getStore()); 
    } 

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

} 

ClipboardModel.java在方法重繪MainActivity.java上線29發生

public class ClipboardModel extends Observable{ 

    private String name; 

    private String store; 

    private int[] a; 
    private int[] b; 
    private int[] c; 
    private int[] d; 
    private int[] e; 
    private int[] g; 
    private int[] h; 

    private int[] f; 
    private int[] w; 
    private int[] s; 

    private int[] l; 
    private int[] p; 
    private int[] v; 
    private int[] x; 

    private int ldw; 
    private int pai; 
    private int pep; 
    private int ali; 
    private int cpp; 

    private int gps; 
    private int rsn; 
    private int fuel; 
    private int xm; 
    private int cs; 

    /** 
    * Constructor for ClipboardModel 
    */ 
    public ClipboardModel(){ 
     this.a = new int[3]; 
     this.b = new int[3]; 
     this.c = new int[3]; 
     this.d = new int[3]; 
     this.e = new int[3]; 
     this.g = new int[3]; 
     this.h = new int[3]; 

     this.f = new int[3]; 
     this.w = new int[3]; 
     this.s = new int[3]; 

     this.l = new int[3]; 
     this.p = new int[3]; 
     this.v = new int[3]; 
     this.x = new int[3]; 

     this.ldw = 0; 
     this.pai = 0; 
     this.pep = 0; 
     this.ali = 0; 
     this.cpp = 0; 

     this.gps = 0; 
     this.rsn = 0; 
     this.fuel = 0; 
     this.xm = 0; 
     this.cs = 0; 

     this.name = "Name"; 
     this.store = "Store"; 
    } 

    /** 
    * Add a car to the appropriate array 
    * @param type - Category of car 
    * @param clean - whether or not the car is clean 
    */ 
    public void addCar(String type, boolean clean){ 
     if(type.equals("a")){ 
      this.a[0]++; 
      if(clean) 
       this.a[1]++; 
      else 
       this.a[2]++; 
     } 
     else if(type.equals("b")){ 
      this.b[0]++; 
      if(clean) 
       this.b[1]++; 
      else 
       this.b[2]++; 
     } 

     else if(type.equals("c")){ 
      this.c[0]++; 
      if(clean) 
       this.c[1]++; 
      else 
       this.c[2]++; 
     } 

     else if(type.equals("d")){ 
      this.d[0]++; 
      if(clean) 
       this.d[1]++; 
      else 
       this.d[2]++; 
     } 

     else if(type.equals("e")){ 
      this.e[0]++; 
      if(clean) 
       this.e[1]++; 
      else 
       this.e[2]++; 
     } 

     else if(type.equals("g")){ 
      this.g[0]++; 
      if(clean) 
       this.g[1]++; 
      else 
       this.g[2]++; 
     } 

     else if(type.equals("b")){ 
      this.h[0]++; 
      if(clean) 
       this.h[1]++; 
      else 
       this.h[2]++; 
     } 

     else if(type.equals("f")){ 
      this.f[0]++; 
      if(clean) 
       this.f[1]++; 
      else 
       this.f[2]++; 
     } 

     else if(type.equals("w")){ 
      this.w[0]++; 
      if(clean) 
       this.w[1]++; 
      else 
       this.w[2]++; 
     } 

     else if(type.equals("s")){ 
      this.s[0]++; 
      if(clean) 
       this.s[1]++; 
      else 
       this.s[2]++; 
     } 

     else if(type.equals("l")){ 
      this.l[0]++; 
      if(clean) 
       this.l[1]++; 
      else 
       this.l[2]++; 
     } 

     else if(type.equals("p")){ 
      this.p[0]++; 
      if(clean) 
       this.p[1]++; 
      else 
       this.p[2]++; 
     } 

     else if(type.equals("v")){ 
      this.v[0]++; 
      if(clean) 
       this.v[1]++; 
      else 
       this.v[2]++; 
     } 

     else if(type.equals("x")){ 
      this.x[0]++; 
      if(clean) 
       this.x[1]++; 
      else 
       this.x[2]++; 
     } 


     setChanged(); 
     notifyObservers(); 
    } 

    /** 
    * Remove a car from the appropriate array 
    * @param type - Category of car 
    * @param clean - Whether or not the car is clean 
    */ 
    public void removeCar(String type, boolean clean){ 
     if(type.equals("a")){ 
      this.a[0]--; 
      if(clean) 
       this.a[1]--; 
      else 
       this.a[2]--; 
     } 
     else if(type.equals("b")){ 
      this.b[0]--; 
      if(clean) 
       this.b[1]--; 
      else 
       this.b[2]--; 
     } 

     else if(type.equals("c")){ 
      this.c[0]++; 
      if(clean) 
       this.c[1]--; 
      else 
       this.c[2]--; 
     } 

     else if(type.equals("d")){ 
      this.d[0]--; 
      if(clean) 
       this.d[1]--; 
      else 
       this.d[2]--; 
     } 

     else if(type.equals("e")){ 
      this.e[0]--; 
      if(clean) 
       this.e[1]--; 
      else 
       this.e[2]--; 
     } 

     else if(type.equals("g")){ 
      this.g[0]--; 
      if(clean) 
       this.g[1]--; 
      else 
       this.g[2]--; 
     } 

     else if(type.equals("b")){ 
      this.h[0]--; 
      if(clean) 
       this.h[1]--; 
      else 
       this.h[2]--; 
     } 

     else if(type.equals("f")){ 
      this.f[0]--; 
      if(clean) 
       this.f[1]--; 
      else 
       this.f[2]--; 
     } 

     else if(type.equals("w")){ 
      this.w[0]--; 
      if(clean) 
       this.w[1]--; 
      else 
       this.w[2]--; 
     } 

     else if(type.equals("s")){ 
      this.s[0]--; 
      if(clean) 
       this.s[1]--; 
      else 
       this.s[2]--; 
     } 

     else if(type.equals("l")){ 
      this.l[0]--; 
      if(clean) 
       this.l[1]--; 
      else 
       this.l[2]--; 
     } 

     else if(type.equals("p")){ 
      this.p[0]--; 
      if(clean) 
       this.p[1]--; 
      else 
       this.p[2]--; 
     } 

     else if(type.equals("v")){ 
      this.v[0]++; 
      if(clean) 
       this.v[1]--; 
      else 
       this.v[2]--; 
     } 

     else if(type.equals("x")){ 
      this.x[0]--; 
      if(clean) 
       this.x[1]--; 
      else 
       this.x[2]--; 
     } 


     setChanged(); 
     notifyObservers(); 
    } 

    /** 
    * Add a CSI 
    * @param type - type of CSI to add 
    */ 
    public void addCSI(String type){ 
     if(type.equals("ldw")) 
      this.ldw++; 
     else if(type.equals("pai")) 
      this.pai++; 
     else if(type.equals("pep")) 
      this.pep++; 
     else if(type.equals("ali")) 
      this.ali++; 
     else if(type.equals("cpp")) 
      this.cpp++; 
     else if(type.equals("gps")) 
      this.gps++; 
     else if(type.equals("rsn")) 
      this.rsn++; 
     else if(type.equals("fuel")) 
      this.fuel++; 
     else if(type.equals("xm")) 
      this.xm++; 
     else if(type.equals("cs")) 
      this.cs++; 


     setChanged(); 
     notifyObservers(); 
    } 

    /** 
    * Remove a CSI 
    * @param type - type of CSI to remove 
    */ 
    public void removeCSI(String type){ 
     if(type.equals("ldw")) 
      this.ldw--; 
     else if(type.equals("pai")) 
      this.pai--; 
     else if(type.equals("pep")) 
      this.pep--; 
     else if(type.equals("ali")) 
      this.ali--; 
     else if(type.equals("cpp")) 
      this.cpp--; 
     else if(type.equals("gps")) 
      this.gps--; 
     else if(type.equals("rsn")) 
      this.rsn--; 
     else if(type.equals("fuel")) 
      this.fuel--; 
     else if(type.equals("xm")) 
      this.xm--; 
     else if(type.equals("cs")) 
      this.cs--; 


     setChanged(); 
     notifyObservers(); 
    } 

    /** 
    * Setter for name 
    * @param name - Employee name 
    */ 
    public void setName(String name){ 
     this.name = name; 


     setChanged(); 
     notifyObservers(); 
    } 

    /** 
    * Setter for store 
    * @param store - Store name 
    */ 
    public void setStore(String store){ 
     this.store = store; 

     setChanged(); 
     notifyObservers(); 
    } 

    /** 
    * Getter for name 
    * @return this.name 
    */ 
    public String getName(){ 
     return this.name; 
    } 

    /** 
    * Getter for store 
    * @return 
    */ 
    public String getStore(){ 
     return this.store; 
    } 
} 

誤差()。 28-29行狀態:

TextView nameView = (TextView)findViewById(R.id.nameView); 
nameView.setText(this.model.getName()); 

任何幫助解決錯誤將不勝感激!謝謝!

回答

1

nameviewnull因爲你試圖設置的setContentView()

試試這個

地方setContentView(R.layout.activity_main);

+0

this.model = new ClipboardModel(); System.out.println(this.model.getName()); this.model.addObserver(this); 

後前指的TextView。讓我試試這個真快,會回來,非常感謝! – user2360876 2013-05-08 05:16:14

+0

工作就像一個魅力!非常感謝!時間將盡快接受! – user2360876 2013-05-08 05:19:55

+0

@ user2360876很高興知道.. – Pragnani 2013-05-08 05:21:36