Как обновить изображение в режиме просмотра изображений? - PullRequest
0 голосов
/ 20 марта 2012

Я пытаюсь отобразить изображение (отредактированное), скажем, каждую 1 секунду, я наткнулся на AsyncTask и подумал, что оно может работать. Ниже приведен код для этого,

public class UpdateImageView extends Activity {
    IntBuffer Pixel_Buffer;
    Bitmap bitmapPreview;
    ImageView setimage = (ImageView) findViewById(R.id.setimage); 

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.update_image);
        BackgroundAsyncTask task = new BackgroundAsyncTask();
        task.execute();
    }

    public class BackgroundAsyncTask extends
            AsyncTask<Void, IntBuffer, Void> {

        int myProgress;

        @Override
        protected void onPostExecute(Void result) {
            // TODO Auto-generated method stub
            Toast.makeText(getApplicationContext(),
                "onPostExecute", Toast.LENGTH_LONG).show();
            // buttonStartProgress.setClickable(true);
        }

        @Override
        protected void onPreExecute() {
            // TODO Auto-generated method stub
            Toast.makeText(getApplicationContext(),
                "onPreExecute", Toast.LENGTH_LONG).show();
            myProgress = 0;
        }

        @Override
        protected Void doInBackground(Void... params) {
            // TODO Auto-generated method stub
            Pixel_Buffer = IntBuffer.allocate(bitmapPreview.getWidth()*bitmapPreview.getHeight());
            bitmapPreview.copyPixelsToBuffer(Pixel_Buffer);
            int currentpixelpos = 0,pixel_counter = 0;
         //     int[] temp_image_array = new int[bitmapPreview.getWidth()*bitmapPreview.getHeight()] ;
            pixel_counter = 0;
            for(int i=0; i<bitmapPreview.getHeight();i++)
            {
                for(int j=0; j<(bitmapPreview.getWidth());j++)
                {
                    currentpixelpos =  (int)(i*bitmapPreview.getWidth())+ (int)j;
                    Pixel_Buffer.put(currentpixelpos, 0x55000000);
                }
                publishProgress(Pixel_Buffer);
            }
            return null;
        }

        @Override
        protected void onProgressUpdate(IntBuffer... buffer) {
            // TODO Auto-generated method stub
            //  progressBar.setProgress(values[0]);
            bitmapPreview.copyPixelsFromBuffer(Pixel_Buffer);
            setimage.setImageBitmap(bitmapPreview);
        }
    }
}

И когда я вызываю это действие, я получаю следующее сообщение об ошибке в logcat.

03-20 18:20:31.833: E/AndroidRuntime(1081): FATAL EXCEPTION: main
03-20 18:20:31.833: E/AndroidRuntime(1081): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.android.print/com.android.print.UpdateImageView}: java.lang.NullPointerException
03-20 18:20:31.833: E/AndroidRuntime(1081):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2585)
03-20 18:20:31.833: E/AndroidRuntime(1081):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)
03-20 18:20:31.833: E/AndroidRuntime(1081):     at android.app.ActivityThread.access$2300(ActivityThread.java:125)
03-20 18:20:31.833: E/AndroidRuntime(1081):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033)
03-20 18:20:31.833: E/AndroidRuntime(1081):     at android.os.Handler.dispatchMessage(Handler.java:99)
03-20 18:20:31.833: E/AndroidRuntime(1081):     at android.os.Looper.loop(Looper.java:123)
03-20 18:20:31.833: E/AndroidRuntime(1081):     at android.app.ActivityThread.main(ActivityThread.java:4627)
03-20 18:20:31.833: E/AndroidRuntime(1081):     at java.lang.reflect.Method.invokeNative(Native Method)
03-20 18:20:31.833: E/AndroidRuntime(1081):     at java.lang.reflect.Method.invoke(Method.java:521)
03-20 18:20:31.833: E/AndroidRuntime(1081):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
03-20 18:20:31.833: E/AndroidRuntime(1081):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
03-20 18:20:31.833: E/AndroidRuntime(1081):     at dalvik.system.NativeStart.main(Native Method)
03-20 18:20:31.833: E/AndroidRuntime(1081): Caused by: java.lang.NullPointerException
03-20 18:20:31.833: E/AndroidRuntime(1081):     at android.app.Activity.findViewById(Activity.java:1637)
03-20 18:20:31.833: E/AndroidRuntime(1081):     at com.android.print.UpdateImageView.<init>(UpdateImageView.java:25)
03-20 18:20:31.833: E/AndroidRuntime(1081):     at java.lang.Class.newInstanceImpl(Native Method)
03-20 18:20:31.833: E/AndroidRuntime(1081):     at java.lang.Class.newInstance(Class.java:1429)
03-20 18:20:31.833: E/AndroidRuntime(1081):     at android.app.Instrumentation.newActivity(Instrumentation.java:1021)
03-20 18:20:31.833: E/AndroidRuntime(1081):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2577)
03-20 18:20:31.833: E/AndroidRuntime(1081):     ... 11 more

Ответы [ 2 ]

1 голос
/ 19 апреля 2012

Я думаю, вы должны передать этот код:

ImageView setimage = (ImageView) findViewById(R.id.setimage);

После метода setContentView () ..

Это делает нулевой просмотр изображений, потому что нет ресурса, android найдет R.id.setimage

см. эту ссылку:

Android setContentView ()

http://developer.android.com/reference/android/app/Activity.html#setContentView%28android.view.View%29

Метод onCreate () объясняет далее

http://developer.android.com/reference/android/app/Activity.html#onCreate%28android.os.Bundle%29

0 голосов
/ 20 марта 2012
public void updateImage()
{
    new Handler().postDelayed(new Runnable() {
            @Override
            public void run() {
                updateImage();
            }
        },1000);
//Update image in imageview here.... 
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...