Soy un tipo novato en el mundo de Android, y estoy haciendo un proyecto de mascota para hacer ejercicio. Es una aplicación similar a un recordatorio muy simple con solo dos actividades. Uno es un ListView personalizado que muestra las alarmas existentes. Hay algunos botones para iniciar el otro, que es para agregar/editar alarmas. Hay un botón que lleva a la actividad anterior ListView.android.app.Application no se puede crear una instancia debido a NullPointerException
Hay una situación extraña con la que me encontré recientemente. Mi aplicación funciona bien Pero el problema es que cada vez que activé la actividad de agregar/editar, volví al ListView y volví a ejecutar (¿o debería volver a instalar?) La aplicación. Aparecerá un mensaje de error. Pero solo aparecerá brevemente y la aplicación comenzará.
El mensaje de error que cogí en el registro dice:
FATAL EXCEPTION: main
java.lang.RuntimeException: Unable to instantiate application android.app.Application: java.lang.NullPointerException
at android.app.LoadedApk.makeApplication(LoadedApk.java:482)
at android.app.ActivityThread.handleBindApplication(ActivityThread.java:3909)
at android.app.ActivityThread.access$1300(ActivityThread.java:122)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1184)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:4340)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.NullPointerException
at android.app.LoadedApk.initializeJavaContextClassLoader(LoadedApk.java:362)
at android.app.LoadedApk.getClassLoader(LoadedApk.java:305)
at android.app.LoadedApk.makeApplication(LoadedApk.java:474)
... 11 more
No explícitamente señalar dónde está equivocada en mis códigos. Entonces no tengo ni idea de cómo corregirlo. ¿Alguien se encontró con un problema similar? ¡Cualquier sugerencia será apreciada!
Aquí está códigos de actividad Añadir/editar:
public class EditEntry extends Activity
{
private AutoCompleteTextView foodNameTextView;
private DatePicker datePicker;
// store values in AutoCompleteTextView & DatePicker
private String foodName;
private Calendar foodDate;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.edit);
// dummy selections for AutoCompleteTextView
String[] foodList = new String[]{"meat", "fruit", "vega"};
// instantiate AutoCompleteTextView & DatePicker
ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(this, R.layout.food_list_dropdown, foodList);
foodNameTextView = (AutoCompleteTextView)findViewById(R.id.foodName);
foodNameTextView.setAdapter(arrayAdapter);
datePicker = (DatePicker)findViewById(R.id.date_picker);
// get intent from ReminderList.
Intent intent = getIntent();
// get extras from intent. Return null if intent is sent from "add" action.
foodName = intent.getStringExtra("foodName");
foodDate = (Calendar) intent.getSerializableExtra("foodDate");
// set default values for widgets if it is an "edit" action.
if (null != foodName)
{
foodNameTextView.setText(foodName);
datePicker.init(foodDate.get(Calendar.YEAR), foodDate.get(Calendar.MONTH), foodDate.get(Calendar.DAY_OF_MONTH),
new OnDateChangedListener()
{ // will implement date input check later.
@Override
public void onDateChanged(DatePicker view, int year, int monthOfYear, int dayOfMonth) {}
});
}
// Submit will add/modify the data in xml file. Back will start ReminderList activity
Button submit = (Button)findViewById(R.id.entry_submit);
Button back = (Button)findViewById(R.id.entry_back);
submit.setOnClickListener(new SubmitButtonListener());
back.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View v)
{
Intent intent = new Intent();
intent.setClass(EditEntry.this, FoodReminderList.class);
startActivity(intent);
}
});
}
// add or modify data in xml file
@SuppressWarnings("unused")
class SubmitButtonListener implements OnClickListener
{
Calendar foodDate = Calendar.getInstance();
@Override
public void onClick(View v)
{
XmlUtil xmlUtil = new XmlUtil();
// determine if it is an "edit" action.
if (null != foodName)
{
FoodInfo foodInfo = new FoodInfo(foodName, foodDate);
// delete the old data entry
xmlUtil.deleteEntry(foodInfo);
// cancel old alarm
FoodReceiver alarm = new FoodReceiver(EditEntry.this, foodDate, false);
}
// get new input values
foodName = foodNameTextView.getText().toString();
foodDate.set(datePicker.getYear(), datePicker.getMonth(), datePicker.getDayOfMonth(), 0, 0, 0);
// update xml file
FoodInfo foodInfo = new FoodInfo(foodName, foodDate);
xmlUtil.updateEntry(foodInfo);
// set new alarm
FoodReceiver alarm = new FoodReceiver(EditEntry.this, foodDate, true);
// popup toast confirming the submit
Toast.makeText(EditEntry.this, "Reminder Added", Toast.LENGTH_SHORT).show();
// clear widgets
foodNameTextView.setText("");
Calendar currentDate = Calendar.getInstance();
datePicker.updateDate(currentDate.get(Calendar.YEAR), currentDate.get(Calendar.MONTH), currentDate.get(Calendar.DAY_OF_MONTH));
}
}
}
El Manifiesto es la siguiente:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="ca.maxiao.Food"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk android:minSdkVersion="8" />
<application
android:icon="@drawable/ic_launcher"
android:label="@string/app_name" >
<activity
android:label="@string/app_name"
android:name=".FoodReminderList" >
<intent-filter >
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:label="@string/app_name"
android:name=".EditEntry" >
</activity>
<activity
android:label='@string/app_name'
android:name=".FoodReminder"></activity>
<receiver android:name="ca.maxiao.Food.FoodReceiver">
<intent-filter>
<action android:name="Alarm_Setting" />
</intent-filter>
</receiver>
</application>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.VIBRATE"/>
</manifest>
Hay una [publicación] (http://www.mail-archive.com/[email protected]/msg194903.html) sobre el error similar. Entiendo que podría ser un problema de carrera de subprocesos, pero aún no sé cómo revisar mis códigos. – Selkie
¿Puede agregar su archivo de manifiesto aquí? – Yury
seguro. manifiesto agregado. – Selkie