android 如何在图像视图中显示具有固定 Uri 的图像
How to display image having fixed Uri in Image View in android
我想在 LinearLayout 中显示图像和图像下方的按钮。对于图像,我使用的是 ImageView,这 2 个按钮是嵌套 LinearLayout 的一部分。
您可能会想,这已经可以在网上找到了。为什么这个人要浪费我们的时间?这有什么不同?
不同的是要显示的Image的Uri是静态的。我在网上看到的大多数代码示例都使用图像选择器来确定图像的 Uri。但是由于某些限制,我不能使用图像选择器,但可以确保要显示的图像始终具有与 Uri 相同的固定字符串。
所以,这是我尝试过的:
activity_main.xml
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_height="match_parent"
android:layout_width="match_parent"
android:orientation="vertical">
<ImageView
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="10"
android:id="@+id/image_view"/>
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:orientation="horizontal">
<Button
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="Start"
android:id="@+id/start_btn" />
<Button
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="Stop"
android:id="@+id/stop_btn" />
</LinearLayout>
MainActivity.java
public class MainActivity extends ActionBarActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
String picturePath = "/sdcard/DCIM/Camera/1.jpg";
ImageView imageView = (ImageView) findViewById(R.id.image_view);
imageView.setImageBitmap(BitmapFactory.decodeFile(picturePath));
setContentView(R.layout.activity_main);
}
// Some auto-generated methods here.
}
如您所见,我要加载的图像位于“/sdcard/DCIM/Camera/1.jpg”。但是,这个应用程序一启动就一直崩溃。
所以,请指导我如何解决这个问题。我是 Android 编程的新手,如果我尝试编写此应用程序的代码看起来很可悲,请原谅我。
不言而喻,提前致谢:)
编辑:
根据@Jonty800 的要求,这里是 Logcat 的输出,日志级别设置为 "Debug":
07-12 02:07:07.937 23773-23773/? D/dalvikvm﹕ Late-enabling CheckJNI
07-12 02:07:08.037 23773-23773/com.example.debayan.usingimageview D/dalvikvm﹕ GC_FOR_ALLOC freed 108K, 36% free 14480K/22584K, paused 17ms, total 17ms
07-12 02:07:08.137 23773-23773/com.example.debayan.usingimageview I/dalvikvm-heap﹕ Grow heap (frag case) to 66.234MB for 52515856-byte allocation
07-12 02:07:08.517 23773-23773/com.example.debayan.usingimageview D/AndroidRuntime﹕ Shutting down VM
07-12 02:07:08.517 23773-23773/com.example.debayan.usingimageview W/dalvikvm﹕ threadid=1: thread exiting with uncaught exception (group=0x417bfd58)
07-12 02:07:08.527 23773-23773/com.example.debayan.usingimageview E/AndroidRuntime﹕ FATAL EXCEPTION: main
Process: com.example.debayan.usingimageview, PID: 23773
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.debayan.usingimageview/com.example.debayan.usingimageview.MainActivity}: java.lang.NullPointerException
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2198)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2247)
at android.app.ActivityThread.access0(ActivityThread.java:141)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1210)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:136)
at android.app.ActivityThread.main(ActivityThread.java:5050)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:806)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:622)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.NullPointerException
at com.example.debayan.usingimageview.MainActivity.onCreate(MainActivity.java:20)
at android.app.Activity.performCreate(Activity.java:5248)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2162)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2247)
at android.app.ActivityThread.access0(ActivityThread.java:141)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1210)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:136)
at android.app.ActivityThread.main(ActivityThread.java:5050)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:806)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:622)
at dalvik.system.NativeStart.main(Native Method)
我们可以看看崩溃报告吗?请记住,您必须在 Manifest.xml 文件中提供访问 SD 卡的权限,这可能就是原因所在。
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
编辑:
也许试试这样的方法:
String path = Environment.getExternalStorageDirectory()+ "/DCIM/Camera/1.jpg";
File imgFile = new File(path);
if(imgFile.exists())
{
Bitmap myBitmap = BitmapFactory.decodeFile(imgFile.getAbsolutePath());
ImageView imageView=(ImageView)findViewById(R.id.imageView);
imageView.setImageBitmap(myBitmap);
}else{
System.out.println("Image does not exist");
}
我想在 LinearLayout 中显示图像和图像下方的按钮。对于图像,我使用的是 ImageView,这 2 个按钮是嵌套 LinearLayout 的一部分。
您可能会想,这已经可以在网上找到了。为什么这个人要浪费我们的时间?这有什么不同?
不同的是要显示的Image的Uri是静态的。我在网上看到的大多数代码示例都使用图像选择器来确定图像的 Uri。但是由于某些限制,我不能使用图像选择器,但可以确保要显示的图像始终具有与 Uri 相同的固定字符串。
所以,这是我尝试过的:
activity_main.xml
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_height="match_parent"
android:layout_width="match_parent"
android:orientation="vertical">
<ImageView
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="10"
android:id="@+id/image_view"/>
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:orientation="horizontal">
<Button
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="Start"
android:id="@+id/start_btn" />
<Button
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="Stop"
android:id="@+id/stop_btn" />
</LinearLayout>
MainActivity.java
public class MainActivity extends ActionBarActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
String picturePath = "/sdcard/DCIM/Camera/1.jpg";
ImageView imageView = (ImageView) findViewById(R.id.image_view);
imageView.setImageBitmap(BitmapFactory.decodeFile(picturePath));
setContentView(R.layout.activity_main);
}
// Some auto-generated methods here.
}
如您所见,我要加载的图像位于“/sdcard/DCIM/Camera/1.jpg”。但是,这个应用程序一启动就一直崩溃。 所以,请指导我如何解决这个问题。我是 Android 编程的新手,如果我尝试编写此应用程序的代码看起来很可悲,请原谅我。
不言而喻,提前致谢:)
编辑: 根据@Jonty800 的要求,这里是 Logcat 的输出,日志级别设置为 "Debug":
07-12 02:07:07.937 23773-23773/? D/dalvikvm﹕ Late-enabling CheckJNI
07-12 02:07:08.037 23773-23773/com.example.debayan.usingimageview D/dalvikvm﹕ GC_FOR_ALLOC freed 108K, 36% free 14480K/22584K, paused 17ms, total 17ms
07-12 02:07:08.137 23773-23773/com.example.debayan.usingimageview I/dalvikvm-heap﹕ Grow heap (frag case) to 66.234MB for 52515856-byte allocation
07-12 02:07:08.517 23773-23773/com.example.debayan.usingimageview D/AndroidRuntime﹕ Shutting down VM
07-12 02:07:08.517 23773-23773/com.example.debayan.usingimageview W/dalvikvm﹕ threadid=1: thread exiting with uncaught exception (group=0x417bfd58)
07-12 02:07:08.527 23773-23773/com.example.debayan.usingimageview E/AndroidRuntime﹕ FATAL EXCEPTION: main
Process: com.example.debayan.usingimageview, PID: 23773
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.debayan.usingimageview/com.example.debayan.usingimageview.MainActivity}: java.lang.NullPointerException
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2198)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2247)
at android.app.ActivityThread.access0(ActivityThread.java:141)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1210)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:136)
at android.app.ActivityThread.main(ActivityThread.java:5050)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:806)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:622)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.NullPointerException
at com.example.debayan.usingimageview.MainActivity.onCreate(MainActivity.java:20)
at android.app.Activity.performCreate(Activity.java:5248)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2162)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2247)
at android.app.ActivityThread.access0(ActivityThread.java:141)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1210)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:136)
at android.app.ActivityThread.main(ActivityThread.java:5050)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:806)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:622)
at dalvik.system.NativeStart.main(Native Method)
我们可以看看崩溃报告吗?请记住,您必须在 Manifest.xml 文件中提供访问 SD 卡的权限,这可能就是原因所在。
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
编辑:
也许试试这样的方法:
String path = Environment.getExternalStorageDirectory()+ "/DCIM/Camera/1.jpg";
File imgFile = new File(path);
if(imgFile.exists())
{
Bitmap myBitmap = BitmapFactory.decodeFile(imgFile.getAbsolutePath());
ImageView imageView=(ImageView)findViewById(R.id.imageView);
imageView.setImageBitmap(myBitmap);
}else{
System.out.println("Image does not exist");
}