【问题标题】:Loading Array values into classes将数组值加载到类中
【发布时间】:2012-12-17 18:18:12
【问题描述】:

我在程序中动态创建对象并从 array.xml 填充它们。 在 array.xml 中,我有一系列工具和值,我需要将它们加载到每个项目的类值中。

这是我在课堂上的内容;

public class ToolImporter extends Application{

public static Tool[] tools;
private String[] aTool;
private int i;

public ToolImporter() {

    aTool = getResources().getStringArray(R.array.tools); //null pointer?

    // TODO Auto-generated constructor stub
}

这是我的array.xml;

    <array name="tools">
        <item name="SAW">
            <id>1</id>
            <image>R.drawable.image_saw100x60px</image>
            <boxX>100</boxX>
            <boxY>100</boxY>
            <worktopX>200</worktopX>
            <worktopY>200</worktopY>
        </item>
        <item name="SCREWDRIVER">
            <id>2</id>
            <image>R.drawable.image_screwdriver100x60px</image>
            <boxX>150</boxX>
            <boxY>100</boxY>
            <worktopX>250</worktopX>
            <worktopY>200</worktopY>
        </item>
        <item name="HAMMER">
            <id>3</id>
            <image>R.drawable.image_hammer100x60px</image>
            <boxX>200</boxX>
            <boxY>100</boxY>
            <worktopX>300</worktopX>
            <worktopY>200</worktopY>
        </item>
    </array>

但是,它会在“//null 指针”上抛出一个空指针?线。 任何人都可以就我在导入它时做错了什么提供建议吗?

【问题讨论】:

    标签: java android arrays object


    【解决方案1】:

    据此post

    除非触发了 onCreate() 回调,否则不应调用 getResources()。

    public class StackStackActivity extends Activity 
    {
    
        String[] myArray = getResources().getStringArray(R.array.glenns); // This returns null
    
        public StackStackActivity()
        {
    
            myArray = getResources().getStringArray(R.array.glenns); // This returns null also
        }
    
        @Override
        public void onCreate(Bundle savedInstanceState) 
        {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
    
            myArray = getResources().getStringArray(R.array.glenns); // Returns an array from resources
        }
    }
    

    【讨论】:

    • 看看他试图在 Application 类而不是 Activity 中访问 Resources 的问题
    • 我的声明仍然有效。
    • 我将尝试在活动中导入数组并将其传递给导入器类
    • @Intern87 它应该和Application 一样工作,关键是使用onCreate 方法来做到这一点。
    【解决方案2】:

    在 Application 类中创建字段变量,然后在主 Activity 类的 onCreate 方法中初始化它们。

    【讨论】:

      【解决方案3】:

      在 ToolImporter 类中创建一个“上下文”字段。将 Activity 的上下文传递给 ToolImporter 构造函数中的 ToolImporter 类。

      使用上下文字段访问getResources()

      aTool = context.getResources().getStringArray(R.array.tools); 
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-01-31
        • 1970-01-01
        • 1970-01-01
        • 2014-02-04
        相关资源
        最近更新 更多