2014-11-25 2 views
0

в применении иногда я получаю эту ошибку и после того, как след я не могу найти, Что причина этой ошибки:Android ComponentInfo и NullPointerException

java.lang.RuntimeException: Unable to start activity ComponentInfo{ir.tsms/ir.tsms.ServiceDialog}: java.lang.NullPointerException 
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2306) 
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2358) 
    at android.app.ActivityThread.access$600(ActivityThread.java:156) 
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1340) 
    at android.os.Handler.dispatchMessage(Handler.java:99) 
    at android.os.Looper.loop(Looper.java:153) 
    at android.app.ActivityThread.main(ActivityThread.java:5297) 
    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:833) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:600) 
    at dalvik.system.NativeStart.main(Native Method) 
Caused by: java.lang.NullPointerException 
    at ir.tsms.ServiceDialog.updateAndIntertDialog(ServiceDialog.java:233) 
    at ir.tsms.ServiceDialog.onCreate(ServiceDialog.java:105) 
    at android.app.Activity.performCreate(Activity.java:5122) 
    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1081) 
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2270) 
    ... 11 more 
java.lang.NullPointerException 
    at ir.tsms.ServiceDialog.updateAndIntertDialog(ServiceDialog.java:233) 
    at ir.tsms.ServiceDialog.onCreate(ServiceDialog.java:105) 

я получаю NullPointerException ошибку и я не могу решить, что.

мой код:

public class ServiceDialog extends Activity { 
    private Context ctx; 
    private String count; 
    private Boolean ps; 
    private Boolean sn; 
    private String mLastIDForDelete; 
    private String mLastID; 
    private String mSmsNumber; 
    private String mMobileNumber; 
    private String mContactName; 
    private String mSmsBody; 
    private String mSenderName; 
    private String mDate; 
    private MediaPlayer sms_music; 
    private PowerManager.WakeLock wakeLock; 
    private TextView count_sms; 
    private ContentResolver contentResolver; 
    private boolean getCurrentActivity; 
    private LinearLayout open_app; 
    private TextView content; 
    private TextView title; 
    private TextView tv_date_time; 
    private TextView tv_name_family; 
    private TextView te_sms_text; 
    private TextView tv_phone_number; 
    private LinearLayout main_window; 
    private Integer notify = 0; 
    private Integer unread_messages; 
    private Integer unread_count = 0; 

    private static final String TAG = "BroadcastTest"; 
    private Intent intent; 
    @Override 
    public void onCreate (Bundle savedInstanceState) { 
     super.onCreate (savedInstanceState); 
     requestWindowFeature (Window.FEATURE_NO_TITLE); 
     getWindow().setFlags (WindowManager.LayoutParams.FLAG_FULLSCREEN, 
       WindowManager.LayoutParams.FLAG_FULLSCREEN); 
     setContentView (R.layout.service_view_dialog); 

     ctx = getBaseContext(); 
     G.redirect = false; 
     /* Set current Activity runnable with this activity class */ 
     G.activity = this; 
     intent = new Intent(this, ToobaPayamakService.class); 
     unread_messages = 0; 

     title     = (TextView) findViewById (R.id.tv_title); 
     content    = (TextView) findViewById (R.id.content); 
     count_sms    = (TextView) findViewById (R.id.tv_count_new_sms); 
     tv_date_time   = (TextView) findViewById (R.id.tv_date_time); 
     tv_name_family  = (TextView) findViewById (R.id.tv_name_family); 
     tv_phone_number  = (TextView) findViewById (R.id.tv_phone_number); 
     te_sms_text   = (EditText) findViewById (R.id.te_sms_text); 
     title.setText   (ctx.getResources().getString (R.string.count_new_sms_received)); 
     main_window   = (LinearLayout) findViewById (R.id.main_window); 


     int count = 0; 
     int unread= 0; 
     if (savedInstanceState == null) { 
      Bundle extras = getIntent().getExtras(); 
      if (extras == null) { 
       count = 0; 
      } else { 
       G.config_username = extras.getString ("username"); 
       G.config_password = extras.getString ("password"); 
       unread   = extras.getInt ("unread" ); 
       notify   = extras.getInt ("notify" ); 
       G.db    = new DatabaseHandler (G.context); 
      } 
     } 
     contentResolver = ctx.getContentResolver(); 
     updateAndIntertDialog(unread, contentResolver); 
     notification(); 
     Button send_sms    = (Button) findViewById (R.id.send_sms); 

     open_app      = (LinearLayout) findViewById (R.id.open_app); 
     LinearLayout delete   = (LinearLayout) findViewById (R.id.delete); 
     LinearLayout forward   = (LinearLayout) findViewById (R.id.forward); 

     /* get realtime configuration saved settings */ 
     open_app.setOnClickListener (new View.OnClickListener() { 
      @Override 
      public void onClick (View v) { 
       Intent tsms_dashboard = new Intent (v.getContext(), ActivityMain.class); 
       startActivity (tsms_dashboard); 
       finish(); 
      } 
     }); 

     delete.setOnClickListener (new View.OnClickListener() { 
      @Override 
      public void onClick (View v) { 
       /*G.db.deleteRecordFromReceiveds(mLastIDForDelete); 
       if(getCurrentActivity){ 
        G.fillItems (G.contentResolver); 
        G.adapter.notifyDataSetChanged(); 
       }*/ 
      } 
     }); 

     forward.setOnClickListener (new View.OnClickListener() { 
      @Override 
      public void onClick (View v) { 
       G.forward_text_from_service = mSmsBody; 
       G.config_smsNumber = tv_phone_number.getText().toString(); 
       Intent tsms_dashboard = new Intent(v.getContext(), ActivityContactList.class); 
       startActivity(tsms_dashboard); 
       finish(); 
      } 
     }); 
     /* Set Screen Turn ON */ 
     WindowManager.LayoutParams params = getWindow().getAttributes(); 
     params.flags |= WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON; 
     params.screenBrightness = 1.0f; 
     getWindow().setAttributes(params); 

     PowerManager powermanager = ((PowerManager)ctx.getSystemService(Context.POWER_SERVICE)); 
     wakeLock=powermanager.newWakeLock(
       PowerManager.SCREEN_BRIGHT_WAKE_LOCK | 
         PowerManager.ACQUIRE_CAUSES_WAKEUP, "TsmsScreenOn"); 
     wakeLock.acquire(); 

     startService(intent); 
     registerReceiver(broadcastReceiver, new IntentFilter (ToobaPayamakService.BROADCAST_ACTION)); 
    } 

    private BroadcastReceiver broadcastReceiver = new BroadcastReceiver() { 
     @Override 
     public void onReceive(Context context, Intent intent) { 
      updateUI(intent); 
     } 
    }; 

    private void updateUI(Intent intent) { 
     String counter = intent.getStringExtra ("counter"); 
     Log.e ("counter in update UI", counter); 
     updateAndIntertDialog(Integer.valueOf (counter), contentResolver); 
     //count_sms.setText (counter); 
     //notification(); 
    } 


    public void updateAndIntertDialog(Integer received_count , ContentResolver cr){ 
     unread_messages += received_count; 
     getCurrentActivity = Configuration.getInstance() 
       .getBoolean (getApplication(), 
         Configuration.SharedPrefsTypes.ACTIVITY_IS_RUNNING); 
     int count  = received_count - 1; 
     int cursor_count = 0; 
     String mUserID = ""; 
     String mLastID = ""; 
     String mSmsBody = ""; 
     String mSenderName = ""; 
     String mContactName = ""; 
     String mSmsNumber = ""; 
     String mDate  = ""; 
     Cursor c  = G.db.getReceivedFromDatabaseByCount(G.config_username , received_count); 
     c.moveToLast(); 
     if (c != null && c.getCount() != 0) { 
      cursor_count = c.getCount(); 
      Log.e("cursor count is: ", c.getCount()+""); 
      for(int i = cursor_count; i > 0; i--){ 
       mUserID = G.config_username; 
       mLastID = c.getString (c.getColumnIndex ("lastId")); 
       mSmsBody = c.getString (c.getColumnIndex ("smsBody")); 
       mSenderName = c.getString (c.getColumnIndex ("senderName")); 
       //Log.e("Fill Items "," mSenderName:" + mSenderName + " ContentResolver: "+cr); 
       mContactName = G.getContentNameFromContactList (mSenderName, cr); 
       if (TextUtils.isEmpty (mContactName)) 
        /* if contact name not exist in contact show resolve by service */ 
        mContactName = mSenderName; 
       mSmsNumber = c.getString (c.getColumnIndex ("smsNumber")); 
       mDate = c.getString (c.getColumnIndex ("receiveDate")); 
       Bitmap mPhoto = G.getContactPhoto (mSenderName, cr); 
       int mRead = Integer.parseInt (c.getString (c.getColumnIndex ("read_state"))); 
       ReceivedItemStructure itm = new ReceivedItemStructure(); 
       itm.setmLastID  (mLastID); 
       itm.setmUserID  (mUserID); 
       itm.setmSmsBody  (mSmsBody); 
       itm.setmSmsNumber (mSmsNumber); 
       itm.setmSenderName (mSenderName); 
       itm.setmContactName (mContactName); 
       itm.setmDate   (mDate); 
       itm.setmRead   (mRead); 
       itm.setmPhoto  (mPhoto); 
       Log.e ("---------- lastID: ", mLastID); 
       G.items.add (0, itm); 
       c.moveToPrevious(); 
      } 
     } 
     c.close(); 
     mLastIDForDelete = mLastID; 
     tv_name_family.setText (mContactName); 
     tv_phone_number.setText (mSmsNumber); 
     tv_date_time.setText (mDate.substring(11, 16)); 
     mMobileNumber = G.getContactMobile (mContactName); 
     content.setText  (mSmsBody); 
     count_sms.setText (unread_messages+""); 
     if(getCurrentActivity){ 
      G.adapter.notifyDataSetChanged(); 
     } 

     //main_window.setVisibility (View.VISIBLE); 
     try { 
      Thread.sleep (2000); 
      notification(); 
     } catch (InterruptedException e) { 
      e.printStackTrace(); 
     } 

    } 
} 

линия 223 является конец updateAndIntertDialog функции и ServiceDialog.java:105 звонит updateAndIntertDialog функция

+0

Если я получаю NPE, я распечатать каждый объект этой линии, которая может быть пустой ... попробуйте это путь. Просто System.out.println («Debug NPE:« + G + »» + адаптер), если строка 223 - G.adapter.notifyDataSetChanged(); – Wicked161089

+1

Ваш 'G.adapter' равен нулю. –

ответ

0

ли Contentresolver нуль? Попробуйте в методе OnCreate вместо

contentResolver = ctx.getContentResolver(); 

вызов

contentResolver = this.getContentResolver(); 

или

contentResolver = getContentResolver(); 
+0

спасибо, сэр. почему в logcat я не вижу точно причины проблемы? (logcat) очень неясен, и я не могу правильно отслеживать и трассировать приложение, чтобы найти ошибки –