2015-06-29 4 views
0

У меня проблема с проверкой переменных в «if». Я получаю переменную userPhoneNumber из SharedPreferences и phoneNumber SmsMessage.«если» в методе службы BroadcastReceiver не будет работать

Я покажу тост с обеими переменными, и они будут одинаковыми, но если это не сработало. В чем проблема?

Мой BroadcastReceiver класс:

public class IncomingSms extends BroadcastReceiver { 
String userPhoneNumber = ""; 
String senderNum= ""; 
String message= ""; 
final String TAG="LocationService"; 
GPSTracker gps; 
double latitude = 0.0; 
double longitude = 0.0; 


// Get the object of SmsManager 
final SmsManager sms = SmsManager.getDefault(); 


public void onReceive(Context context, Intent intent) { 
    SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(context); 
    userPhoneNumber = settings.getString("userPhoneNumber", ""); 

    Log.e(TAG, "userPhoneNumber:"+userPhoneNumber); 
    int duration = Toast.LENGTH_LONG; 

    // Retrieves a map of extended data from the intent. 
    final Bundle bundle = intent.getExtras(); 

    try { 
     if (bundle != null) { 
      final Object[] pdusObj = (Object[]) bundle.get("pdus"); 

      for (int i = 0; i < pdusObj.length; i++) { 
       SmsMessage currentMessage = SmsMessage.createFromPdu((byte[]) pdusObj[i]); 
       String phoneNumber = currentMessage.getDisplayOriginatingAddress().toString(); 

       senderNum = phoneNumber; 
       message = currentMessage.getDisplayMessageBody(); 

       turnOn(context); 
      } // end for loop 
     } // bundle is null 

    } catch (Exception e) { 
     Log.e("SmsReceiver", "Exception smsReceiver" +e); 
    } 
    Log.i("SmsReceiver", "senderNum: " + senderNum + "userPhoneNumber: "+ userPhoneNumber + "; message: " + message); 


} 

public void turnOn (Context context){ 
    Intent i = new Intent(context, MyService.class); 
    gps = new GPSTracker(context); 

    Toast.makeText(context,"Method turnOn!\nsenderNum: "+senderNum + "\n userPhoneNumber: " + userPhoneNumber, Toast.LENGTH_LONG).show(); 

    if (senderNum == userPhoneNumber) { 
     Toast.makeText(context,"works in IF", Toast.LENGTH_LONG).show(); 
     if(gps.canGetLocation()){ 
      latitude = gps.getLatitude(); 
      longitude = gps.getLongitude(); 
      i.putExtra("Latitude", latitude); 
      i.putExtra("Longitude", longitude); 

      context.startService(i); 
     }else 
     { 
      gps.showSettingsAlert(); 
     } 
    } 
    gps.stopUsingGPS(); 
} 

ответ

0

senderNum это строка, что означает, что ваш, если должно быть:

if (senderNum.equals(userPhoneNumber)) 
0

вы сравниваете ли senderNum и userPhoneNumber относятся к одному объекту. Вам нужно изменить

if (senderNum == userPhoneNumber) 

в

if (senderNum.equals(userPhoneNumber)) 
0

Я думаю, что проблема находится в состоянии. Чтобы сравнить строковые значения, вы должны использовать функцию equals(). == Проверяет ссылки на объекты, .equals() проверяет строковые значения.

попробовать

if (senderNum.equals(userPhoneNumber)) { 
    //code 
} 

См this

+0

спасибо! Действительно помог! – uhuru1211

Смежные вопросы