2012-07-15 57 views
1

編輯:解決方案是將Main.this放在我烤麪包的空位。sms.sendTextMessage發送消息,但強制關閉

我使用AsyncTask發送短信,他們都成功發送(我測試了發送50給自己),但應用程序立即強制關閉,當我按發送。我使用了斷點,並且我決定在「sms.sendTextMessage ...」循環之後關閉應用程序。這是我的main.java。

package com.dillonregi.spamsms; 

import android.app.Activity; 
import android.os.AsyncTask; 
import android.os.Bundle; 
import android.os.Handler; 
import android.telephony.SmsManager; 
import android.view.View; 
import android.widget.EditText; 
import android.widget.Toast; 


public class Main extends Activity { 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    Toast.makeText(this, "onCreate", Toast.LENGTH_SHORT).show(); 
} 

public void sms(View view) { 
Toast.makeText(this, "sms()", Toast.LENGTH_SHORT).show(); 
final Handler mHandler = new Handler(); 
new AsyncTask<String, Integer, Long>() { 
protected Long doInBackground(String... params){ 
    EditText number = (EditText) Main.this.findViewById(R.id.pnumber); 
    EditText message = (EditText) Main.this.findViewById(R.id.pmessage); 
    EditText hmany = (EditText) Main.this.findViewById(R.id.hmany); 
    String _hmany = hmany.getText().toString(); 
    final String _number = number.getText().toString(); 
    final String _message = message.getText().toString(); 
    final int xtime = Integer.parseInt(_hmany); 

    mHandler.post(new Runnable() { 
      public void run() { 
    Toast.makeText(null, "number: " + _number + " message: " + _message + " xtime: " + xtime, Toast.LENGTH_LONG).show(); 
      } 
    }); 

    long sentTexts = 0; 
    for (int i = 0; i < xtime; i++) {  
     SmsManager sms = SmsManager.getDefault(); 
     sms.sendTextMessage(_number, null, _message, null, null); 
     //send SMS's 
     sentTexts += 1; 
    } 
    return sentTexts; 
} 
protected void onProgressUpdate(Integer... progress) { 

} 

protected void onPostExecute(Long result) { 
      Toast.makeText(null, "number of texts sent will end up going here. maybe add + sentTexts after these quotes?", Toast.LENGTH_LONG).show(); 

} 
}.execute(); } 
} 

而且logcat的

07-15 16:09:39.152: W/dalvikvm(29508): threadid=1: thread exiting with uncaught exception (group=0x40019560) 07-15 16:09:39.152: E/AndroidRuntime(29508): FATAL EXCEPTION: main 07-15 16:09:39.152: E/AndroidRuntime(29508): java.lang.NullPointerException 07-15 16:09:39.152: E/AndroidRuntime(29508): at android.widget.Toast.(Toast.java:89) 07-15 16:09:39.152: E/AndroidRuntime(29508): at android.widget.Toast.makeText(Toast.java:231) 07-15 16:09:39.152: E/AndroidRuntime(29508): at com.dillonregi.spamsms.Main$1$1.run(Main.java:37) 07-15 16:09:39.152: E/AndroidRuntime(29508): at android.os.Handler.handleCallback(Handler.java:587) 07-15 16:09:39.152: E/AndroidRuntime(29508): at android.os.Handler.dispatchMessage(Handler.java:92) 07-15 16:09:39.152: E/AndroidRuntime(29508): at android.os.Looper.loop(Looper.java:130) 07-15 16:09:39.152: E/AndroidRuntime(29508): at android.app.ActivityThread.main(ActivityThread.java:3701) 07-15 16:09:39.152: E/AndroidRuntime(29508): at java.lang.reflect.Method.invokeNative(Native Method) 07-15 16:09:39.152: E/AndroidRuntime(29508): at java.lang.reflect.Method.invoke(Method.java:507) 07-15 16:09:39.152: E/AndroidRuntime(29508): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:895) 07-15 16:09:39.152: E/AndroidRuntime(29508): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:653) 07-15 16:09:39.152: E/AndroidRuntime(29508): at dalvik.system.NativeStart.main(Native Method) 07-15 16:09:39.162: E/AndroidRuntime(29508): [Blue Error Handler] Make Debugging Report file for main 07-15 16:09:39.162: E/AndroidRuntime(29508): java.lang.NullPointerException 07-15 16:09:39.162: E/AndroidRuntime(29508): at android.widget.Toast.(Toast.java:89) 07-15 16:09:39.162: E/AndroidRuntime(29508): at android.widget.Toast.makeText(Toast.java:231) 07-15 16:09:39.162: E/AndroidRuntime(29508): at com.dillonregi.spamsms.Main$1$1.run(Main.java:37) 07-15 16:09:39.162: E/AndroidRuntime(29508): at android.os.Handler.handleCallback(Handler.java:587) 07-15 16:09:39.162: E/AndroidRuntime(29508): at android.os.Handler.dispatchMessage(Handler.java:92) 07-15 16:09:39.162: E/AndroidRuntime(29508): at android.os.Looper.loop(Looper.java:130) 07-15 16:09:39.162: E/AndroidRuntime(29508): at android.app.ActivityThread.main(ActivityThread.java:3701) 07-15 16:09:39.162: E/AndroidRuntime(29508): at java.lang.reflect.Method.invokeNative(Native Method) 07-15 16:09:39.162: E/AndroidRuntime(29508): at java.lang.reflect.Method.invoke(Method.java:507) 07-15 16:09:39.162: E/AndroidRuntime(29508): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:895) 07-15 16:09:39.162: E/AndroidRuntime(29508): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:653) 07-15 16:09:39.162: E/AndroidRuntime(29508): at dalvik.system.NativeStart.main(Native Method)

+0

看到我的答案的屬性,你是#2的新用戶嘗試給予好評或接受正確的答案,幫助其他人在面臨同樣問題時得到正確的答案。 – 2012-07-15 20:30:44

回答

1

是否有意義?

Toast.makeText(null, "number: " + _number + " message: " + _message + " xtime: " + xtime, Toast.LENGTH_LONG).show(); 

你逝去的null代替Context改變它

Toast.makeText(Main.this , "number: " + _number + " message: " + _message + " xtime: " + xtime, Toast.LENGTH_LONG).show(); 
+0

更多閱讀此http://developer.android.com/guide/topics/ui/notifiers/toasts.html – 2012-07-15 20:18:53

+0

哦,是的,這是問題...謝謝 – dillonr 2012-07-15 20:25:06

+0

你也改變這一行也'吐司。 makeText(null,「發送的文本數量最終會到達這裏,也許在這些引號之後添加+ sentTexts?」,Toast.LENGTH_LONG).show();'? null與Main.this ?? – 2012-07-15 20:26:13

0

你在該行Toat.makeToast得到一個NullPointerException您發送null作爲第一個參數,在上下文應。

所有的跡象都指向同一個地方......

+0

是的,這是問題,謝謝 – dillonr 2012-07-15 20:26:47

1

您的logcat顯示此錯誤:

E/AndroidRuntime(29508): java.lang.NullPointerException 07-15 16:09:39.152: 

E/AndroidRuntime(29508): at android.widget.Toast.(Toast.java:89) 07-15 16:09:39.152:E/AndroidRuntime(29508): at android.widget.Toast.makeText(Toast.java:231) 07-15 16:09:39.152:

所以你的錯誤基本上是你通過一個空指針到您的Toast小部件和編譯器抱怨這個!在onPostExecute()方法

這個替換你的麪包:

sentTexts你類

Toast.makeText(Main.this, "number of texts sent will end up going here. maybe add" + sentTexts + "after these quotes?", Toast.LENGTH_LONG).show(); 
+0

我結束了使用 Toast.makeText(Main.this,「發送」+ sentTexts,Toast.LENGTH_LONG).show(); 我將如何去使它成爲一個全局變量? (我試過公共/私人/全球長期發送的文本) – dillonr 2012-07-15 20:40:58

+0

做什麼全球變量? – Ran 2012-07-15 20:51:21

+0

@Ran我想說的是將它作爲類中的屬性 – 2012-07-15 21:13:15