0

更新されたコード


通常の映画/スライドショーを表示するギャラリーのテレビ用のアプリを作成しようとしています。リモートタッチすると次のアクティビティに移動し、ポートレートと名前でアーティストを選択でき、dpad センターで選択したアーティストがビューに移動します。最初のページのポートレートとテキスト情報を備えたスイッチャー、およびdpadの右/左で、情報->彼の仕事の方法に関するビデオ(オプション)->彼の画像1->画像n->情報から移動します。

さて、私の問題はこれです:

    08-05 23:36:54.915: W/Trace(11124): error opening trace file: No such file or directory (2)
08-05 23:36:54.920: W/ActivityThread(11124): Application com.tsfat.galleyTV is waiting for the debugger on port 8100...
08-05 23:36:54.935: I/System.out(11124): Sending WAIT chunk
08-05 23:36:54.950: I/dalvikvm(11124): Debugger is active
08-05 23:36:55.135: I/System.out(11124): Debugger has connected
08-05 23:36:55.135: I/System.out(11124): waiting for debugger to settle...
08-05 23:36:55.340: I/System.out(11124): waiting for debugger to settle...
08-05 23:36:55.540: I/System.out(11124): waiting for debugger to settle...
08-05 23:36:55.740: I/System.out(11124): waiting for debugger to settle...
08-05 23:36:55.940: I/System.out(11124): waiting for debugger to settle...
08-05 23:36:56.140: I/System.out(11124): waiting for debugger to settle...
08-05 23:36:56.345: I/System.out(11124): waiting for debugger to settle...
08-05 23:36:56.545: I/System.out(11124): waiting for debugger to settle...
08-05 23:36:56.745: I/System.out(11124): waiting for debugger to settle...
08-05 23:36:56.945: I/System.out(11124): waiting for debugger to settle...
08-05 23:36:57.145: I/System.out(11124): waiting for debugger to settle...
08-05 23:36:57.350: I/System.out(11124): debugger has settled (1421)
08-05 23:36:58.030: D/MediaPlayer(11124): getMetadata
08-05 23:36:58.120: W/MediaPlayer(11124): info/warning (3, 0)
08-05 23:36:58.125: I/MediaPlayer(11124): Info (3,0)
08-05 23:37:30.340: I/ScreenSaverActivity(11124): Calling Intent
08-05 23:37:30.570: I/NamesList(11124): [Ishai Haviv,Kitzis,Sharon,]
08-05 23:37:30.615: I/ArtistAdapter.getView-position(11124): 0
08-05 23:37:30.635: I/ArtistPickerActivity.update()(11124): Initializing Thread for Ishai Haviv
08-05 23:37:30.640: E/BitmapWorkerTask(11124): get returns null
08-05 23:37:30.700: I/ArtistAdapter.getView-position(11124): 0
08-05 23:37:30.700: I/ArtistPickerActivity.update()(11124): Initializing Thread for Ishai Haviv
08-05 23:37:30.705: D/BitmapWorkerTask(11124): GOOD
08-05 23:37:30.710: I/ArtistAdapter.getView-position(11124): 1
08-05 23:37:30.715: I/ArtistPickerActivity.update()(11124): Initializing Thread for Kitzis
08-05 23:37:30.715: E/BitmapWorkerTask(11124): get returns null
08-05 23:37:30.720: I/ArtistAdapter.getView-position(11124): 2
08-05 23:37:30.725: I/ArtistPickerActivity.update()(11124): Initializing Thread for Sharon
08-05 23:37:30.725: E/BitmapWorkerTask(11124): get returns null
08-05 23:37:30.735: I/ArtistAdapter.getView-position(11124): 0
08-05 23:37:30.740: I/ArtistPickerActivity.update()(11124): Initializing Thread for Ishai Haviv
08-05 23:37:30.740: E/BitmapWorkerTask(11124): get returns null
08-05 23:37:30.815: I/ArtistAdapter.getView-position(11124): 0
08-05 23:37:30.820: I/ArtistPickerActivity.update()(11124): Initializing Thread for Ishai Haviv
08-05 23:37:30.820: D/BitmapWorkerTask(11124): GOOD
08-05 23:37:30.835: I/ArtistAdapter.getView-position(11124): 0
08-05 23:37:30.835: I/ArtistPickerActivity.update()(11124): Initializing Thread for Ishai Haviv
08-05 23:37:30.835: D/BitmapWorkerTask(11124): GOOD
08-05 23:37:30.845: I/ArtistAdapter.getView-position(11124): 0
08-05 23:37:30.845: I/ArtistPickerActivity.update()(11124): Initializing Thread for Ishai Haviv
08-05 23:37:30.850: D/BitmapWorkerTask(11124): GOOD
08-05 23:37:30.850: I/ArtistAdapter.getView-position(11124): 1
08-05 23:37:30.850: I/ArtistPickerActivity.update()(11124): Initializing Thread for Kitzis
08-05 23:37:30.855: D/BitmapWorkerTask(11124): GOOD
08-05 23:37:30.855: I/ArtistAdapter.getView-position(11124): 2
08-05 23:37:30.860: I/ArtistPickerActivity.update()(11124): Initializing Thread for Sharon
08-05 23:37:30.860: D/BitmapWorkerTask(11124): GOOD
08-05 23:37:30.935: D/BitmapWorkerTask(11124): GOOD
08-05 23:45:59.935: D/AndroidRuntime(11124): Shutting down VM
08-05 23:45:59.935: W/dalvikvm(11124): threadid=1: thread exiting with uncaught exception (group=0x40b79930)
08-05 23:45:59.985: E/AndroidRuntime(11124): FATAL EXCEPTION: main
08-05 23:45:59.985: E/AndroidRuntime(11124): java.lang.NullPointerException
08-05 23:45:59.985: E/AndroidRuntime(11124):    at com.tsfat.galleyTV.ArtistPickerActivity$BitmapWorkerTask.onPostExecute(ArtistPickerActivity.java:263)
08-05 23:45:59.985: E/AndroidRuntime(11124):    at android.os.AsyncTask.finish(AsyncTask.java:631)
08-05 23:45:59.985: E/AndroidRuntime(11124):    at android.os.AsyncTask.access$600(AsyncTask.java:177)
08-05 23:45:59.985: E/AndroidRuntime(11124):    at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:644)
08-05 23:45:59.985: E/AndroidRuntime(11124):    at android.os.Handler.dispatchMessage(Handler.java:99)
08-05 23:45:59.985: E/AndroidRuntime(11124):    at android.os.Looper.loop(Looper.java:137)
08-05 23:45:59.985: E/AndroidRuntime(11124):    at android.app.ActivityThread.main(ActivityThread.java:5227)
08-05 23:45:59.985: E/AndroidRuntime(11124):    at java.lang.reflect.Method.invokeNative(Native Method)
08-05 23:45:59.985: E/AndroidRuntime(11124):    at java.lang.reflect.Method.invoke(Method.java:511)
08-05 23:45:59.985: E/AndroidRuntime(11124):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:795)
08-05 23:45:59.985: E/AndroidRuntime(11124):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:562)
08-05 23:45:59.985: E/AndroidRuntime(11124):    at dalvik.system.NativeStart.main(Native Method)
08-05 23:46:00.110: I/Process(11124): Sending signal. PID: 11124 SIG: 9

何が起こっているのかわからない!!

これは私の新しいコードです:

package com.tsfat.galleyTV;

import java.io.File;
import java.lang.ref.WeakReference;

import android.R.bool;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
import android.view.Gravity;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.BaseAdapter;
import android.widget.GridView;
import android.widget.ImageView;
import android.widget.ImageView.ScaleType;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Toast;

public class ArtistPickerActivity extends Activity implements
        AdapterView.OnItemClickListener {

    String GALLERY_ROOT;
    GridView menu;
    Context c = this;
    String[] names;
    Bitmap mPlaceHolderBitmap;

    /*
     * private Runnable onTimeOut = new Runnable() {
     * 
     * @Override public void run() { // TODO Auto-generated method stub Intent i
     * = new Intent("android.intent.action.MAIN"); c.startActivity(i); }
     * 
     * };
     * 
     * Handler hTimeout = new Handler();
     */

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.artist_picker_layout);
        // getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
        getActionBar()
                .setTitle(
                        "Navigate and select with dpad to get to know the Artist's work");
        GALLERY_ROOT = getSharedPreferences("Gallery Path", 0).getString(
                "GalleryPath", "storage/GALLERY/Gallery");
        GridView gv = (GridView) findViewById(R.id.gridview);
        gv.setAdapter(new ArtistsAdapter(this));
        gv.setOnItemClickListener(this);

        mPlaceHolderBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.loading_image);

        // hTimeout.postDelayed(onTimeOut, 60*1000);
    }

    /*
     * @Override public void onUserInteraction() { // TODO Auto-generated method
     * stub super.onUserInteraction(); hTimeout.removeCallbacks(onTimeOut);
     * hTimeout.postDelayed(onTimeOut, 60*1000); }
     */

    public class ArtistView extends LinearLayout {
        private ImageView portrait;
        private TextView title;

        public ArtistView(Context context, String name) {
            super(context);
            this.setPadding(8, 8, 8, 8);
            this.setOrientation(VERTICAL);
            portrait = new ImageView(c);
            title = new TextView(c);
            title.setGravity(Gravity.CENTER_HORIZONTAL);
            portrait.setScaleType(ScaleType.CENTER_INSIDE);
            addView(portrait);
            addView(title);
            update(name);
        }

        public void update(String name) {
            Log.i("ArtistPickerActivity.update()", "Initializing Thread for "
                    + name);
            ((TextView) getChildAt(1)).setText(name);
            loadBitmap(new File(GALLERY_ROOT + "/Artists/" + name + "/Portrait.png"),
                    (ImageView) getChildAt(0));
        }

    }

    public class ArtistsAdapter extends BaseAdapter {
        Context c;

        ArtistsAdapter(Context context) {
            c = context;
            File f = new File(GALLERY_ROOT + "/Artists");
            if (!f.exists()) {
                Toast.makeText(
                        c,
                        "Gallery file system not setup correctly!!\n"
                                + "Please talk to manager to get fixed. Sorry for the annoyance.",
                        Toast.LENGTH_LONG).show();
                finish();
            }
            names = f.list();
            Log.i("NamesList", printArray(names));
        }

        private String printArray(String[] names) {
            StringBuilder res = new StringBuilder();
            res.append('[');
            for (String i : names) {
                res.append(i + ",");
            }
            res.append(']');
            return res.toString();
        }

        @Override
        public int getCount() {
            // TODO Auto-generated method stub
            return names.length;
        }

        @Override
        public Object getItem(int position) {
            // TODO Auto-generated method stub
            return new File(GALLERY_ROOT + "/Artists/" + names[position] + "/Portrait.png");
        }

        @Override
        public long getItemId(int position) {
            // TODO Auto-generated method stub
            return position;
        }

        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            Log.i("ArtistAdapter.getView-position", position + "");
            ArtistView res = (ArtistView) convertView;
            if (res == null)
                res = new ArtistView(c, names[position]);
            else
                res.update(names[position]);
            return res;
        }

    }

    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
        // TODO Auto-generated method stub
        Log.i("GridViewItemClicked","Starting Activity with " + names[position]);
        Intent moreInfo = new Intent(this,ArtistInfoActivity.class);
        moreInfo.putExtra("name", names[position]);
        startActivity(moreInfo);
    }

    public Bitmap decodeSampledBitmapFromResource(String file,
            int reqWidth, int reqHeight) {

        // First decode with inJustDecodeBounds=true to check dimensions
        final BitmapFactory.Options options = new BitmapFactory.Options();
        options.inJustDecodeBounds = true;
        BitmapFactory.decodeFile(file, options);

        // Calculate inSampleSize
        options.inSampleSize = calculateInSampleSize(options, reqWidth,
                reqHeight);

        // Decode bitmap with inSampleSize set
        options.inJustDecodeBounds = false;
        return BitmapFactory.decodeFile(file, options);
    }

    public void loadBitmap(File path, ImageView imageView) {
        if (cancelPotentialWork(path, imageView)) {
            final BitmapWorkerTask task = new BitmapWorkerTask(imageView);
            final AsyncDrawable asyncDrawable = new AsyncDrawable(mPlaceHolderBitmap, task);
            imageView.setImageDrawable(asyncDrawable);
            task.execute(path);
        }
    }   

    public static boolean cancelPotentialWork(File path, ImageView imageView) {
        final BitmapWorkerTask bitmapWorkerTask = getBitmapWorkerTask(imageView);

        if (bitmapWorkerTask != null) {
            final File bitmapData = bitmapWorkerTask.data;
            if (bitmapData != path) {
                // Cancel previous task
                bitmapWorkerTask.cancel(true);
            } else {
                // The same work is already in progress
                return false;
            }
        }
        // No task associated with the ImageView, or an existing task was
        // cancelled
        return true;
    }

    static class AsyncDrawable extends BitmapDrawable {
        private final WeakReference<BitmapWorkerTask> bitmapWorkerTaskReference;

        public AsyncDrawable(Bitmap bitmap,
                BitmapWorkerTask bitmapWorkerTask) {
            super(bitmap);
            bitmapWorkerTaskReference = new WeakReference<BitmapWorkerTask>(bitmapWorkerTask);
        }

        public BitmapWorkerTask getBitmapWorkerTask() {
            return bitmapWorkerTaskReference.get();
        }
    }

    class BitmapWorkerTask extends AsyncTask {

        private final WeakReference<ImageView> imageViewReference;
        private File data;

        public BitmapWorkerTask(ImageView imageView) {
            // Use a WeakReference to ensure the ImageView can be garbage
            // collected
            imageViewReference = new WeakReference<ImageView>(imageView);
        }

        // Decode image in background.
        @Override
        protected Bitmap doInBackground(Object... params) {
            data = (File) params[0];
            if(imageViewReference != null){
                ImageView iv = imageViewReference.get();
                return decodeSampledBitmapFromResource(data.toString(),iv.getWidth(),iv.getHeight());               
            }
            Log.e("BitmapWorkerTask", "doInBackground is null");
            return null;
        }

        @Override
        protected void onPostExecute(Object bitmap) {
            if (isCancelled()) {
                bitmap = null;
                return;
            }

            if (imageViewReference != null && bitmap != null) {
                final ImageView imageView = imageViewReference
                        .get();
                final BitmapWorkerTask bitmapWorkerTask = getBitmapWorkerTask(imageView);
                if (/*this == bitmapWorkerTask && */imageView != null) {
                    imageView.setImageBitmap((Bitmap) bitmap);
                    ((BaseAdapter) menu.getAdapter()).notifyDataSetChanged();                   
                }

                Log.i("onPostExecute","this: " + (this==bitmapWorkerTask ? "not equal" : "GOOD"));
                Log.i("onPostExecute","imageview: " + (imageView==null ? "null" : "GOOD"));
            }
            Log.i("onPostExecute","imageView reference: " + (imageViewReference==null ? "null" : "GOOD"));
            Log.i("onPostExecute","bitmap: " + (bitmap==null ? "null" : "GOOD"));
        }
    }

    public static int calculateInSampleSize(BitmapFactory.Options options,
            int reqWidth, int reqHeight) {
        // Raw height and width of image
        final int height = options.outHeight;
        final int width = options.outWidth;
        int inSampleSize = 1;

        if (height > reqHeight || width > reqWidth) {

            // Calculate ratios of height and width to requested height and
            // width
            final int heightRatio = Math.round((float) height
                    / (float) reqHeight);
            final int widthRatio = Math.round((float) width / (float) reqWidth);

            // Choose the smallest ratio as inSampleSize value, this will
            // guarantee
            // a final image with both dimensions larger than or equal to the
            // requested height and width.
            inSampleSize = heightRatio < widthRatio ? heightRatio : widthRatio;
        }

        return inSampleSize;
    }

    private static BitmapWorkerTask getBitmapWorkerTask(ImageView imageView) {
        if (imageView != null) {
            final Drawable drawable = imageView.getDrawable();
            if (drawable instanceof AsyncDrawable) {
                final AsyncDrawable asyncDrawable = (AsyncDrawable) drawable;
                Log.d("BitmapWorkerTask","GOOD");
                return asyncDrawable.getBitmapWorkerTask();
            }
        }
        Log.e("BitmapWorkerTask","get returns null");
        return null;
    }

}

助けてください、私はこれをひどく終わらせる必要があります!!

4

1 に答える 1

0

UI (テキスト、画像など) を変更する場合は、メイン (UI) スレッドで行う必要があります。

runOnUiThreadMethod を使用できます。

myActivity.runOnUiThread(new Runnable() {
    @Override
    public void run() {
        // Code modifying the UI
    }
});
于 2013-08-05T12:57:23.080 に答える