У меня есть 2 класса GLLayer
и GLCamTest
. Я пытаюсь запустить метод, расположенный в GLCamTest
...
public Bitmap extractimage(int pos){
LocationData tweets;
tweets = new LocationData(this);
SQLiteDatabase db = tweets.getWritableDatabase();
//select the data
String query = "SELECT * FROM tweets;";
Cursor mcursor = db.rawQuery(query, null);
//Move to Position specified.
mcursor.moveToPosition(pos);
//get it as a ByteArray
byte[] imageByteArray=mcursor.getBlob(7);
//the cursor is not needed anymore
mcursor.close();
//convert it back to an image
ByteArrayInputStream imageStream = new ByteArrayInputStream(imageByteArray);
Bitmap theImage = BitmapFactory.decodeStream(imageStream);
return theImage;
}
Я ищу для запуска в потоке из GLLayer
, но из того, что я понимаю, мне нужен обработчик.
public void run() {
GLCamTest cam = new GLCamTest();
image = cam.extractimage(q);
}
Я начинаю тему из public void onDrawFrame(GL10 gl) {
, мой вопрос в том, как реализовать этот обработчик? Я читал http://developer.android.com/reference/android/os/Handler.html, но я до сих пор не понимаю, как я его реализую. может кто-нибудь помочь мне?
Две вещи. Во-первых, GLThread никогда не вызывал Looper.prepare(), поэтому вы не можете добавлять/создавать обработчик внутри этого потока. (Должно быть внутри основного потока пользовательского интерфейса).
Два, обработчик не нужен. Если вы просто хотите выполнить код внутри потока рендеринга...
GLSurfaceView mySurface = mMyCustomSurfaceIMadeEarlierWithTheRendererAlreadyAttached;
Runnable myRunnable = mMyRunnableThatIsSomewhere;
mySurface.queueEvent(myRunnable);
Runnable будет выполняться внутри вашего потока рендеринга до того, как метод drawFrame будет вызван в следующий проход рендеринга.