1

編集:解決策は、トーストの null の代わりに Main.this を配置することでした。

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: キャッチされない例外で終了するスレッド (group=0x40019560) 07-15 16:09:39.152: E/AndroidRuntime(29508): 致命的な例外: メイン07-15 16:09:39.152: E/AndroidRuntime(29508): java.lang.NullPointerException 07-15 16:09:39.152: E/AndroidRuntime(29508): android.widget.Toast.(Toast.java:89) ) 07-15 16:09:39.152: E/AndroidRuntime(29508): android.widget.Toast.makeText(Toast.java:231) 07-15 16:09:39.152: E/AndroidRuntime(29508): com .dillonregi.spamsms.Main$1$1.run(Main.java:37) 07-15 16:09:39.152: E/AndroidRuntime(29508): android.os.Handler.handleCallback(Handler.java:587) で 07- 15 16:09:39.152: E/AndroidRuntime(29508): android.os.Handler.dispatchMessage(Handler.java:92) 07-15 16:09:39.152: E/AndroidRuntime(29508): android.os で。 Looper.loop(Looper.java:130) 07-15 16:09:39.152: E/AndroidRuntime(29508): android.app.ActivityThread.main(ActivityThread.java:3701) 07-15 16:09:39.152: E/AndroidRuntime(29508): at java.lang.reflect.Method.invokeNative(ネイティブ メソッド) 07-15 16:09:39.152: E/AndroidRuntime(29508): java.lang.reflect.Method.invoke(Method.java:507) 07-15 16 :09:39.152: E/AndroidRuntime(29508): 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): dalvik.system.NativeStart.main(ネイティブ メソッド) 07-15 16 :09:39.162: E/AndroidRuntime(29508): [Blue Error Handler] メイン 07-15 のデバッグ レポート ファイルを作成します 16:09:39.162: E/AndroidRuntime(29508): java.lang.NullPointerException 07-15 16:09:39.162: E/AndroidRuntime(29508): android.widget.Toast.(Toast.java:89) 07-15 16:09:39.162: E/AndroidRuntime(29508): android. widget.Toast.makeText(Toast.java:231) 07-15 16:09:39.162: E/AndroidRuntime(29508): com.dillonregi.spamsms.Main$1$1.run(Main.java:37) で 07-15 16:09:39.162: E/AndroidRuntime(29508): android.os.Handler.handleCallback(Handler.java:587) 07-15 16:09:39.162: E/AndroidRuntime(29508): android.os.Handler で.dispatchMessage(Handler.java:92) 07-15 16:09:39.162: E/AndroidRuntime(29508): android.os.Looper.loop(Looper.java:130) 07-15 16:09:39.162: E /AndroidRuntime(29508): android.app.ActivityThread.main(ActivityThread.java:3701) 07-15 16:09:39.162: E/AndroidRuntime(29508): java.lang.reflect.Method.invokeNative(Native Method) で) 07-15 16:09:39.162:E/AndroidRuntime(29508): java.lang.reflect.Method.invoke(Method.java:507) 07-15 16:09:39.162: E/AndroidRuntime(29508): com.android.internal.os.ZygoteInit で$MethodAndArgsCaller.run(ZygoteInit.java:895) 07-15 16:09:39.162: E/AndroidRuntime(29508): com.android.internal.os.ZygoteInit.main(ZygoteInit.java:653) 07-15 16 :09:39.162: E/AndroidRuntime(29508): dalvik.system.NativeStart.main(ネイティブメソッド)

4

3 に答える 3

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();
于 2012-07-15T20:17:27.710 に答える
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 ウィジェットに null ポインターを渡し、コンパイラーがこれについて不平を言うというエラーが発生します!!

メソッドで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();
于 2012-07-15T20:23:33.013 に答える
0

コンテキストがあるはずの最初のパラメーターとしてToat.makeToast送信する行で NullPointerException を取得しています。null

すべての標識は同じ場所を指している...

于 2012-07-15T20:17:35.183 に答える