App stürzt ab, wenn ich versuche, eine SMS aus meiner Anwendung zu senden. Ich habe eine App, die SMS onClick einer Schaltfläche sendet. Aber es stürzt mit einer NULL Pointer Exception ab.App stürzt beim Versuch ab, SMS zu senden
Ich denke, es hat etwas mit dem Kontext. Aber ich weiß nicht, wie ich es erreichen soll. Da ich neu bei Android bin, wird jede Hilfe geschätzt.
Logcat:
09-12 00:32:25.895 17629-17629/com.nitsystem E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.nitsystem, PID: 17629
java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String android.content.Context.getPackageName()' on a null object reference
at android.preference.PreferenceManager.getDefaultSharedPreferencesName(PreferenceManager.java:499)
at android.preference.PreferenceManager.getDefaultSharedPreferences(PreferenceManager.java:488)
at com.nitsystem.activity.MainActivity.sendSMS(MainActivity.java:208)
at com.nitsystem.activity.MainActivity$1.onClick(MainActivity.java:77)
at android.view.View.performClick(View.java:6213)
at android.widget.TextView.performClick(TextView.java:11074)
at android.view.View$PerformClick.run(View.java:23645)
at android.os.Handler.handleCallback(Handler.java:751)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6692)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1468)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1358)
Code:
private static final String SMS_PHONE_NUMBER="sms";
public static long lastSMSsentAt = 0;
public static String smsContent = "Hello World";
public static MainActivity ref= null;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
msendSMS = (Button) findViewById(R.id.start_stop_detection);
msendSMS.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
sendSMS(ref);
}
});
}
public static void sendSMS(MainActivity context) {
SharedPreferences sharedPref = PreferenceManager.getDefaultSharedPreferences(context);
String phoneNumber = sharedPref.getString(SMS_PHONE_NUMBER, "");
long smsnow = System.currentTimeMillis();
long diff = smsnow - lastSMSsentAt;
Log.d(TAG, "diff : " + diff);
Log.d(TAG, "pre: " + lastSMSsentAt + " now: " + smsnow);
if(diff> 30000){
lastSMSsentAt = smsnow;
Calendar calendar = Calendar.getInstance();
SimpleDateFormat simpledf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
SmsManager sms = SmsManager.getDefault();
String destinationAddress = phoneNumber;
String message = smsContent +"\n";
message += "\nTest SMS time: " + simpledf.format(calendar.getTime()) + "";
sms.sendTextMessage(destinationAddress, null, message, null,null);
Log.d(TAG,"sms sent");
}
}
}
schaffen Kontext wie diesem Kontext Kontext Folowing = this; und dann übergeben Sie den Kontext, wo erforderlich –
MainActivity Ref, die Null in Ihrem Code ist pass MainActivity.this = ref – Vij
Danke Jungs. Beide Lösungen haben funktioniert. Bin dankbar. –