Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/360.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/181.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在android中将照片插入数据库时出现空指针异常_Java_Android_Sqlite_Bitmap - Fatal编程技术网

Java 在android中将照片插入数据库时出现空指针异常

Java 在android中将照片插入数据库时出现空指针异常,java,android,sqlite,bitmap,Java,Android,Sqlite,Bitmap,我是android的初学者,我正在制作一个在sqlite数据库中插入数据的应用程序,我在将记录添加到数据库时遇到了空指针异常 此代码从imageview获取pic,并将其转换为位图,然后转换为字节以保存它 有没有建议避免这个例外 这是密码 imageView1.setDrawingCacheEnabled(true); imageView1.measure(MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNS

我是android的初学者,我正在制作一个在sqlite数据库中插入数据的应用程序,我在将记录添加到数据库时遇到了空指针异常

此代码从imageview获取pic,并将其转换为位图,然后转换为字节以保存它 有没有建议避免这个例外 这是密码

            imageView1.setDrawingCacheEnabled(true);
            imageView1.measure(MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED), 
                    MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED));


            imageView1.layout(0, 0, imageView1.getMeasuredWidth(),  imageView1.getMeasuredHeight()); 

             imageView1.buildDrawingCache(true);

             Bitmap b = Bitmap.createBitmap(imageView1.getDrawingCache());
             imageView1.setDrawingCacheEnabled(false);

            save_picture=loginDataBaseAdapter.getBytes(b);


            loginDataBaseAdapter.insertEntry(userName, password, save_picture);
            Toast.makeText(getApplicationContext(), "Record created  ", Toast.LENGTH_LONG).show();`}
有一种将位图转换为字节的方法

// convert from bitmap to byte array
     public  byte[] getBytes(Bitmap bitmap) {
      ByteArrayOutputStream stream = new ByteArrayOutputStream();
      bitmap.compress(CompressFormat.PNG, 0, stream);
      return stream.toByteArray();
     }
还有插入法

public void insertEntry(String userName,String password , byte[] photo  )
    {
       ContentValues newValues = new ContentValues();
        // Assign values for each row.
        newValues.put("USERNAME", userName);
        newValues.put("PASSWORD",password);
        newValues.put("Photo", photo);

        // Insert the row into your table
        db.insert("LOGIN", null, newValues);

    }
还有数据库的创建

static final String DATABASE_CREATE = "create table "+"LOGIN"+
                                 "( " +"ID"+" integer primary key autoincrement,"+ "USERNAME  text,PASSWORD text, Photo blob not null); ";

感谢使用此类将位图转换为byteArray:

public class Utility {
// convert from bitmap to byte array
public static byte[] getBytes(Bitmap bitmap) {
    ByteArrayOutputStream stream = new ByteArrayOutputStream();
    bitmap.compress(CompressFormat.PNG, 0, stream);
    return stream.toByteArray();
}

// convert from byte array to bitmap
public static Bitmap getPhoto(byte[] image) {
    return BitmapFactory.decodeByteArray(image, 0, image.length);
}
} 和插入法:

newValues.put(G_PHOTO, Utility.getBytes(image));

尝试以base64格式字符串保存位图,然后将其插入数据库。 因此,您的getBytes方法将是getBase64Picture,如下所示:

 public  String getBase64StrFromPicture(Bitmap bitmap) {
   ByteArrayOutputStream stream = new ByteArrayOutputStream();
   bitmap.compress(CompressFormat.PNG, 0, stream);
   String imageEncoded = Base64.encodeToString(stream.toByteArray(), Base64.DEFAULT);
   return imageEncoded;
 }
然后,为了检索图片,在查询之后,您可以使用反向过程,即将字符串化的图片转换为位图

 public Bitmap getBitmapFromBase64Str(){
   byte[] decodedString = Base64.decode(encodedImage, Base64.URL_SAFE);
   Bitmap decodedByte = BitmapFactory.decodeByteArray(decodedString, 0, decodedString.length);
   return decodedByte;
 }

因为getDrawingCache总是返回null,所以会出现null指针异常

为了避免这个错误,我使用这个方法

  public static Bitmap loadBitmapFromView(View v) {
          Bitmap bi = Bitmap.createBitmap( v.getLayoutParams().width, v.getLayoutParams().height, Bitmap.Config.ARGB_8888);                
          Canvas c = new Canvas(bi);
          v.layout(0, 0, v.getLayoutParams().width, v.getLayoutParams().height);
          v.draw(c);
          return bi;
     }

感谢您的指导:

我们能看到错误输出吗?可能重复的E/AndroidRuntime15303:致命异常:主E/AndroidRuntime15303:java.lang.NullPointerException E/AndroidRuntime15303:at android.graphics.Bitmap.createBitmapBitmap.java:571 E/AndroidRuntime15303:atcom.techblogon.loginexample.SignUPActivity$1.onClickSignUPActivity.java:91 E/AndroidRuntime15303:at android.view.view.performClickView.java:2532错误如下