2015-06-16 107 views
1

我在我的Fragment Activity實施水平廊道的可繪製路徑,但我不能讓我的圖像,因此返回NullPointerException獲取圖像

LinearLayout myGallery; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    if (getArguments() != null) { 
     mParam1 = getArguments().getString(ARG_PARAM1); 
     mParam2 = getArguments().getString(ARG_PARAM2); 
    } 
    myGallery = (LinearLayout) getActivity().findViewById(R.id.mygallery); 

    String targetPath = "assets/"; 

    Toast.makeText(getActivity(), targetPath, Toast.LENGTH_LONG).show(); 
    File targetDirector = new File(targetPath); 

    File[] files = targetDirector.listFiles(); 
    for (File file : files){ //NullPointerException here 
     myGallery.addView(insertPhoto(file.getAbsolutePath())); 
    } 
} 

這是我的圖片的路徑:

enter image description here

NullPointerException點在for循環for (File file ; files){ ...

什麼是正確的方式來達到我的文件夾?

+1

這是繪圖資源並不怎麼Android的工作。使用'assets'或'raw',而不是'drawable-gallery'。 – shkschneider

+0

資產文件夾在哪裏? –

+0

好的,謝謝,我遵循你的觀察,但它仍然產生一個'NullPointerException' –

回答

2

正確的方法是...將您的圖像放在assets文件夾(或raw)中。
不在res

創建assets文件夾(如果尚不存在)。
相同等級res,不在裏面

要獲取資源,然後用像這樣(在這種情況下,該文件是gfx文件夾下,assets下):

final InputStream is = getApplicationContext().getAssets().open("gfx/" + fileName); 
final Drawable drw = Drawable.createFromStream(is, null); 

,你有你繪製出assets


如果您想將資源直接放入assets而不是添加文件夾,只需更改此文件

getApplicationContext().getAssets().open("gfx/" + fileName); 

getApplicationContext().getAssets().open(fileName); 
+0

'gfx'是什麼意思? –

+1

'圖形'的縮寫。只需一個文件夾 - 無論你喜歡什麼,都可以稱它爲:'images'。或者你可以完全跳過它,並直接把資源放在資產':'.... getAssets()。打開(文件名);' –

+0

謝謝,是否有可能從drawable獲取'文件[]'數組? –