2013-02-22 79 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