2011-10-21 119 views
0

如何將活動中的對象傳遞給android上的非活動類?我試圖使用該類的一個實例,但是當我使用一個對象(來自該類)時,我得到了NullPointerException將活動中的對象傳遞給非活動類

任何人都可以幫助我嗎?

在此先感謝。

這裏是我的代碼:

public class IncercLaPauseActivity extends Activity { 

    RelativeLayout layout; 
    TextView index; 


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

     layout = (RelativeLayout) findViewById(R.id.imagBackground); 
     index = (TextView) findViewById(R.id.index); 
     } 
} 

XML文件是:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" android:layout_width="fill_parent" 
    android:layout_height="fill_parent" android:background="@drawable/photo0" 
    android:id="@+id/imagBackground"> 

    <TextView android:layout_width="20dip" android:layout_height="20dip" 
     android:layout_marginLeft="250dip" android:layout_marginTop="15dip" 
     android:background="#FFFFFF" android:id="@+id/index" android:text="0" 
     android:textColor="#000000"> 
    </TextView> 
    <com.www.MyImageView android:layout_width="fill_parent" 
     android:layout_height="fill_parent" android:id="@+id/myimage" 
     android:layout_below="@id/index"> 
    </com.www.MyImageView> 

</RelativeLayout> 

和非活性類我做這樣的事情:

public class MyImageView extends ImageView { 

    Paint rectanglePaint; 
    int x, y,i=0; 
    Rect tete, yeux, dos, abdomen, epaule1, epaule2, avant_bras1, avant_bras2, 
      main1, main2, genoux, pieds, respiration; 
    Bitmap bit; 

    IncercLaPauseActivity obj; 

    private int[] photos = { R.drawable.photo0, R.drawable.photo1, 
      R.drawable.photo2, R.drawable.photo3, R.drawable.photo4, 
      R.drawable.photo5, R.drawable.photo6, R.drawable.photo7, 
      R.drawable.photo8, R.drawable.photo9, R.drawable.photo10, 
      R.drawable.photo11, R.drawable.photo12, R.drawable.photo13, 
      R.drawable.photo14, R.drawable.photo15, R.drawable.photo16, 
      R.drawable.photo17, R.drawable.photo18, R.drawable.photo19, 
      R.drawable.photo20, R.drawable.photo21, R.drawable.photo22 }; 

    public MyImageView(Context context) { 
     super(context); 
    } 

    public MyImageView(Context context, AttributeSet attrs) { 
     super(context, attrs); 
     rectanglePaint = new Paint(); 
     rectanglePaint.setARGB(120, 255, 0, 0); 
     tete = new Rect(220, 0, 280, 67);// in pixels 

     yeux = new Rect(220, 4, 280, 20); 

     epaule1 = new Rect(175, 75, 200, 197); 
     epaule2 = new Rect(297, 75, 320, 197); 

     avant_bras1 = new Rect(170, 200, 195, 300);// in pixels 
     avant_bras2 = new Rect(300, 200, 325, 300);// in pixels 

     main1 = new Rect(170, 303, 195, 345); 
     main2 = new Rect(300, 303, 325, 345); 

     respiration = new Rect(200, 75, 297, 177); 
     abdomen = new Rect(202, 177, 290, 260); 
     genoux = new Rect(200, 260, 297, 430); 
     bit = BitmapFactory.decodeResource(getResources(), 
        R.drawable.anim_ctrl_panel); 
    } 

    @Override 
    protected void onDraw(Canvas canvas) { 
     super.onDraw(canvas); 
     System.out.println("draw"); 
     canvas.drawRect(tete, rectanglePaint); 

     canvas.drawRect(epaule1, rectanglePaint); 
     canvas.drawRect(epaule2, rectanglePaint); 

     rectanglePaint.setARGB(120, 0, 255, 0); 
     canvas.drawRect(avant_bras1, rectanglePaint); 
     canvas.drawRect(avant_bras2, rectanglePaint); 

     rectanglePaint.setARGB(120, 0, 0, 255); 
     canvas.drawRect(main1, rectanglePaint); 
     canvas.drawRect(main2, rectanglePaint); 

     rectanglePaint.setARGB(120, 0, 255, 255); 
     canvas.drawRect(respiration, rectanglePaint); 

     rectanglePaint.setARGB(120, 255, 0, 255); 
     canvas.drawRect(abdomen, rectanglePaint); 
     canvas.drawRect(yeux, rectanglePaint); 

     rectanglePaint.setARGB(120, 255, 255, 0); 
     canvas.drawRect(genoux, rectanglePaint); 


     canvas.drawBitmap(bit, 80, 410, null); 
    } 

    @Override 
    public boolean onTouchEvent(MotionEvent event) { 
     x = (int) event.getX(); 
     System.out.println("x este " + x); 
     y = (int) event.getY(); 
     System.out.println("y este " + y); 
     if (avant_bras1.contains(x, y) || (avant_bras2.contains(x, y))) { 
      System.out.println("antebrat"); 
      Intent intent = new Intent(); 
      intent.setClass(this.getContext(), Selecter.class); 
      this.getContext().startActivity(intent); 
     } 

     if (event.getX() > bit.getWidth()/2) { 
      System.out.println("right"); 
      i++; 
      System.out.println("i=" + i); 
      if (i <= 22) { 
       obj.layout.setBackgroundResource(photos[i]); 
       obj.index.setText(String.valueOf(i)); 
      } else { 
       i = 0; 
       obj.layout.setBackgroundResource(photos[i]); 
       obj.index.setText(String.valueOf(i)); 
      } 
     }else { 
      i--; 
      System.out.println("i=" + i); 
      if (i >= 0) { 
       obj.layout.setBackgroundResource(photos[i]); 
       obj.index.setText(String.valueOf(i)); 
      } else { 
       i = 22; 
       obj.layout.setBackgroundResource(photos[i]); 
       obj.index.setText(String.valueOf(i)); 
      } 
     } 
     System.out.println("left"); 
     return false; 
    } 

} 

,我得到這個錯誤:

10-21 17:34:42.825: ERROR/AndroidRuntime(2011): java.lang.NullPointerException 
10-21 17:34:42.825: ERROR/AndroidRuntime(2011):  at com.www.MyImageView.onTouchEvent(MyImageView.java:112) 
10-21 17:34:42.825: ERROR/AndroidRuntime(2011):  at android.view.View.dispatchTouchEvent(View.java:3709) 
10-21 17:34:42.825: ERROR/AndroidRuntime(2011):  at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:822) 
10-21 17:34:42.825: ERROR/AndroidRuntime(2011):  at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:822) 
10-21 17:34:42.825: ERROR/AndroidRuntime(2011):  at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:822) 
10-21 17:34:42.825: ERROR/AndroidRuntime(2011):  at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:822) 
10-21 17:34:42.825: ERROR/AndroidRuntime(2011):  at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:1659) 

其中line 112是第一線obj.layout.setBackgroundResource(photos[i]);

+1

請發表您的代碼是導致空指針,以發生,這會幫助你更快地得到答案。 – Bobbake4

+0

你應該把它傳遞給你的第二類的構造函數,並確保你有對象的實例。添加你的代碼,以便我們可以幫助你解決它:) – Houcine

+0

同意上面的評論 - 發佈更多的代碼,並明確你想要做什麼,這樣我們可以最好地幫助你。 –

回答

0

,你應該這樣做:

在onCreate方法補充一點:

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

     layout = (RelativeLayout) findViewById(R.id.imagBackground); 
     index = (TextView) findViewById(R.id.index); 
     //here pass your activity (this) to your second Class and instanciate it 
     YourSecondClass obj = new YourSecondClass(this); 
     } 

,並在第二類中,構造函數將是這樣的:

IncercLaPauseActivity context ; 

public YourSecondClass(IncercLaPauseActivity _context){ 
    this.context = _context; 
    .... 
} 

注意:你sh烏爾德從未實例化的活動:),

編輯:

取代obj.layout.setBakgroun.. ..有:

RelativeLayour layout = (RelativeLayout) this.getParent(); 

layout.setBackgroundResource(photo[i]); 
+0

但我的第二個類擴展ImageView並設置在xml文件上,如果我更改構造函數這樣,它將無法工作: – Gabrielle

+0

我用我所有的代碼編輯了我的問題 – Gabrielle

+0

我在一般情況下給你一個答案,在你的前代碼中,你在第二類的構造函數中實例化你的活動,這就是爲什麼它沒有工作,因爲你不應該用新的實例來活動。 ..。如果你的第二個類是一個imageView,所以你應該在onCreate方法上聲明你的imageView,並將上下文傳遞給它的構造函數(通過這個)。添加兩個類的完整代碼plz – Houcine

0

喜,最好的方法是創建一個對象作爲

public class TestingA extends Activity { ....................... .................

public static Example objExml = new Example(); 

.......................... ...............}

,然後訪問該對象在另一個班級爲下

public class TestingB extends Activity{ 

................................... 
your code 
................................ 

TestingA.objExml 

............................... 

} 
相關問題