Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/184.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 应用程序在检索图像时崩溃_Java_Android_Sqlite_Cursor - Fatal编程技术网

Java 应用程序在检索图像时崩溃

Java 应用程序在检索图像时崩溃,java,android,sqlite,cursor,Java,Android,Sqlite,Cursor,我使用下面的代码插入了捕获图像,并获得了表示数据不为空的“notnull” button.setOnClickListener(new View.OnClickListener() { public void onClick(View arg0) { if ((name != null && name.trim().length() > 0) && (result != null &a

我使用下面的代码插入了捕获图像,并获得了表示数据不为空的
“notnull”

        button.setOnClickListener(new View.OnClickListener() {
            public void onClick(View arg0) {

                if ((name != null && name.trim().length() > 0) && (result != null && result.trim().length() > 0)) {
                   // Toast.makeText(getActivity().getApplicationContext(), fk+"", Toast.LENGTH_LONG).show();
                    byte[] data=getBitmapAsByteArray(Global.img); // this is a function
                    if(data==null)
                    {
                        Toast.makeText(getActivity(), "null", Toast.LENGTH_LONG).show();
                    }
                    else
                    {


                        Toast.makeText(getActivity(), " not null", Toast.LENGTH_LONG).show();
                        SB.insertStaffBenefit(name, data, description, result, fk);
                    }
                }

        });
        return claims;
    }
public static byte[] getBitmapAsByteArray(Bitmap bitmap)
{
    ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
    bitmap.compress(Bitmap.CompressFormat.PNG, 0, outputStream);
    return outputStream.toByteArray();
}
然而,当我试图检索捕获的图像时,应用程序崩溃了

 public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.receipt);
    dbHelper = new MyDatabaseHelper(this);
    final String k = getIntent().getExtras().getString("ID");
    Toast.makeText(getApplicationContext(), k+"", Toast.LENGTH_LONG).show();
     ImageView a=(ImageView)findViewById(R.id.imageView5);
     database = dbHelper.getWritableDatabase();
     c = database.rawQuery("SELECT s.Image FROM Information i LEFT JOIN StaffBenefit s ON s.Twd_id=i._id WHERE i._id=? ", new String[]{String.valueOf(k)},null);
                if(c.moveToFirst())
                        {
                       byte[] img=c.getBlob(c.getColumnIndexOrThrow("Image"));
                        if(img!=null)
                        {
                            Log.e("TAG", " Not null");
                        }
                        else
                        {
                            Log.e("TAG", " null");
                        }
                        ByteArrayInputStream imageStream = new ByteArrayInputStream(img);
                        Bitmap theImage= BitmapFactory.decodeStream(imageStream);
                        a.setImageBitmap(theImage);

                    }

                c.close();
            }
        }
MyDatabaseHelper.java

 public void onCreate(SQLiteDatabase db) {
        db.execSQL("create table " + TABLE_STAFF_BENEFIT + "( "  + ID3 + " INTEGER PRIMARY KEY , Claim_Type TEXT, Image BLOB, Description TEXT , Amount TEXT, Twd_id INTEGER, FOREIGN KEY(Twd_id) REFERENCES "+TABLE_INFO+"(_id))");
}
原因:java.lang.IllegalStateException:无法从CursorWindow读取第0行第0列。确保光标已初始化 在从中访问数据之前,请确保正确。 位于android.database.CursorWindow.nativeGetBlob(本机方法) 位于android.database.CursorWindow.getBlob(CursorWindow.java:404) 位于android.database.AbstractWindowedCursor.getBlob(AbstractWindowedCursor.java:45) 在com.example.project.project.Receipt.onCreate(Receipt.java:40)上

(Receipt.java:40)


错误是否由中所述的大blob引起?我怎样才能解决它?谢谢

我想你自己找到了解决办法

您知道onClick处理程序中的图像有多大吗? 如果它们大于1Mb,则无法将信息保存在一个光标中。请查看您自己的链接以获取解决方案

但如果可能的话,你可以先测试一下。 尝试插入/选择大小低于1Mb的图像,然后插入/选择大小高于1Mb的图像


如果第一个测试成功而第二个测试没有成功,您需要按照您的帖子中的解决方案进行操作:

我认为您自己找到了解决方案

您知道onClick处理程序中的图像有多大吗? 如果它们大于1Mb,则无法将信息保存在一个光标中。请查看您自己的链接以获取解决方案

但如果可能的话,你可以先测试一下。 尝试插入/选择大小低于1Mb的图像,然后插入/选择大小高于1Mb的图像



如果第一个测试成功而第二个测试没有成功,您需要按照您的帖子中的解决方案进行操作:

@Hoo您可以发布您的创建表查询吗?@amcheer-sure。请参见已编辑的。我只向您展示了由
图像列组成的表格。在我的应用程序中,相机功能可以支持
从画廊中选择的图像
拍照
。可以检索从库中选择的插入图像,但无法检索捕获的图像。我没有找到错误。但如果你改变你的逻辑,你可以避免这种情况。只需将路径存储在数据库中,而不必将图像保存在数据库中。@AMSHER如何将路径存储在数据库中?
插入
检索
代码
与从库中选择的
图像不相同
?@Hoo您可以发布您的创建表查询吗?@amchear-sure。请参见已编辑的。我只向您展示了由
图像列组成的表格。在我的应用程序中,相机功能可以支持
从画廊中选择的图像
拍照
。可以检索从库中选择的插入图像,但无法检索捕获的图像。我没有找到错误。但如果你改变你的逻辑,你可以避免这种情况。只需将路径存储在数据库中,而不必将图像保存在数据库中。@AMSHER如何将路径存储在数据库中?
插入
检索
代码
与从图库中选择的图像不相同
?如何知道捕获图像的大小?byte[]data=getBitmapAsByteArray(Global.img);在这一行中,您将捕获的图像保存在本地字节[]数组中,对吗?如果是这样,请获取数组的长度/大小,然后简单地以MbI为单位计算大小。很抱歉再次打扰您。我得到
[B@437dc7e8
对于
数据
。接下来我该怎么做才能以Mb为单位计算它?好的,尝试以下操作:修改getBitmapAsByteArray(位图位图)方法并执行以下操作(使用控制台打印或记录所需内容):显示此语句的值:outputStream.size()/1024//那么您的大小(以KB为单位)需要修改?并且需要在哪里添加outputStream.size()/1024?我如何知道捕获图像的大小?byte[]data=getBitmapAsByteArray(Global.img);在这一行中,您将捕获图像保存在本地字节[]数组,我说得对吗?如果是这样,请获取数组的长度/大小,然后简单地以MbI计算大小。很抱歉再次打扰您。我得到
[B@437dc7e8
对于
数据
。接下来我该怎么做才能以Mb为单位进行计算?好的,尝试以下操作:修改getBitmapAsByteArray(位图)方法并执行以下操作(使用控制台打印或记录所需内容):显示此语句的值:outputStream.size()/1024//然后您就有了以KB为单位的大小如何修改?并且需要在何处添加outputStream.size()/1024?
  byte[] img=c.getBlob(c.getColumnIndexOrThrow("Image"));