2012-07-15 3 views
1

편집 : 해결책은 내 토스트에서 null 대신 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(); } 
} 

그리고 로그 캣

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

내 대답을 참조하면 클래스의 속성으로, 당신은 유래에 새로운 사용자가 upvote에 나 정답을 수용하려고하다 다른 사람들이 똑같은 문제에 직면하면 올바른 대답을 얻을 수 있도록 도와줍니다. –

답변

1

는 의미가?

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

당신이 문맥이되어야합니다 첫 번째 매개 변수로 null을 보낼 곳

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 –

+0

아, 그게 문제였습니다 ... 감사합니다 – dillonr

+0

또한이 줄도 '토스트'로 변경했습니다. makeText (null, "보내진 텍스트의 수가 결국 여기에 오게됩니다. 따옴표 뒤에 + sentTexts를 추가할까요?", Toast.LENGTH_LONG) .show();'? Main.this와 함께 null ?? –

0

당신은 라인 Toat.makeToast에서 NullPointerException이 점점로 null 대신 변화를 Context의를 통과한다.

모든 징후가 같은 장소를 가리 ...

+0

네, 그게 문제였습니다. 덕분에 – dillonr

1

당신의 로그 캣 쇼이 오류 :

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:

그래서 오류가 기본적으로 당신은에 널 포인터를 통과하여 토스트 위젯과 컴파일러는 이것에 대해 불평합니다 !!

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, "Sent"+ sentTexts, Toast.LENGTH_LONG) .show(); 어떻게 전역 변수로 만들까요? (나는 public/private/global 긴 sentTexts를 시도했다) – dillonr

+0

무엇이 글로벌 변수인가? – Ran

+0

@Ran 클래스의 속성으로 말하려합니다. –

관련 문제