android无法实例化服务,由于NullPointerException,无法实例化android.app.Application

我在android系统中是个菜鸟,并且正在做一个宠物项目来锻炼身体。这是一个非常简单的类似提醒的应用程序,只有两个活动。一种是自定义的ListView,用于显示现有警报。其中有一些按钮可以启动另一个按钮,用于添加/编辑警报。其中有一个按钮可引至上一个ListView活动。

我最近遇到了一个奇怪的情况。我的应用程序运行正常。但是问题是,每当我触发添加/编辑活动,然后返回到ListView,然后重新运行(或者我应该说重新安装?)该应用程序。将会弹出一条错误信息。但是它只会短暂显示,并且该应用程序将启动。

我在日志中捕获的错误消息显示:

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

它没有明确指出我的代码中哪里出了问题。所以我不知道如何纠正它。有没有人遇到类似的问题?任何建议将不胜感激!

这是添加/编辑活动的代码:

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 arrayAdapter = new ArrayAdapter(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));

}

}

}

清单如下所示:

package="ca.maxiao.Food"

android:versionCode="1"

android:versionName="1.0" >

android:icon="@drawable/ic_launcher"

android:label="@string/app_name" >

android:label="@string/app_name"

android:name=".FoodReminderList" >

android:label="@string/app_name"

android:name=".EditEntry" >

android:label='@string/app_name'

android:name=".FoodReminder">

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值