Android + FATAL EXCEPTION: Timer-0 (Removing Image

2019-05-14 15:40发布

问题:

In my Android application, I am using timer to show corresponding ImageViews using TIMER. I got an error

02-27 06:39:33.999: E/AndroidRuntime(1325): FATAL EXCEPTION: Timer-0
02-27 06:39:33.999: E/AndroidRuntime(1325):       android.view.ViewRootImpl$CalledFromWrongThreadException: Only the original thread that  created a view hierarchy can touch its views.
02-27 06:39:33.999: E/AndroidRuntime(1325):     at android.view.ViewRootImpl.checkThread(ViewRootImpl.java:4746)
02-27 06:39:33.999: E/AndroidRuntime(1325):     at android.view.ViewRootImpl.requestLayout(ViewRootImpl.java:823)
02-27 06:39:33.999: E/AndroidRuntime(1325):     at android.view.View.requestLayout(View.java:15468)
02-27 06:39:33.999: E/AndroidRuntime(1325):     at android.view.View.requestLayout(View.java:15468) 
02-27 06:39:33.999: E/AndroidRuntime(1325):     at android.view.View.requestLayout(View.java:15468)
02-27 06:39:33.999: E/AndroidRuntime(1325):     at android.view.View.requestLayout(View.java:15468)
02-27 06:39:33.999: E/AndroidRuntime(1325):     at android.view.View.requestLayout(View.java:15468)
02-27 06:39:33.999: E/AndroidRuntime(1325):     at android.view.View.setFlags(View.java:8437)
02-27 06:39:33.999: E/AndroidRuntime(1325):     at android.view.View.setVisibility(View.java:5714)
02-27 06:39:33.999: E/AndroidRuntime(1325):     at android.widget.ImageView.setVisibility(ImageView.java:1161)
02-27 06:39:33.999: E/AndroidRuntime(1325):     at com.SAI.timer.MainActivity$1.run(MainActivity.java:51)
02-27 06:39:33.999: E/AndroidRuntime(1325):     at java.util.Timer$TimerImpl.run(Timer.java:284)

And the code is : (How to Make A Image view disappear here,)

public class MainActivity extends Activity {

MediaPlayer mp;
ImageView firstImageView,secondImageView,thirdImageView,fourthImageView,fullImageView;
Timer t;
TimerTask welcome;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);



    firstImageView = (ImageView)findViewById(R.id.imageView1);
    secondImageView = (ImageView)findViewById(R.id.imageView2);
    thirdImageView = (ImageView)findViewById(R.id.imageView3);
    fourthImageView = (ImageView)findViewById(R.id.imageView4);
    fullImageView = (ImageView)findViewById(R.id.imageView5);


      firstImageView.setOnClickListener (new ClickListener());
      secondImageView.setOnClickListener(new ClickListener());
      thirdImageView.setOnClickListener (new ClickListener());
      fourthImageView.setOnClickListener(new ClickListener());


      mp = MediaPlayer.create(getApplicationContext(), R.raw.yes);

      t = new Timer();
      welcome = new TimerTask(){

            @Override
            public void run() {
                // TODO Auto-generated method stub
                fullImageView.setVisibility(View.GONE);

            }
        };


}


class ClickListener implements OnClickListener {
    public void onClick(View v) {
        // TODO Auto-generated method stub

        switch (v.getId()) {
        case R.id.imageView1:

            mp.start();



                firstImageView.setVisibility(View.GONE);
                secondImageView.setVisibility(View.GONE);
                thirdImageView.setVisibility(View.GONE);
                fourthImageView.setVisibility(View.GONE);

                fullImageView.setVisibility(View.VISIBLE);
                fullImageView.setImageResource(R.drawable.ic_launcher);

                t.schedule(welcome, 5000);



            break;

        case R.id.imageView2:


            Toast.makeText(getApplicationContext(), "Oh !!! Wrong Yaar", Toast.LENGTH_SHORT).show();



            break;

here I want to Make the "fullImageView" Disappear(View.GONE) after the the media playing(5 Secs) is stopped. And Return to the previous activity showing remaining Imageviews As in the Above code:-)

回答1:

Use this Handler to do anything after 5000ms

try {
                    new Handler().postDelayed(new Runnable() {
                          @Override
                          public void run() {
                     //Your process to do

                          }
                      }, 5000);
                } catch (Exception e) {
                    e.printStackTrace();
                }


标签: android timer