您好我试图从可绘制资源的Uri中获取File对象。我使用此代码:
jclass clazz;
jmethodID methodID;
jstring string1, string2, string3;
jobject object1, object2;
clazz = env->FindClass("android/net/Uri");
methodID = env->GetStaticMethodID(clazz, "parse", "(Ljava/lang/String;)Landroid/net/Uri;");
string1 = env->NewStringUTF("android.resource://com.appsite.android/drawable/grass");
object1 = env->CallStaticObjectMethod(clazz, methodID, string1);
methodID = env->GetMethodID(clazz, "toString", "()Ljava/lang/String;");
string1 = (jstring)env->CallObjectMethod(object1, methodID);
clazz = env->FindClass("java/net/URLEncoder");
methodID = env->GetStaticMethodID(clazz, "encode", "(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;");
string2 = (jstring)env->NewStringUTF("UTF-8");
string3 = (jstring)env->CallStaticObjectMethod(clazz, methodID, string1, string2);
clazz = env->FindClass("java/net/URI");
methodID = env->GetMethodID(clazz, "<init>", "(Ljava/lang/String;)V");
object1 = env->NewObject(clazz, methodID, string3);
clazz = env->FindClass("java/io/File");
methodID = env->GetMethodID(clazz, "<init>", "(Ljava/net/URI;)V");
object2 = env->NewObject(clazz, methodID, object1);
应用程序在最后一次调用NewObject
时崩溃。可能的原因是什么?
修改:
将jobject
作为参数传递给NewObject
似乎是一个问题。将jobject
传递给NewObject
的正确方法是什么?
答案 0 :(得分:0)
这与JNI无关。
问题是可绘制资源没有 java.io.File 。 grass drawable以PNG或其他图片格式嵌入到APK中,资源管理器通过直接查看APK来提取Resources.getDrawable(int)
的位图。
如果您需要使用文件i / o方法访问位图,则可以获得最接近的方法是彻底的Resources.openRawResourceFd()方法(仅限于未压缩的资源)。您还可以将位图放在资源中,而不是 res 。