在抽屉导航中,当我选择启动服务选项时,应用程序崩溃并且logcat显示空指针异常我还没有提到我定义的所有变量。
MainActivity.class
public class MainActivity extends Activity{
private void displayView(int position) {
// update the main content by replacing fragments
ActionBar actionbar12 = getActionBar();
Fragment fragment = null;
switch (position) {
case 0:
actionbar12.setNavigationMode(0);
fragment = new BlacklistFragment();
break;
case 1:
{
actionbar12.setNavigationMode(0);
fragment = new BlacklistFragment();
startCallBlockerService()
}
break;
case 2:
actionbar12.setNavigationMode(0);
fragment = new PhotosFragment();
break;
case 3:
actionbar12.setNavigationMode(0);
fragment = new CommunityFragment();
break;
case 4:
actionbar12.setNavigationMode(0);
fragment = new PagesFragment();
break;
case 5:
if(wer==0)
{
ActionBar.Tab ce = actionbar12.newTab().setText("Yo");
ActionBar.Tab ce1 = actionbar12.newTab().setText("Yo2");
fragment = new HomeFragment();
Fragment fragment1=new FindPeopleFragment();
ce.setTabListener(new MyTabsListener(fragment));
ce1.setTabListener(new MyTabsListener(fragment1));
actionbar12.addTab(ce);
actionbar12.addTab(ce1);
wer++;
}
actionbar12.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
fragment = new WhatsHotFragment();
break;
case 6:
actionbar12.setNavigationMode(0);
fragment = new WhatsHotFragment();
break;
case 7:
actionbar12.setNavigationMode(0);
fragment = new WhatsHotFragment();
break;
case 8:
actionbar12.setNavigationMode(0);
fragment = new WhatsHotFragment();
break;
default:
break;
}
if (fragment != null) {
FragmentManager fragmentManager = getFragmentManager();
fragmentManager.beginTransaction()
.replace(R.id.frame_container, fragment).commit();
// update selected item and title, then close the drawer
mDrawerList.setItemChecked(position, true);
mDrawerList.setSelection(position);
setTitle(navMenuTitles[position]);
mDrawerLayout.closeDrawer(mDrawerList);
} else {
// error in creating fragment
Log.e("MainActivity", "Error in creating fragment");
}
}
public void startCallBlockerService()
{
if(!checkIfServiceIsAlreadyRunning())
{
if(blackList.size()>0)
{
Intent i=new Intent(MainActivity.this, CallBlockerService.class);
startService(i);
}
else
{
CallBlockerToastNotification.showDefaultShortNotification("Blacklist is empty, service can't start");
}
}
else
{
CallBlockerToastNotification.showDefaultShortNotification("Service is running already");
}
}
public void stopCallBlockerService()
{
if(checkIfServiceIsAlreadyRunning())
{
stopService(new Intent(MainActivity.this, CallBlockerService.class));
}
}
public static boolean checkIfServiceIsAlreadyRunning()
{
for(RunningServiceInfo service: manager.getRunningServices(Integer.MAX_VALUE))
{
if(CallBlockerService.class.getName().equals(service.service.getClassName()))
{
return true;
}
}
return false;
}
public void loadData()
{
try
{
FileInputStream fis=openFileInput("CallBlocker.data");
ObjectInputStream objeto=new ObjectInputStream(fis);
blackList=(HashMap<String, BlockedContact>)objeto.readObject();
fis.close();
objeto.close();
}
catch (Exception e)
{
blackList=new HashMap<String, BlockedContact>();
Log.e("Error", e.getMessage());
}
}
public void saveData()
{
try
{
FileOutputStream fos=openFileOutput("CallBlocker.data", Context.MODE_PRIVATE);
ObjectOutputStream oos=new ObjectOutputStream(fos);
oos.writeObject(blackList);
fos.close();
oos.close();
CallBlockerToastNotification.showDefaultShortNotification("Saving Data...");
}
catch (Exception e)
{
Log.e("Error", e.getMessage());
}
}
}
CallBlockerService.class
public class CallBlockerService extends Service
{
public static final int notification_id = 111;
//---------------------------------------
//Listening Services
//---------------------------------------
private static ServiceReciever service;
private static SmsReceiver sms;
//---------------------------------------
//Data Structures
//---------------------------------------
public static HashMap<String, BlockedContact>blackList;
@Override
public IBinder onBind(Intent intent)
{
return null;
}
@Override
public void onCreate()
{
loadData();
service=new ServiceReciever(getApplicationContext());
sms=new SmsReceiver();
registerReceiver(service, new IntentFilter("android.intent.action.PHONE_STATE"));
registerReceiver(sms, new IntentFilter("android.provider.Telephony.SMS_RECEIVED"));
showStatusBarNotification("Call blocker is running now");
}
@Override
public void onDestroy()
{
CallBlockerToastNotification.showDefaultShortNotification("Turning call blocker off");
service.stopListening();
unregisterReceiver(service);
unregisterReceiver(sms);
service=null;
sms=null;
cancelStatusBarNotification();
super.onDestroy();
}
@Override
public int onStartCommand(Intent intent, int flags, int startId)
{
return START_STICKY;
}
public void showStatusBarNotification(String message)
{
NotificationManager manager=(NotificationManager)getSystemService(NOTIFICATION_SERVICE);
Intent i=new Intent(CallBlockerService.this, CallBlockerMainActivity.class);
PendingIntent pi=PendingIntent.getActivity(this, 0, i, 0);
Notification noti =new NotificationCompat.Builder(this)
.setContentTitle("Call blocker notification")
.setWhen(System.currentTimeMillis())
.setContentText(message).setSmallIcon(R.drawable.running_not_icon)
.setContentIntent(pi).build();
noti.flags |= Notification.FLAG_NO_CLEAR;
manager.notify(notification_id,noti);
}
public void cancelStatusBarNotification()
{
NotificationManager manager=(NotificationManager)getSystemService(NOTIFICATION_SERVICE);
manager.cancel(notification_id);
}
public void loadData()
{
try
{
FileInputStream fis=openFileInput("CallBlocker.data");
ObjectInputStream objeto=new ObjectInputStream(fis);
blackList=(HashMap<String, BlockedContact>)objeto.readObject();
fis.close();
objeto.close();
}
catch (Exception e)
{
blackList=new HashMap<String, BlockedContact>();
Log.e("Error", e.getMessage());
}
}
}
logcat的:
07-25 19:49:04.806: E/AndroidRuntime(2365): FATAL EXCEPTION: main
07-25 19:49:04.806: E/AndroidRuntime(2365): java.lang.RuntimeException: Unable to start activity ComponentInfo{info.androidhive.slidingmenu/info.androidhive.slidingmenu.MainActivity}: java.lang.NullPointerException
07-25 19:49:04.806: E/AndroidRuntime(2365): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2306)
07-25 19:49:04.806: E/AndroidRuntime(2365): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2358)
07-25 19:49:04.806: E/AndroidRuntime(2365): at android.app.ActivityThread.access$600(ActivityThread.java:156)
07-25 19:49:04.806: E/AndroidRuntime(2365): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1340)
07-25 19:49:04.806: E/AndroidRuntime(2365): at android.os.Handler.dispatchMessage(Handler.java:99)
07-25 19:49:04.806: E/AndroidRuntime(2365): at android.os.Looper.loop(Looper.java:153)
07-25 19:49:04.806: E/AndroidRuntime(2365): at android.app.ActivityThread.main(ActivityThread.java:5297)
07-25 19:49:04.806: E/AndroidRuntime(2365): at java.lang.reflect.Method.invokeNative(Native Method)
07-25 19:49:04.806: E/AndroidRuntime(2365): at java.lang.reflect.Method.invoke(Method.java:511)
07-25 19:49:04.806: E/AndroidRuntime(2365): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:833)
07-25 19:49:04.806: E/AndroidRuntime(2365): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:600)
07-25 19:49:04.806: E/AndroidRuntime(2365): at de.robv.android.xposed.XposedBridge.main(XposedBridge.java:133)
07-25 19:49:04.806: E/AndroidRuntime(2365): at dalvik.system.NativeStart.main(Native Method)
07-25 19:49:04.806: E/AndroidRuntime(2365): Caused by: java.lang.NullPointerException
07-25 19:49:04.806: E/AndroidRuntime(2365): at info.androidhive.slidingmenu.MainActivity.checkIfServiceIsAlreadyRunning(MainActivity.java:383)
07-25 19:49:04.806: E/AndroidRuntime(2365): at info.androidhive.slidingmenu.MainActivity.startCallBlockerService(MainActivity.java:355)
07-25 19:49:04.806: E/AndroidRuntime(2365): at info.androidhive.slidingmenu.MainActivity.onCreate(MainActivity.java:119)
07-25 19:49:04.806: E/AndroidRuntime(2365): at android.app.Activity.performCreate(Activity.java:5122)
07-25 19:49:04.806: E/AndroidRuntime(2365): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1081)
07-25 19:49:04.806: E/AndroidRuntime(2365): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2270)
07-25 19:49:04.806: E/AndroidRuntime(2365): ... 12 more
答案 0 :(得分:0)
在致电manager.getRunningServices
之前,请执行以下操作:
if (manager == null) {
manager = (ActivityManager) getSystemService(ACTIVITY_SERVICE);
}