2013-02-22 78 views
0

我把must.jpg放入drawable-hdpi文件夹并创建了这个方法。在Android中显示图片

public void createImageViewOb(){ 
     File poster = new File ("/BakuMovies/res/drawable-hdpi/must.jpg"); 
     ImageView poster_view = (ImageView)findViewById(R.drawable.must); 
     Bitmap bitmap = BitmapFactory.decodeFile(poster.getAbsolutePath()); 
     poster_view.setImageBitmap(bitmap); 
} 

我想通过调用这个方法在mainActivity

@Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     createImageViewOb(); 
    } 

显示在屏幕上的图像但是,当我启动应用崩溃。 我会感谢任何帮助。

activity_main.xml中

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    tools:context=".MainActivity" > 


    <TextView 
     android:id="@+id/textView1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_above="@+id/imageView1" 
     android:layout_marginBottom="77dp" 
     android:layout_toRightOf="@+id/textSwitcher1" 
     android:text="@string/Albert" 
     android:textAppearance="?android:attr/textAppearanceLarge" /> 

    <Button 
     android:id="@+id/aboutMeButton" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignLeft="@+id/textView1" 
     android:layout_alignTop="@+id/viewFlipper1" 
     android:onClick="showAboutMessage" 
     android:text="About Me" /> 

</RelativeLayout> 

的logcat:

02-22 05:13:29.028: E/Trace(1145): error opening trace file: No such file or directory (2) 
02-22 05:13:29.498: D/AndroidRuntime(1145): Shutting down VM 
02-22 05:13:29.498: W/dalvikvm(1145): threadid=1: thread exiting with uncaught exception (group=0x40a13300) 
02-22 05:13:29.518: E/AndroidRuntime(1145): FATAL EXCEPTION: main 
02-22 05:13:29.518: E/AndroidRuntime(1145): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.bakumovies/com.example.bakumovies.MainActivity}: java.lang.NullPointerException 
02-22 05:13:29.518: E/AndroidRuntime(1145):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2059) 
02-22 05:13:29.518: E/AndroidRuntime(1145):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2084) 
02-22 05:13:29.518: E/AndroidRuntime(1145):  at android.app.ActivityThread.access$600(ActivityThread.java:130) 
02-22 05:13:29.518: E/AndroidRuntime(1145):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1195) 
02-22 05:13:29.518: E/AndroidRuntime(1145):  at android.os.Handler.dispatchMessage(Handler.java:99) 
02-22 05:13:29.518: E/AndroidRuntime(1145):  at android.os.Looper.loop(Looper.java:137) 
02-22 05:13:29.518: E/AndroidRuntime(1145):  at android.app.ActivityThread.main(ActivityThread.java:4745) 
02-22 05:13:29.518: E/AndroidRuntime(1145):  at java.lang.reflect.Method.invokeNative(Native Method) 
02-22 05:13:29.518: E/AndroidRuntime(1145):  at java.lang.reflect.Method.invoke(Method.java:511) 
02-22 05:13:29.518: E/AndroidRuntime(1145):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786) 
02-22 05:13:29.518: E/AndroidRuntime(1145):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553) 
02-22 05:13:29.518: E/AndroidRuntime(1145):  at dalvik.system.NativeStart.main(Native Method) 
02-22 05:13:29.518: E/AndroidRuntime(1145): Caused by: java.lang.NullPointerException 
02-22 05:13:29.518: E/AndroidRuntime(1145):  at com.example.bakumovies.MainActivity.createImageViewOb(MainActivity.java:44) 
02-22 05:13:29.518: E/AndroidRuntime(1145):  at com.example.bakumovies.MainActivity.onCreate(MainActivity.java:24) 
02-22 05:13:29.518: E/AndroidRuntime(1145):  at android.app.Activity.performCreate(Activity.java:5008) 
02-22 05:13:29.518: E/AndroidRuntime(1145):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1079) 
02-22 05:13:29.518: E/AndroidRuntime(1145):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2023) 
02-22 05:13:29.518: E/AndroidRuntime(1145):  ... 11 more 
02-22 05:13:31.449: I/Process(1145): Sending signal. PID: 1145 SIG: 9 
+1

请贴上你的logcat – 2013-02-22 04:38:48

+1

什么是错误?使用logcat获取完整的堆栈跟踪并将其发布到此处。 – 2013-02-22 04:39:15

+0

另外,请发布'activity_main.xml'。 – 2013-02-22 04:41:35

回答

0

的一个问题是,Android设备将很可能不会有一个名为/BakuMovies/res/drawable-hdpi。这是您的开发环境的目录结构,并且是而不是直接传输到设备。除此之外,我不能不知道你在做什么。

编辑:

注意,在你res目录中的所有资源都包含在你的应用程序的.apk文件。它们不作为单独的文件加载到设备中。为了以Java代码访问资源(字符串除外),您需要使用Resources对象。通过在Activity对象上调用getResources()得到一个。一旦获得Resources对象,请致电getDrawable()getDrawableForDensity()以获取可绘制资源。

+0

我想方法来显示应用程序的主屏幕上的图像,而不描述它在启动之前在activity_main.xml中。 – LoLzMan 2013-02-22 04:55:14

0

试试这个。

public void createImageViewOb(){ 

     ImageView poster_view = (ImageView)findViewById((R.id.imageView); // imageView is id of your imageView 

     poster_view.setImageResource(R.drawable.must); 
} 

更新

首先,你必须对你的activity_main布局添加ImageView并设置其idandroid:id="@+id/imageView"

+0

你的代码有问题!重新检查它。 – SudoRahul 2013-02-22 04:54:51

+0

@ R.J谢谢。我有正确的。 – Bishan 2013-02-22 05:02:37

1

有很多事情你可以避免,很容易地加载你想要的图像到ImageView

做这样的事情: -

@Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     // New Code 
     ImageView poster_view = (ImageView)findViewById(R.id.imageView); //Assuming an ImgView is there in your layout activity_main 
     poster_view.setImageResource(R.drawable.must); //Must.jpg present in any of your drawable folders. 
    } 

更新: -动态插入的ImageView,在你onCreate()做到这一点。

ImageView imageView = new ImageView(this); 
LinearLayout.LayoutParams lp = 
    new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT, 
        LayoutParams.WRAP_CONTENT); 
imageView.setLayoutParams(lp);   
imageView.setImageResource(R.drawable.must);   
yourLinearLayout.addView(imageView); 
+0

如果我没有在activity_main中描述must.jpg怎么办?有没有什么方法可以在启动应用程序之前在activity_main中预先描绘图像而不显示图像? – LoLzMan 2013-02-22 05:07:05

+0

然后你打算在哪里显示图像?如果没有'ImageView'? – SudoRahul 2013-02-22 05:07:56

+0

检查我更新的答案。 – SudoRahul 2013-02-22 05:22:36

0

您使用drawable。您可以调用setImageDrawable方法并设置资源getResources().getDrawable设置id getdrawable方法,而不会显示图像。

0

最可能的原因是,您的应用程序运行内存,而试图下面的图片

Bitmap bitmap = BitmapFactory.decodeFile(poster.getAbsolutePath()); 

什么是这个形象,你要加载的尺寸行解码?

+0

图片尺寸 - 231x330。 – LoLzMan 2013-02-22 04:57:30

+0

请在问题中看到我的评论。 – Anuj 2013-02-22 04:58:08

0

在你的活动,你可以调用这个让你绘制资源作为可绘制对象,并设置如下图:

 Drawable d = getResources().getDrawable(R.drawable.must); 
    ImageView poster_view = (ImageView)findViewById(R.id.imageView)); 
     poster_view.setBackgroundDrawable(d); 

OR

如果你想展示你的绘制在ImageView的你可以这样做:

ImageView poster_view = (ImageView)findViewById(R.id.imageView); 
    poster_view.setImageResource(getResources().getDrawable(R.drawable.must));  

或在XML文件中

<ImageView 
    android:id="@+id/imageView" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:src="@drawable/smiley"/> 
+0

你的代码有问题!重新检查它。 – SudoRahul 2013-02-22 04:59:08

+0

我已更新我的代码并解决了有问题的问题。请现在撤销你的倒票R.J.谢谢 – GrIsHu 2013-02-22 05:04:26