我在程序中动态创建对象并从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指针?”上抛出一个空指针。线。 任何人都可以提供关于我输入错误的建议吗?
答案 0 :(得分: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
}
}
答案 1 :(得分:1)
在Application类中创建字段变量,然后在主活动类中的onCreate方法内初始化它们。
答案 2 :(得分:0)
在ToolImporter类中创建一个“Context”字段。将您的活动上下文传递给ToolImporter构造函数中的ToolImporter类。
使用上下文字段访问getResources()
aTool = context.getResources().getStringArray(R.array.tools);