JUST-DO-IT-NOW 2015-06-12 02:47 采纳率: 83.3%
浏览 1541
已采纳

程序运行时强制关闭,可能为空指针

日志:java.lang.RuntimeException: Unable to start activity ComponentInfo{pcAlarm.pack/pcAlarm.pack.PCAlarmActivity}: java.lang.NumberFormatException: 空指针错误,可能在
private void readSaveAlarm(){
SharedPreferences sp =getContext().getSharedPreferences(PCAlarmActivity.class.getName(), Context.MODE_PRIVATE);
String content=sp.getString(KEY_ALARM_LIST, null);

if (content!=null) {
String[] timeString=content.split(",");

for (String string : timeString) {

adapter.add(new AlarmData(Long.parseLong(string)));
}
}
}方法里
package pcAlarm.pack;

import java.util.ArrayList;
import java.util.Calendar;
import java.util.Currency;
import java.util.List;

import pcAlarm.pack.PCAlarmActivity;

import android.app.Activity;
import android.app.AlertDialog;
import android.app.PendingIntent.OnFinished;
import android.app.TimePickerDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
import android.os.Bundle;
import android.provider.Contacts;
import android.view.View;
import android.widget.ArrayAdapter;
import pcAlarm.pack.AlarmView;
import pcAlarm.pack.AlarmView.AlarmData;
import android.view.View.OnClickListener;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ListView;
import android.widget.TabHost;
import android.widget.TimePicker;

public class PCAlarmActivity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
tabHost = (TabHost)findViewById(android.R.id.tabhost);
tabHost.setup();

    tabHost.addTab(tabHost.newTabSpec("tabAlarm").setIndicator("闹钟").setContent(R.id.tabAlarm));


    btnAddAlarm=(Button)findViewById(R.id.btnAddAlarm);
    lvListView=(ListView)findViewById(R.id.lvListView);

    adapter=new ArrayAdapter<PCAlarmActivity.AlarmData>(getContext(), android.R.layout.simple_list_item_1);
    lvListView.setAdapter(adapter);
    adapter.add(new AlarmData(System.currentTimeMillis()));
    readSaveAlarm();

    btnAddAlarm.setOnClickListener(new OnClickListener() {

        private Calendar mcalender;

        @Override
        public void onClick(View v) {
            Calendar.getInstance().setTimeInMillis(System.currentTimeMillis());
            mcalender = Calendar.getInstance();
            int mHour = Calendar.getInstance().get(Calendar.HOUR_OF_DAY);
            int mMinute = Calendar.getInstance().get(Calendar.MINUTE);
            new TimePickerDialog(PCAlarmActivity.this, new TimePickerDialog.OnTimeSetListener() {

                @Override
                public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
                    // TODO Auto-generated method stub
                    Calendar.getInstance().setTimeInMillis(System.currentTimeMillis());
                    Calendar.getInstance().set(Calendar.HOUR_OF_DAY, hourOfDay);
                    Calendar.getInstance().set(Calendar.MINUTE, minute);
                    Calendar.getInstance().set(Calendar.SECOND, 0);
                    Calendar.getInstance().set(Calendar.MILLISECOND, 0);

                    AlarmData add = new AlarmData(Calendar.getInstance().getTimeInMillis());
                    saveAlarmList();





                }
            }, mHour, mMinute, true).show();
        }
    });
    lvListView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {

        @Override
        public boolean onItemLongClick(AdapterView<?> parent, View arg1,
                final int position, long id) {
            new AlertDialog.Builder(getContext()).setTitle("操作选项").setItems(new CharSequence[]{"删除"}, new DialogInterface.OnClickListener() {

                @Override
                public void onClick(DialogInterface dialog, int which) {
                    switch (which) {
                    case 0:
                        deleteAlarm(position);
                        break;

                    default:
                        break;
                    }

                }
            }).setNegativeButton("取消", null).show();
            return true;
        }
    });

}

private void deleteAlarm(int position){
    adapter.remove(adapter.getItem(position));
}
private void saveAlarmList(){
    Editor editor=getContext().getSharedPreferences(PCAlarmActivity.class.getCanonicalName(), Context.MODE_PRIVATE).edit();

    StringBuffer sb=new StringBuffer();
    for (int i = 0; i < adapter.getCount(); i  ) {
        sb.append(adapter.getItem(i).getTime()).append(",");

    }
    String content = sb.toString().substring(0, sb.length()-1);
    editor.putString(KEY_ALARM_LIST, sb.toString().substring(0, sb.length()));
    System.out.println();
    editor.commit();

}
  • 写回答

6条回答 默认 最新

  • 刘兆贤 博客专家认证 2015-06-14 13:00
    关注

    String content=sp.getString(KEY_ALARM_LIST, null);

    if (content!=null) { String[] timeString=content.split(",");
    你的代码首先不是空指针异常,而是值类型异常。那么比较可能是,首先share里没有值,可是你默认取出的是null还不是"",所以你的content值可能是null,接下来content来跟空比较,首次肯定是要出错的。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(5条)

报告相同问题?

悬赏问题

  • ¥15 安卓adb backup备份应用数据失败
  • ¥15 eclipse运行项目时遇到的问题
  • ¥15 关于#c##的问题:最近需要用CAT工具Trados进行一些开发
  • ¥15 南大pa1 小游戏没有界面,并且报了如下错误,尝试过换显卡驱动,但是好像不行
  • ¥15 没有证书,nginx怎么反向代理到只能接受https的公网网站
  • ¥50 成都蓉城足球俱乐部小程序抢票
  • ¥15 yolov7训练自己的数据集
  • ¥15 esp8266与51单片机连接问题(标签-单片机|关键词-串口)(相关搜索:51单片机|单片机|测试代码)
  • ¥15 电力市场出清matlab yalmip kkt 双层优化问题
  • ¥30 ros小车路径规划实现不了,如何解决?(操作系统-ubuntu)