我正在構建一個Android應用程序,並嘗試通過使用定時器類實現幻燈片放映。第一個圖像加載正常,然後我的應用程序崩潰。任何想法可能是什麼問題?Java定時器幻燈片
import android.app.Service;
import android.content.Intent;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.IBinder;
import android.service.dreams.DreamService;
import android.support.v4.app.FragmentPagerAdapter;
import android.support.v4.app.FragmentStatePagerAdapter;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.widget.ImageView;
import java.util.ArrayList;
import java.util.List;
import java.util.Timer;
import java.util.TimerTask;
public class screenSaver extends DreamService {
ArrayList<Bitmap> imageList = new ArrayList<Bitmap>();
int slideCounter = 0;
ImageView slide;
Cursor images;
private int counter = 0;
public screenSaver() {
}
@Override
public void onAttachedToWindow() {
super.onAttachedToWindow();
setInteractive(false);
setFullscreen(true);
setContentView(R.layout.screen_saver);
databaseHelper dbHelper = new databaseHelper(this);
SQLiteDatabase db = dbHelper.getReadableDatabase();
images = db.rawQuery("SELECT " + databaseHelper.IMAGE + " FROM " + databaseHelper.TABLE_NAME + " where " + databaseHelper.LTO + " = 1", null);
images.moveToFirst();
while(!images.isAfterLast()) {
imageList.add(BitmapFactory.decodeByteArray(images.getBlob(images.getColumnIndex(databaseHelper.IMAGE)), 0, images.getBlob(images.getColumnIndex(databaseHelper.IMAGE)).length));
images.moveToNext();
}
}
@Override
public void onDreamingStarted() {
slide = (ImageView) findViewById(R.id.slider);
class flipper extends TimerTask {
@Override
public void run() {
slide.setImageBitmap(imageList.get(counter));
if(counter == (imageList.size())) {
counter = 0;
} else {
counter++;
}
}
}
Timer timer = new Timer();
timer.scheduleAtFixedRate(new flipper(), 0, 5000);
}
}
我一直在爲此奮鬥了一段時間,所以我真的非常感謝任何指導。
非常感謝!
EDIT:錯誤
Process: midamcorp.com.burgerkingapp, PID: 2126
android.view.ViewRootImpl$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.
at android.view.ViewRootImpl.checkThread(ViewRootImpl.java:6556)
at android.view.ViewRootImpl.invalidateChildInParent(ViewRootImpl.java:942)
at android.view.ViewGroup.invalidateChild(ViewGroup.java:5081)
at android.view.View.invalidateInternal(View.java:12713)
at android.view.View.invalidate(View.java:12677)
at android.view.View.invalidate(View.java:12661)
at android.widget.ImageView.invalidateDrawable(ImageView.java:246)
at android.graphics.drawable.Drawable.invalidateSelf(Drawable.java:385)
at android.graphics.drawable.Drawable.setBounds(Drawable.java:165)
at android.widget.ImageView.configureBounds(ImageView.java:1116)
at android.widget.ImageView.updateDrawable(ImageView.java:898)
at android.widget.ImageView.setImageDrawable(ImageView.java:472)
at android.widget.ImageView.setImageBitmap(ImageView.java:605)
at midamcorp.com.burgerkingapp.MainActivity$1flipper.run(MainActivity.java:48)
at java.util.Timer$TimerImpl.run(Timer.java:284)
郵政的logcat消息請。 –
不幸的是,這是我的主要障礙之一。由於這是一項服務而不是一項活動,所以我無法弄清楚如何在模擬器上進行測試,並且我沒有設備進行調試(我找不到適用於我的平板電腦的adb網橋)。 – KellyMarchewa
你試試這個:http://stackoverflow.com/questions/4008081/debugging-a-service –