Передача объекта из действия в неактивный класс - PullRequest
0 голосов
/ 21 октября 2011

Как я могу передать объект из действия в неактивный класс на 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]);

Ответы [ 2 ]

0 голосов
/ 21 октября 2011

привет, лучший способ - создать объект как

открытый класс TestingA extends Activity {........................................

public static Example objExml = new Example(); 

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

, а затем доступ к объекту в другом классе, как в

public class TestingB extends Activity{

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

TestingA.objExml 

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

}
0 голосов
/ 21 октября 2011

вы должны сделать так:

в методе 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;
   ....
}

Примечание: вы никогда не должны создавать Activity:),

РЕДАКТИРОВАТЬ:

заменить obj.layout.setBakgroun.. .. на:

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

layout.setBackgroundResource(photo[i]);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...