1

在我的应用程序中,我将图像相机存储到私人文件夹并被加密。现在我想将解密后的图像显示到画廊,它不应该存储在任何地方。

画廊的代码是

    public class DisplayImage extends Activity{

    private Uri[] mUrls;
    String[] mFiles=null;
    private final String KEY = "abc";
    ImageView imv;
     List<String> tFileList = new ArrayList<String>();
        byte [] decrpt;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.gridview);

        imv = (ImageView)findViewById(R.id.ImageView01);
        Gallery g = (Gallery) findViewById(R.id.examplegallery);
        g.setAdapter(new ImageAdapter(this, ReadSDCard()));

        g.setOnItemClickListener(new OnItemClickListener() {
            public void onItemClick(AdapterView<?> parent,
              View v, int position, long id) {

                System.out.println("Positi"+position);
                List<String> FileList = tFileList;

                 Bitmap bm = BitmapFactory.decodeFile(
                          FileList.get(position).toString());
                  imv.setImageBitmap(bm);



            }
        });
        }

        private List<String> ReadSDCard()
        {


         //It have to be matched with the directory in SDCard
         File f = new File("sdcard/data/crak");

         File[] files=f.listFiles();

         for(int i=0; i<files.length; i++)
         {
          File file = files[i];
          /*It's assumed that all file in the path are in supported type*/
          tFileList.add(file.getPath());
         }
         return tFileList;
        }

        public class ImageAdapter extends BaseAdapter {
        int mGalleryItemBackground;
        private Context mContext;
        private List<String> FileList;

        public ImageAdapter(Context c, List<String> fList) {
            mContext = c;
            FileList = fList;
            TypedArray a = obtainStyledAttributes(R.styleable.GalleryTheme);
            mGalleryItemBackground = a.getResourceId(
            R.styleable.GalleryTheme_android_galleryItemBackground,0);
            a.recycle();
        }

        public int getCount() {
            return FileList.size();
        }

        public Object getItem(int position) {
            return position;
        } 

        public long getItemId(int position) {
            return position;
        }

        public View getView(int position, View convertView,
          ViewGroup parent) {
            ImageView i = new ImageView(mContext);

            Bitmap bm = BitmapFactory.decodeFile(
              FileList.get(position).toString());
            ByteArrayOutputStream baos = new ByteArrayOutputStream();
            bm.compress(Bitmap.CompressFormat.JPEG, 100, baos);
            byte[] data = baos.toByteArray();


        try {
            CryptClass simpleCrypto = new CryptClass();

            decrpt = simpleCrypto.decrypt(KEY, data);
        } catch (Exception e) {
            e.printStackTrace();
        }
        Bitmap bitmapimage = BitmapFactory.decodeByteArray(decrpt, 0, decrpt.length); 
            i.setImageBitmap(bitmapimage);

            i.setLayoutParams(new Gallery.LayoutParams(150, 100));
            i.setScaleType(ImageView.ScaleType.FIT_XY);
            i.setBackgroundResource(mGalleryItemBackground);

            return i;
        }
        }
}

还有用于解密的java文件,

    private  byte[] decrypt(byte[] raw, byte[] encrypted) throws Exception {
    SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");
        Cipher cipher = Cipher.getInstance("AES");
    cipher.init(Cipher.DECRYPT_MODE, skeySpec);
    byte[] decrypted = cipher.doFinal(encrypted);
        return decrypted;
}

但它正在显示null pointer exeption。我该如何解决。

logcat 错误消息

   01-09 15:32:25.882: E/AndroidRuntime(17863): FATAL EXCEPTION: main
  01-09 15:32:25.882: E/AndroidRuntime(17863): java.lang.NullPointerException
  01-09 15:32:25.882: E/AndroidRuntime(17863):  at c     com.example.security.DisplayImage$ImageAdapter.getView(DisplayImage.java:110)
 01-09 15:32:25.882: E/AndroidRuntime(17863):   at android.widget.AbsSpinner.onMeasure(AbsSpinner.java:192)
01-09 15:32:25.882: E/AndroidRuntime(17863):    at android.view.View.measure(View.java:8313)
 01-09 15:32:25.882: E/AndroidRuntime(17863):   at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:3138)
4

0 回答 0