![](/img/trans.png)
[英]NullPointerException when creating new JAXBContext instance in Java
[英]NullPointerException when creating new instance for DBHelper class
我试图通过调用loadSpinnerData()
填充微调器数据,但它给出了NullPointerException
错误。
这是MyLayoutOperation
类的代码:
public class MyLayoutOperation extends Activity{
static Spinner products;
public static void display(final Activity activity, Button btn)
{
btn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
LinearLayout scrollViewlinerLayout = (LinearLayout) activity.findViewById(R.id.linearLayoutForm);
java.util.ArrayList<String> msg = new ArrayList<String>();
for (int i = 0; i < scrollViewlinerLayout.getChildCount(); i++)
{
LinearLayout innerLayout = (LinearLayout) scrollViewlinerLayout.getChildAt(i);
products = (Spinner) innerLayout.findViewById(R.id.spinner1);
EditText edit = (EditText) innerLayout.findViewById(R.id.editDescricao);
msg.add(products.getSelectedItem().toString());
msg.add(edit.getText().toString());
}
Toast t = Toast.makeText(activity.getApplicationContext(), msg.toString(), Toast.LENGTH_SHORT);
t.show();
}
});
}
public static void add(final Activity activity, ImageButton btn)
{
final LinearLayout linearLayoutForm = (LinearLayout) activity.findViewById(R.id.linearLayoutForm);
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
final LinearLayout newView = (LinearLayout)activity.getLayoutInflater().inflate(R.layout.rowdetail, null);
newView.setLayoutParams(new LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT));
try {
MyLayoutOperation mlo = new MyLayoutOperation();
loadSpinnerData();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
ImageButton btnRemove = (ImageButton) newView.findViewById(R.id.btnRemove);
btnRemove.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
linearLayoutForm.removeView(newView);
}
});
linearLayoutForm.addView(newView);
}
});
}
private void loadSpinnerData() throws IOException {
// database handler
DBHelper db = new DBHelper(getApplicationContext());
// Spinner Drop down elements
List<String> productslist = db.getAllProducts();
// Creating adapter
ArrayAdapter<String> dataAdapterP = new ArrayAdapter<String>(this,
android.R.layout.simple_spinner_item, productslist);
// Drop down layout style - list view with radio button
dataAdapterP
.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
// attaching data adapter to spinner
products.setAdapter(dataAdapterP);
}
}
MainActivity.java:-
public class MainActivity extends Activity {
Button btnDisplay;
ImageButton btnAdd;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btnAdd = (ImageButton) findViewById(R.id.btnAdd);
btnDisplay = (Button) findViewById(R.id.btnDisplay);
MyLayoutOperation.add(this, btnAdd);
MyLayoutOperation.display(this, btnDisplay);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}
这是我的LogCat:
07-30 02:47:40.500: E/AndroidRuntime(1284): FATAL EXCEPTION: main
07-30 02:47:40.500: E/AndroidRuntime(1284): Process: com.example.teste1, PID: 1284
07-30 02:47:40.500: E/AndroidRuntime(1284): java.lang.NullPointerException
07-30 02:47:40.500: E/AndroidRuntime(1284): at android.content.ContextWrapper.getApplicationContext(ContextWrapper.java:109)
07-30 02:47:40.500: E/AndroidRuntime(1284): at com.example.teste1.MyLayoutOperation.loadSpinnerData(MyLayoutOperation.java:88)
07-30 02:47:40.500: E/AndroidRuntime(1284): at com.example.teste1.MyLayoutOperation.access$0(MyLayoutOperation.java:85)
07-30 02:47:40.500: E/AndroidRuntime(1284): at com.example.teste1.MyLayoutOperation$2.onClick(MyLayoutOperation.java:65)
07-30 02:47:40.500: E/AndroidRuntime(1284): at android.view.View.performClick(View.java:4438)
07-30 02:47:40.500: E/AndroidRuntime(1284): at android.view.View$PerformClick.run(View.java:18422)
有什么建议么?
您正在调用loadSpinnerData()
活动未初始化为Context
。
您用new
实例化了它的另一个实例。 切勿用new
实例化活动。
在这种情况下,您可以使用this
来引用由Android框架为您设置的当前活动实例。 更换
MyLayoutOperation mlo = new MyLayoutOperation();
mlo.loadSpinnerData();
与
loadSpinnerData();
隐式调用this
的方法。
终于这工作了:-
public class TestActivity extends Activity {
Button btnDisplay;
ImageButton btnAdd;
LinearLayout container;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
container = findViewById(R.id.linearLayoutForm);
btnAdd = (ImageButton) findViewById(R.id.btnAdd);
btnDisplay = (Button) findViewById(R.id.btnDisplay);
btnAdd.setOnClickListener(addListener);
//TODO: btnDisplay
}
/*
* We define our OnClickListener that will act when we click on the btn.
*/
View.OnClickListener addListener = new View.OnClickListener() {
@Override
public void onClick(View v) {
final LinearLayout newView = (LinearLayout) getLayoutInflater().inflate(R.layout.rowdetail, null);
newView.setLayoutParams(new LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT));
ImageButton btnRemove = (ImageButton) newView.findViewById(R.id.btnRemove);
btnRemove.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
container.removeView(newView);
}
});
container.addView(newView);
//Now we load your data into your spinner
Spinner s = newView.findViewById(R.id.spinner1);
try {
loadSpinnerData(s);
} catch (IOException e) {
//TODO: catch exception
e.printStackTrace();
}
}
};
/*
* This function is supposed to load the data into the given spinner.
* It would be better to load the data an other way, i.e.: using ASyncTask
*/
private void loadSpinnerData(Spinner s) throws IOException {
// database handler
DBHelper db = new DBHelper(getApplicationContext());
// Spinner Drop down elements
List<String> products = db.getAllProducts();
// Creating adapter for spinner
ArrayAdapter<String> dataAdapter = new ArrayAdapter<String>(this,
android.R.layout.simple_spinner_item, products);
// Drop down layout style - list view with radio button
dataAdapter
.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
// attaching data adapter to spinner
s.setAdapter(dataAdapter);
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.