Как бы я реализовал обработчик здесь? - PullRequest
1 голос
/ 20 июля 2010

У меня есть 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, но до сих пор не понимаю, как бы это реализовать.кто-нибудь может мне помочь?

1 Ответ

1 голос
/ 26 июля 2010

Две вещи.Во-первых, GLThread никогда не вызывал Looper.prepare (), поэтому вы не можете добавить / создать обработчик внутри этого потока.(Должно быть внутри основного потока пользовательского интерфейса).

Два, обработчик не нужен.Если вы просто хотите выполнить код внутри потока рендеринга ...

GLSurfaceView mySurface = mMyCustomSurfaceIMadeEarlierWithTheRendererAlreadyAttached;
Runnable myRunnable = mMyRunnableThatIsSomewhere;
mySurface.queueEvent(myRunnable);

Runnable будет выполнен внутри вашего потока рендеринга до вызова метода drawFrame на следующем проходе рендеринга.

...