2013-09-08 3 views
0

Я разрабатываю приложение для Android, которое позволяет кому-то отправить sms кому-то и отправить автоматический ответ на этот номер, если они вернут текст. Я подхожу это с SharedPreferences:Как автоматически отправить смс на предопределенный номер телефона

public final String file = "AutoReply"; 
String autoReply; 
public static String returned = ""; 
static SharedPreferences folder; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); 

    folder = getSharedPreferences(file, 0); 
    returned = folder.getString("autoReplyKey", ""); 
    if(returned.equals("")) { 
     SharedPreferences.Editor edit = folder.edit(); 
     edit.putString("autoReplyKey", "Please don't respond to this phone number. Your friend borrowed my phone to text you."); 
     edit.commit(); 
    } 

Вот как кто-то изменяет сообщение по умолчанию:

LayoutInflater inflater3 = LayoutInflater.from(this); 
     final View autoReply = inflater3.inflate(R.layout.auto_reply, null); 
     final EditText autoreplytext = (EditText)findViewById(R.id.autoReplyText); 

     final AlertDialog.Builder alert3 = new AlertDialog.Builder(this); 
     alert3.setTitle("Set Auto Reply Message"); 
     alert3.setView(autoReply); 
     alert3.setPositiveButton("Set", new DialogInterface.OnClickListener() { 

      public void onClick(DialogInterface dialog, int which) { 
       // TODO Auto-generated method stub 
       String autoData = autoreplytext.getText().toString().trim(); 
       SharedPreferences.Editor editor = folder.edit(); 
       editor.putString("passwordKey", autoData); 
       editor.commit(); 
       returned = folder.getString("AutoReplyKey", "couldn't load data"); 
       } 
     }); 
     alert3.show(); 
     return true; 

Проблема заключается в том, когда я пытаюсь изменить сообщение по умолчанию с помощью AlertDialog, появляется ошибка NullPointerException , Кто-нибудь знает, как это исправить?

Edit:

Вот LogCat:

09-09 19:43:23.145: E/AndroidRuntime(1370): FATAL EXCEPTION: main 
09-09 19:43:23.145: E/AndroidRuntime(1370): java.lang.NullPointerException 
09-09 19:43:23.145: E/AndroidRuntime(1370):  at  com.mshaw.avanosplus.MainActivity$16.onClick(MainActivity.java:395) 
09-09 19:43:23.145: E/AndroidRuntime(1370):  at com.android.internal.app.AlertController$ButtonHandler.handleMessage(AlertController.java:166) 
09-09 19:43:23.145: E/AndroidRuntime(1370):  at android.os.Handler.dispatchMessage(Handler.java:99) 
09-09 19:43:23.145: E/AndroidRuntime(1370):  at android.os.Looper.loop(Looper.java:137) 
09-09 19:43:23.145: E/AndroidRuntime(1370):  at android.app.ActivityThread.main(ActivityThread.java:4424) 
09-09 19:43:23.145: E/AndroidRuntime(1370):  at java.lang.reflect.Method.invokeNative(Native Method) 
09-09 19:43:23.145: E/AndroidRuntime(1370):  at java.lang.reflect.Method.invoke(Method.java:511) 
09-09 19:43:23.145: E/AndroidRuntime(1370):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784) 
09-09 19:43:23.145: E/AndroidRuntime(1370):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551) 
09-09 19:43:23.145: E/AndroidRuntime(1370):  at dalvik.system.NativeStart.main(Native Method) 
+0

Какая линия вызывает NPE? –

+0

stacktrace por favor – Smitty

+0

Отредактировано с помощью logcat – user2759839

ответ

0

Как и другие писали в комментариях, что вам действительно нужно не только показать трассировку стека из LogCat, но скажите нам, где линия 395. В противном случае мы можем только догадываться, какая из многих возможных ссылок содержит нуль.

Это говорит о том, что я собираюсь взять удар по этому вопросу и угадать, устраняя другие возможности, что виновником является autoreplytext. Хотя вы не показали нам свой XML взглядов, я подозреваю, что вам нужно изменить эту строку:

final EditText autoreplytext = (EditText)findViewById(R.id.autoReplyText); 

к

final EditText autoreplytext = (EditText)autoReply.findViewById(R.id.autoReplyText); 

Первая строка ищет в представлении содержимого для основной деятельности - другими словами, он ищет в пределах R.layout.activity_main. Но похоже, что вы ищете вид, который содержится внутри диалогового окна, autoReply. Чтобы получить это, вам понадобится вторая форма.

+0

Кстати: я заметил, что вы определили 'autoReply' как поле, а также определили локальный имя' autoReply'. Это может вызвать неприятности. –