通过AsyncTask发送背景短信不起作用
问题描述:
点击一个按钮我想发送短信到数据库中获得的数字在后台。如果我直接点击它,则直接拨打SmsManager
即可。但通过AsyncTask
它不起作用。请帮助我。这里是我的代码..通过AsyncTask发送背景短信不起作用
public class SendSmsActivity extends Activity {
Button buttonSend;
EditText textPhoneNo;
Spinner level;
EditText textSMS;
private ArrayList studentInfo = new ArrayList();
private DatabaseHelper mHelper;
private SQLiteDatabase dataBase;
private String levelSelected,sms;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.send_sms);
buttonSend = (Button) findViewById(R.id.buttonSend);
level = (Spinner) findViewById(R.id.spinnersms);
textSMS = (EditText) findViewById(R.id.editTextSMS);
String levelSelected = level.getSelectedItem().toString();
String sms = textSMS.getText().toString();
buttonSend.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String levelSelected = level.getSelectedItem().toString();
String sms = textSMS.getText().toString();
//getphonenum(levelSelected, sms);
new MySmsTask().execute(levelSelected, sms);
}
});
}
private void getphonenum(String levelSelected, String sms){
mHelper = new DatabaseHelper(this);
dataBase = mHelper.getWritableDatabase();
Cursor mCursor = dataBase.rawQuery("SELECT Phone FROM student where level= '" + levelSelected + "'", null);
studentInfo.clear();
if (mCursor.moveToLast()) {
do {
String phoneNumber = (mCursor.getString(mCursor.getColumnIndex(DatabaseHelper.Phone)));
Log.d("DEBUG", phoneNumber);
try {
SmsManager smsManager = SmsManager.getDefault();
smsManager.sendTextMessage(phoneNumber, null, sms, null, null);
Toast.makeText(getApplicationContext(), "SMS Sent!",
Toast.LENGTH_LONG).show();
} catch (Exception e) {
Toast.makeText(getApplicationContext(),
"SMS faild, please try again later!",
Toast.LENGTH_LONG).show();
e.printStackTrace();
}
}
while (mCursor.moveToPrevious());
}
}
private class MySmsTask extends AsyncTask<String, String, Integer> {
@Override
protected Integer doInBackground(String... params) {
Toast.makeText(getBaseContext(), "Senescent " + params, Toast.LENGTH_SHORT).show();
getphonenum(levelSelected, sms);
return null;
}
@Override
protected void onPostExecute(Integer result) {
Toast.makeText(getBaseContext(), "Sent " + " messages", Toast.LENGTH_SHORT).show();
}
@Override
protected void onPreExecute() {}
}
}
答
你无法直接使用土司doInBackground 使用处理程序来显示敬酒消息可能这就是为什么出现问题。
请检查你的方法getphonenum(levelSelected,SMS)被调用或不
private Handler handler = new Handler();
@Override
protected Integer doInBackground(String... params) {
handler.post(new Runnable() {
@Override
public void run() {
try {
Toast.makeText(getBaseContext(), "Senescent " + params, Toast.LENGTH_SHORT).show();
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
});
getphonenum(levelSelected, sms);
return null;
}
我不知道,你声明vairable levelSelected和短信3次...,这是原因,在你的AsyncTask中,这两个变量为空 – rainash
'String levelSelected' - > https://en.wikipedia.org/wiki/Variable_shadowing – njzk2
check ans may this help u –