伙计们,你可以检查一下为什么我在这一行中得到一个空指针异常,
cl = Class.forName(myClass);
以下是代码:
private void addBookmark(String[] values_array) {
LayoutInflater vi = (LayoutInflater) getApplicationContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View v = vi.inflate(R.layout.single_bookmark, null);
TextView text = (TextView) v.findViewById(R.id.bookmark_text);
Button button = (Button) v.findViewById(R.id.bookmark_button);
text.setText(values_array[1]);
final String myClass = values_array[0];
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Class<?> cl = null;
try {
cl = Class.forName(myClass); // <--- this is where i am getting a null pointer exception
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
Intent myIntent = new Intent(mContext, cl);
startActivity(myIntent);
}
});
我应该如何解决这个问题? 或者我需要更换一些东西?
答案 0 :(得分:0)
Java Docs说什么是Class.forName();如果找不到类,将返回ClassNotFoundException,所以我会说它永远不会返回null。
查看您的日志。 可能是java无法从名称中找到类
String myClass = values_array[0];
答案 1 :(得分:0)
public void onClick(View v) {
Class<?> cl = null;
try {
Log.e("onClick", "myClass="+myClass);
cl = Class.forName(myClass); // <--- this is where i am getting a null pointer exception
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
确保“myClass”不为空;
答案 2 :(得分:0)
发布我的评论作为答案,OP请求清除它&gt;
你真的不应该使用单个String[]
来保存语义上不同类型的数据!
第一个元素是 classname ,第二个元素是标签语义:你应该拥有这个方法的签名,让它们分开!单个阵列是不可读的,非结构化的,通常是不可维护的!
(我还在这里添加了一个在classNAme中检查null的条件......我假设className为null是一个致命的错误。)
private void addBookmark(String labelText, String className) {
//check className not to be null
if(className==null) {
//handle error somehow, log error, etc
...
//no point in doing anything the listener, it would not do any good, just return
return;
}
LayoutInflater vi = (LayoutInflater) getApplicationContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View v = vi.inflate(R.layout.single_bookmark, null);
TextView text = (TextView) v.findViewById(R.id.bookmark_text);
Button button = (Button) v.findViewById(R.id.bookmark_button);
text.setText(labelValue); // variable "labelValue"
final String myClass = className; //variable className
//checking for null
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Class<?> cl = null;
try {
cl = Class.forName(myClass);
} catch (ClassNotFoundException e) {
e.printStackTrace();
//this case should be handled better.
}
Intent myIntent = new Intent(mContext, cl);
startActivity(myIntent);
}
});
当然,当您调用此方法时,您还应该更改以下代码:
addBookmark(anArrayOfStrings);
要
addBookmark(myLabelValueString, myClassNameString);
其中myLabelValueString,myClassNameString是包含相应值的String变量。