2013-05-15 39 views
1

我有2類,從類BinderData,它擴展BaseAdapter(我不能擴展這個類到活動,因爲我必須擴展到BaseAdapter)我打電話給類AssetActivity下面的代碼:Android資產管理器getAsset()拋出nullPointer異常

AssetActivity a = new AssetActivity(); 
Drawable image=a.getImage(imageUri); 

這裏imageuri是一個字符串,它被正確填充。在我使用的AssetActivity類以下代碼中。

public class AssetActivity extends Activity { 
    private static final String TAG = "AssetActivity"; 

    public Drawable getImage(String imgName) { 

     String nextImageName = imgName+ ".jpg"; 
     AssetManager assets = getAssets(); // get app's AssetManager 
     InputStream stream; // used to read in Image images  
     Drawable flag=null; 
     try { 
      // get an InputStream to the asset representing the next Image 
      stream = assets.open(nextImageName); 

      // load the asset as a Drawable and display on the objImageView 
      flag = Drawable.createFromStream(stream, nextImageName); 
     } // end try 
     catch (IOException e) { 
      Log.e(TAG, "Error loading " + nextImageName, e); 
     } // end catch 
     return flag; 
    } 
} 

當我運行代碼時,我得到NullPointerException在下面的行。

AssetManager assets = getAssets(); 

有在資源文件夾的資產,我能夠在其中明確要求getAssets()方法,其它的類來接他們和類擴展活動。請幫我解決一下這個。我懷疑我在調用BinderData類中的getImage方法時做錯了什麼。請幫幫我。謝謝。

回答

4

AssetManager assets = getAssets();會給你NullPointerException,因爲getAssets()將返回null。需要在活動Context中調用getAssets();

您不允許爲類創建對象android將通過生命週期方法來處理該對象。所以不要爲活動創建對象。

的地方,在你的Activity類使用context.getAssets()方法來獲得資產

+0

日Thnx但你可以請詳細說明更多,因爲我是新來的Android和Java。 – Sid

+0

@Sid好的..你還想知道什麼?只需將該方法放置在您當前的活動中並直接調用即可。使用'context.getAssets()'代替'getAssets()' – Pragnani

+0

我不能將該方法放在我的主類中,因爲它不是一個BaseAdapter活動。我不明白context.getAssets()以及如何使用它。我應該在Activity類中使用它嗎? – Sid