2012-05-15 79 views
1

我正在創建一個應用程序,它引發錯誤,活動未啓動。我的活動類:Android應用程序中的活動未啓動錯誤

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.videos_layout); 
    i = new FirstImage(this); 
    c = (ViewFlipper) findViewById(R.id.viewFlipper3); 
    back = (Button) findViewById(R.id.button1); 
    next = (Button) findViewById(R.id.button2); 
    t = (TextView) findViewById(R.id.textView1); 
    if(count == 0) 
     i.changeImage(R.drawable.human); 
    c.addView(i); 
    c.setOnTouchListener(this); 
    c.onTouchEvent(event); 
    addListenerOnButton(); 
    } 


    private void addListenerOnButton() { 
     if (count == 0) 
      back.setEnabled(false); 
     next.setOnClickListener(new OnClickListener() { 

      public void onClick(View arg0) { 
       if(count==0){ 
       i.changeImage(R.drawable.hand); 
       back.setEnabled(true); 
       count++; 

       addListenerOnButton(); 

       } 
       else if (count==1){ 
        i.changeImage(R.drawable.tissue); 
        count++; 

        addListenerOnButton(); 

       } 

       else if (count==2){ 
        image.setImageResource(R.drawable.cellconstfinal1); 
        count++; 

        addListenerOnButton(); 


       } 
       else if (count==3){ 
        //nucleus 
        image.setImageResource(R.drawable.cellconstfinal1); 
        count++; 

        addListenerOnButton(); 

       } 
       else if (count==4){ 
        //nchromosome 
        image.setImageResource(R.drawable.hand); 
        count++; 

        addListenerOnButton(); 

       } 
       else 
       { //double helix 
        count++; 
        image.setImageResource(R.drawable.handash1); 
        next.setEnabled(false); 

        addListenerOnButton(); 

       } 

      } 
     }); 

     back.setOnClickListener(new OnClickListener() { 


      public void onClick(View arg0) { 
       if(count==1){ 
        image.setImageResource(R.drawable.human); 
        back.setEnabled(false); 
        count--; 

        addListenerOnButton(); 

        } 
        else if (count==2){ 
         image.setImageResource(R.drawable.hand); 
         count--; 

         addListenerOnButton(); 

        } 

        else if (count==3){ 
         image.setImageResource(R.drawable.tissue); 
         count--; 

         addListenerOnButton(); 


        } 
        else if (count==4){ 
         image.setImageResource(R.drawable.cellconstfinal1); 
         count--; 

         addListenerOnButton(); 

        } 
        else if (count==5){ 
         //nucleus 
         image.setImageResource(R.drawable.tissue); 
         count--; 

         addListenerOnButton(); 


        } 
        else { 
         //chromosome 
         //count==6 
         image.setImageResource(R.drawable.cellconstfinal1); 
         count--; 

         addListenerOnButton(); 
         next.setEnabled(true); 

        } 
       } 
      }); 
    } 




public void pageinfo(float a,float b){ 

     t.setText(Float.toString(a)+"x"+Float.toString(b)+"y"); 

    } 



public boolean onTouch(View v, MotionEvent me) { 
    // TODO Auto-generated method stub 
    switch(me.getAction()){ 
    case MotionEvent.ACTION_DOWN: 
     a=me.getX(); 
     b= me.getY(); 
     pageinfo(a,b); 
     break; 
    case MotionEvent.ACTION_MOVE: 
     a=me.getX(); 
     b= me.getY(); 
     pageinfo(a,b); 
     break; 
    case MotionEvent.ACTION_UP: 
     a=me.getX(); 
     b= me.getY(); 
     pageinfo(a,b); 
     break; 
    case MotionEvent.ACTION_OUTSIDE: 
     a=me.getX(); 
     b= me.getY(); 
     pageinfo(a,b); 
     break; 
    default: return false; 
    } 
    return true; 

} 
} 

FirstImage類代碼:

public class FirstImage extends ImageView { 

    float a=0; 
    float b=0; 
    TextView t; 
    ImageView i; 

    public FirstImage(Context context) { 
     super(context); 
     t= (TextView) findViewById(R.id.textView1); 
     i= new ImageView (context); 
    } 

    public FirstImage(Context context, AttributeSet attrs) { 
     super(context, attrs); 
    } 

    protected void changeImage(int id){ 
     i.setImageResource(id); 
    } 

與異常的堆棧跟蹤:

05-11 00:21:41.197: E/AndroidRuntime(1142): FATAL EXCEPTION: main 
05-11 00:21:41.197: E/AndroidRuntime(1142): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.androidtablayout/com.example.androidtablayout.VideosActivity}: java.lang.NullPointerException 
05-11 00:21:41.197: E/AndroidRuntime(1142):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2663) 
05-11 00:21:41.197: E/AndroidRuntime(1142):  at android.app.ActivityThread.startActivityNow(ActivityThread.java:2503) 
05-11 00:21:41.197: E/AndroidRuntime(1142):  at android.app.LocalActivityManager.moveToState(LocalActivityManager.java:127) 
05-11 00:21:41.197: E/AndroidRuntime(1142):  at android.app.LocalActivityManager.startActivity(LocalActivityManager.java:339) 
05-11 00:21:41.197: E/AndroidRuntime(1142):  at android.widget.TabHost$IntentContentStrategy.getContentView(TabHost.java:651) 
05-11 00:21:41.197: E/AndroidRuntime(1142):  at android.widget.TabHost.setCurrentTab(TabHost.java:323) 
05-11 00:21:41.197: E/AndroidRuntime(1142):  at android.widget.TabHost$2.onTabSelectionChanged(TabHost.java:129) 
05-11 00:21:41.197: E/AndroidRuntime(1142):  at android.widget.TabWidget$TabClickListener.onClick(TabWidget.java:453) 
05-11 00:21:41.197: E/AndroidRuntime(1142):  at android.view.View.performClick(View.java:2408) 
05-11 00:21:41.197: E/AndroidRuntime(1142):  at android.view.View$PerformClick.run(View.java:8816) 
05-11 00:21:41.197: E/AndroidRuntime(1142):  at android.os.Handler.handleCallback(Handler.java:587) 
05-11 00:21:41.197: E/AndroidRuntime(1142):  at android.os.Handler.dispatchMessage(Handler.java:92) 
05-11 00:21:41.197: E/AndroidRuntime(1142):  at android.os.Looper.loop(Looper.java:123) 
05-11 00:21:41.197: E/AndroidRuntime(1142):  at android.app.ActivityThread.main(ActivityThread.java:4627) 
05-11 00:21:41.197: E/AndroidRuntime(1142):  at java.lang.reflect.Method.invokeNative(Native Method) 
05-11 00:21:41.197: E/AndroidRuntime(1142):  at java.lang.reflect.Method.invoke(Method.java:521) 
05-11 00:21:41.197: E/AndroidRuntime(1142):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868) 
05-11 00:21:41.197: E/AndroidRuntime(1142):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626) 
05-11 00:21:41.197: E/AndroidRuntime(1142):  at dalvik.system.NativeStart.main(Native Method) 
05-11 00:21:41.197: E/AndroidRuntime(1142): Caused by: java.lang.NullPointerException 
05-11 00:21:41.197: E/AndroidRuntime(1142):  at com.example.androidtablayout.VideosActivity.onCreate(VideosActivity.java:45) 
05-11 00:21:41.197: E/AndroidRuntime(1142):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) 
05-11 00:21:41.197: E/AndroidRuntime(1142):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627) 
05-11 00:21:41.197: E/AndroidRuntime(1142):  ... 18 more 

回答

1

您應該總是初始化在onCreate方法的觀點:

//... 
FirstImage i; 
//... 

    @Override 
     public void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      setContentView(R.layout.videos_layout); 
      i = new FirstImage(this); 
    //... 

另外在FirstImage類初始化在構造函數中那些Views

public FirstImage(Context context) { 
    super(context); 
    TextView t= (TextView) findViewById(R.id.textView1); // WHERE do you expect to find this view, in which layout? 
    ImageView i= new ImageView (context); //NEVER pass a null Context 
} 

編輯:

我的建議是遵循一些教程自定義Views。您不能將其他Views添加到ImageView子類(並且您不應該)。即使您在FirstImage中構建ImageViewchangeImage方法也會以您當前構建代碼的方式拋出NullPointerException

一個簡單的自定義視圖:

public class FirstImage extends LinearLayout { 
    float a=0; 
    float b=0; 

    TextView t; 
    ImageView i; 

    public FirstImage(Context context) { 
     super(context); 
     t = (TextView) findViewById(R.id.textView1); // What is with this TextView?!? 
     i = new ImageView (context); 
     LinearLayout.LayoutParams lp = LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT); 
     addView(i, lp); 
    } 

protected void changeImage(int id){ 
    i.setImageResource(id); 
} 
+0

它也不適合我..... – Ashishsingh

+1

@Ashishsingh你有同樣的錯誤嗎? – Luksprog

+0

如何在構造函數中傳遞上下文 – Ashishsingh

1

上FirstImage班線沒有22.just因爲它給空指針異常活動不開始。首先解決零點指針例外

+0

我不理解爲什麼它被顯示在超(上下文)上構造一個錯誤; – Ashishsingh

+1

ImageView i = new ImageView(null);使用ImageView i = new ImageView(this); –

+0

如果完成然後它顯示我這個錯誤「的構造函數ImageView(FirstImage)是未定義的」 – Ashishsingh

1

弗里斯特你應該誇大你的佈局,如:

TextView t; 
ImageView i; 
LayoutInflater inflater; 
public FirstImage(Context context) { 
super(context); 
inflater = LayoutInflater.from(context); 
View v=inflater.inflate(R.layout.yourlayout, null); 
t= (TextView)v.findViewById(R.id.textView1); 
i= new ImageView (context); 


} 
+0

什麼是佈局Inflater – Ashishsingh

+1

LayoutInflater用於實例化創建視圖的XML。這包括解析XML,創建View對象,並最終將其添加到View層次結構中。 –

+0

感謝zaz gmy的幫助... – Ashishsingh

相關問題