【问题标题】:Android assetManager getAsset() throwing nullPointer exceptionAndroidassetManager getAsset() 抛出 nullPointer 异常
【发布时间】:2013-05-15 17:44:22
【问题描述】:

我有 2 个类,来自 BinderData 类,它扩展了 BaseAdapter(我不能将此类扩展到 Activity,因为我必须扩展到 BaseAdapter)我通过以下代码调用类 AssetActivity:

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() 方法并且该类扩展 Activity 的类中获取它们。请帮我解决一下这个。我怀疑我在 BinderData 类中调用 getImage 方法时做错了什么。请帮我。谢谢。

【问题讨论】:

    标签: android nullpointerexception


    【解决方案1】:

    AssetManager assets = getAssets(); 会给你NullPointerException 因为getAssets() 会返回nullgetAssets()需要在Activity中调用Context

    你不能为类创建对象,android 将通过生命周期方法来处理它。所以不要为 Activity 创建对象。

    将该方法放在您的 Activity 类中,使用 context.getAssets() 获取资产

    【讨论】:

    • Thnx 但是我是 Android 和 Java 新手,请您详细说明一下。
    • @Sid 好的..您还想知道什么?只需将该方法放在您当前的 Activity 中,然后直接调用它。使用context.getAssets() 代替getAssets()
    • 我不能将该方法放在我的主类中,因为它不是一个活动,它是一个 BaseAdapter。我不明白 context.getAssets() 以及如何使用它。我应该在 Activity 类中使​​用它吗?
    • 如果它是基于适配器的,您需要在您的 CustomAdapter 的构造函数中提供上下文。并使用该上下文,您可以获得资产
    • 好的我试过你说的。但我仍然遇到同样的错误。私有静态上下文appContext; @Override public void onCreate() { super.onCreate();应用上下文 = 这个; } 公共静态上下文 getContext() { 返回 appContext;然后我使用 AssetManager assets = appContext.getAssets();
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-07-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-23
    • 1970-01-01
    相关资源
    最近更新 更多