Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.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
Android MediaStore获取图像高度/宽度_Android_Mediastore_Android Mediascanner - Fatal编程技术网

Android MediaStore获取图像高度/宽度

Android MediaStore获取图像高度/宽度,android,mediastore,android-mediascanner,Android,Mediastore,Android Mediascanner,我正在查询MediaStore.Images.Media.EXTERNAL\u CONTENT\u URI,查询工作正常。我能够从每一列中获取数据,该列有一个常数,例如: currentImage.ImageUrl = imagecursor.getString(imagecursor.getColumnIndex(MediaStore.Images.Media.DATA)); currentImage.Lat = imagecursor.getString(imagec

我正在查询
MediaStore.Images.Media.EXTERNAL\u CONTENT\u URI
,查询工作正常。我能够从每一列中获取数据,该列有一个常数,例如:

currentImage.ImageUrl = imagecursor.getString(imagecursor.getColumnIndex(MediaStore.Images.Media.DATA));
            currentImage.Lat = imagecursor.getString(imagecursor.getColumnIndex(MediaStore.Images.Media.LATITUDE));
            currentImage.Long = imagecursor.getString(imagecursor.getColumnIndex(MediaStore.Images.Media.LONGITUDE));
宽度/高度列没有常量(没有
MediaStore.Images.Media.width
),因此我尝试使用
imagecursor.getLong(imagecursor.getColumnIndex(“width”))访问它们

试图使用getLong、getString、getInt。。。没什么-总是一样的碰撞

这是堆栈:

02-22 19:38:26.242: E/AndroidRuntime(1607): FATAL EXCEPTION: main
02-22 19:38:26.242: E/AndroidRuntime(1607): java.lang.RuntimeException: Error receiving broadcast Intent { act=android.intent.action.MEDIA_SCANNER_FINISHED dat=file:///mnt/sdcard flg=0x10 } in com.Activity.android.chat.service.ChatService$ChatServiceReceiver@415b26c0
02-22 19:38:26.242: E/AndroidRuntime(1607):     at android.app.LoadedApk$ReceiverDispatcher$Args.run(LoadedApk.java:737)
02-22 19:38:26.242: E/AndroidRuntime(1607):     at android.os.Handler.handleCallback(Handler.java:605)
02-22 19:38:26.242: E/AndroidRuntime(1607):     at android.os.Handler.dispatchMessage(Handler.java:92)
02-22 19:38:26.242: E/AndroidRuntime(1607):     at android.os.Looper.loop(Looper.java:137)
02-22 19:38:26.242: E/AndroidRuntime(1607):     at android.app.ActivityThread.main(ActivityThread.java:4424)
02-22 19:38:26.242: E/AndroidRuntime(1607):     at java.lang.reflect.Method.invokeNative(Native Method)
02-22 19:38:26.242: E/AndroidRuntime(1607):     at java.lang.reflect.Method.invoke(Method.java:511)
02-22 19:38:26.242: E/AndroidRuntime(1607):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
02-22 19:38:26.242: E/AndroidRuntime(1607):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
02-22 19:38:26.242: E/AndroidRuntime(1607):     at dalvik.system.NativeStart.main(Native Method)
02-22 19:38:26.242: E/AndroidRuntime(1607): Caused by: java.lang.IllegalStateException: Couldn't read row 0, col -1 from CursorWindow.  Make sure the Cursor is initialized correctly before accessing data from it.
02-22 19:38:26.242: E/AndroidRuntime(1607):     at android.database.CursorWindow.nativeGetLong(Native Method)
02-22 19:38:26.242: E/AndroidRuntime(1607):     at android.database.CursorWindow.getLong(CursorWindow.java:515)
02-22 19:38:26.242: E/AndroidRuntime(1607):     at android.database.CursorWindow.getInt(CursorWindow.java:582)
02-22 19:38:26.242: E/AndroidRuntime(1607):     at android.database.AbstractWindowedCursor.getInt(AbstractWindowedCursor.java:69)
02-22 19:38:26.242: E/AndroidRuntime(1607):     at android.database.CursorWrapper.getInt(CursorWrapper.java:102)
02-22 19:38:26.242: E/AndroidRuntime(1607):     at com.Activity.android.chat.service.ChatService.getUserImages(ChatService.java:251)
02-22 19:38:26.242: E/AndroidRuntime(1607):     at com.Activity.android.chat.service.ChatService.access$1(ChatService.java:209)
02-22 19:38:26.242: E/AndroidRuntime(1607):     at com.Activity.android.chat.service.ChatService$ChatServiceReceiver.onReceive(ChatService.java:204)
02-22 19:38:26.242: E/AndroidRuntime(1607):     at android.app.LoadedApk$ReceiverDispatcher$Args.run(LoadedApk.java:728)
02-22 19:38:26.242: E/AndroidRuntime(1607):     ... 9 more
如果您能帮上忙,我将不胜感激。。。我不知道我还能尝试什么


谢谢大家!

好像你没打电话来
        try {
                    Bitmap _bitmapPreScale = BitmapFactory.decodeFile(imagePath);

                    int oldWidth = _bitmapPreScale.getWidth();
                    int oldHeight = _bitmapPreScale.getHeight();
    }catch(Exception e){
         e.printstacktrace();
               }
在访问光标数据之前。

解决方案(愚蠢的错误…):

我没有在投影中包括宽度和高度列。。。 我不明白谷歌为什么不给他们常数来避免所有这些混乱,但无论如何,解决办法是添加它们

final String[] columns = {
                MediaStore.Images.Media._ID, MediaStore.Images.Media.DATA, MediaStore.Images.Media.TITLE, MediaStore.Images.Media.DATE_TAKEN,
                MediaStore.Images.Media.SIZE, MediaStore.Images.Media.LATITUDE, MediaStore.Images.Media.LONGITUDE, "width", "height"
        };

我确实。。。不是这样。不过还是要谢谢你;)谢谢,但是这个手术对我来说太贵了。。。运行1000个图像并对每个图像进行解码是我想要避免的事情,特别是当mediastore中存在with和height列时。images DBI也有同样的问题,并使用了此代码。但它给出了错误:“没有这样的列:宽度”。。。你能帮帮我吗?@Farid Ala当然!我认为“宽度”和“高度”列仅在Android 3.0及以上版本上可用,因此如果您试图在较低的Android版本上访问它们,它将给您“无此类列”错误。您可以使用根资源管理器->数据->数据->com.android.providers.media->数据库->external.db->图像打开mediaStore数据库,检查是否有这些列。感谢您的回复。你说得对,它只在Android 3.0+上可用。那么,我如何在Android 3.0-上获得图像大小?我需要使用Samir的解决方案吗?正如你提到的,有点贵。我真的很困惑。@Farid Ala这有点贵,但是你可以使用Samir的代码构建自己的对象来保存所有图像信息,包括身高和体重,然后用新对象填充列表(getView)。这样,昂贵的操作将发生在列表适配器的getView之外,列表将滚动得更平滑。实际上,我的应用程序使用AndEngine,我将通过sprite显示图像。这条线对我帮助很大。谢谢:-)