2015-07-11 63 views
0

點擊一個按鈕我想發送短信到數據庫中獲得的數字在後臺。如果我直接點擊它,則直接撥打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() {} 


    } 

} 
+0

我不知道,你聲明vairable levelSelected和短信3次...,這是原因,在你的AsyncTask中,這兩個變量爲空 – rainash

+0

'String levelSelected' - > https://en.wikipedia.org/wiki/Variable_shadowing – njzk2

+0

check ans may this help u –

回答

0

你無法直接使用土司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; 

}