处理按钮和 EditText 以发送短信
Handling Button and EditText to Send an SMS
我想在我的 listView 中处理一个 EditText 和一个按钮来发送短信。
至此,用户输入了phone个数字。所以,我做了一个如下的适配器:
public class ListViewStudentWithDateAdapter extends ArrayAdapter<ListViewStudentWithDate> {
private Context mContext;
private ArrayList<ListViewStudentWithDate> mData;
private EditText Parent_Number ;
public ListViewStudentWithDateAdapter (Context mContext, ArrayList<ListViewStudentWithDate> mData)
{
super(mContext, R.layout.student_list_with_date_shape, mData);
this.mContext = mContext;
this.mData = mData;
}
public int getCount() {
return mData.size();
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(final int position, View convertView, ViewGroup parent)
{
if (convertView == null) {
LayoutInflater mInflater = (LayoutInflater)
mContext.getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
convertView = mInflater.inflate(R.layout.student_list_with_date_shape, null);
}
TextView Name = (TextView) convertView.findViewById(R.id.Name);
Name.setText(mData.get(position).getStudent_name());
TextView GRADE = (TextView) convertView.findViewById(R.id.GRADE_ID);
GRADE.setText(mData.get(position).getGrade_id());
TextView CLASS = (TextView) convertView.findViewById(R.id.CLASS_ID);
CLASS.setText(mData.get(position).getCLass_id());
Parent_Number = (EditText) convertView.findViewById(R.id.Father_number);
Button Send_Father = (Button) convertView.findViewById(R.id.Send_Father);
Send_Father.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Log.i("Send SMS", "");
String phoneNo = Parent_Number.getText().toString();
String sms = "HELLO World" ;
try {
// Get the default instance of the SmsManager
SmsManager smsManager = SmsManager.getDefault();
smsManager.sendTextMessage(phoneNo,
null,
sms,
null,
null);
Toast.makeText(getContext(), "Your sms has successfully sent!",
Toast.LENGTH_LONG).show();
} catch (Exception ex) {
Toast.makeText(getContext(),"Your sms has failed...",
Toast.LENGTH_LONG).show();
ex.printStackTrace();
}
}
});
return convertView;
}
}
它似乎不起作用,因为它总是给我失败消息。有什么想法吗??
检查您的清单以获得许可:
<uses-permission android:name="android.permission.SEND_SMS" />
我觉得你的phone号码是空的,调试一下
您很可能收到 IllegalArgumentException
,因为您传递给 sendTextMessage()
的号码是空的。 Parent_Number
是 class 成员,它将保留对调用 getView()
创建的最后一个实例的引用,这不一定是您当前可能正在编辑的实例。
您需要在Send_Father
Button
的标签上缓存Parent_Number
EditText
,并在onClick()
方法中检索它及其文本:
public View getView(final int position, View convertView, ViewGroup parent)
{
...
Parent_Number = (EditText) convertView.findViewById(R.id.Father_number);
Button Send_Father = (Button) convertView.findViewById(R.id.Send_Father);
Send_Father.setTag(Parent_Number);
Send_Father.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Log.i("Send SMS", "");
EditText parent = (EditText) view.getTag();
String phoneNo = parent.getText().toString();
String sms = "HELLO World" ;
try {
// Get the default instance of the SmsManager
SmsManager smsManager = SmsManager.getDefault();
smsManager.sendTextMessage(phoneNo,
null,
sms,
null,
null);
Toast.makeText(getContext(), "Your sms has successfully sent!",
Toast.LENGTH_LONG).show();
} catch (Exception ex) {
Toast.makeText(getContext(),"Your sms has failed...",
Toast.LENGTH_LONG).show();
ex.printStackTrace();
}
}
});
return convertView;
}
我想在我的 listView 中处理一个 EditText 和一个按钮来发送短信。 至此,用户输入了phone个数字。所以,我做了一个如下的适配器:
public class ListViewStudentWithDateAdapter extends ArrayAdapter<ListViewStudentWithDate> {
private Context mContext;
private ArrayList<ListViewStudentWithDate> mData;
private EditText Parent_Number ;
public ListViewStudentWithDateAdapter (Context mContext, ArrayList<ListViewStudentWithDate> mData)
{
super(mContext, R.layout.student_list_with_date_shape, mData);
this.mContext = mContext;
this.mData = mData;
}
public int getCount() {
return mData.size();
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(final int position, View convertView, ViewGroup parent)
{
if (convertView == null) {
LayoutInflater mInflater = (LayoutInflater)
mContext.getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
convertView = mInflater.inflate(R.layout.student_list_with_date_shape, null);
}
TextView Name = (TextView) convertView.findViewById(R.id.Name);
Name.setText(mData.get(position).getStudent_name());
TextView GRADE = (TextView) convertView.findViewById(R.id.GRADE_ID);
GRADE.setText(mData.get(position).getGrade_id());
TextView CLASS = (TextView) convertView.findViewById(R.id.CLASS_ID);
CLASS.setText(mData.get(position).getCLass_id());
Parent_Number = (EditText) convertView.findViewById(R.id.Father_number);
Button Send_Father = (Button) convertView.findViewById(R.id.Send_Father);
Send_Father.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Log.i("Send SMS", "");
String phoneNo = Parent_Number.getText().toString();
String sms = "HELLO World" ;
try {
// Get the default instance of the SmsManager
SmsManager smsManager = SmsManager.getDefault();
smsManager.sendTextMessage(phoneNo,
null,
sms,
null,
null);
Toast.makeText(getContext(), "Your sms has successfully sent!",
Toast.LENGTH_LONG).show();
} catch (Exception ex) {
Toast.makeText(getContext(),"Your sms has failed...",
Toast.LENGTH_LONG).show();
ex.printStackTrace();
}
}
});
return convertView;
}
}
它似乎不起作用,因为它总是给我失败消息。有什么想法吗??
检查您的清单以获得许可:
<uses-permission android:name="android.permission.SEND_SMS" />
我觉得你的phone号码是空的,调试一下
您很可能收到 IllegalArgumentException
,因为您传递给 sendTextMessage()
的号码是空的。 Parent_Number
是 class 成员,它将保留对调用 getView()
创建的最后一个实例的引用,这不一定是您当前可能正在编辑的实例。
您需要在Send_Father
Button
的标签上缓存Parent_Number
EditText
,并在onClick()
方法中检索它及其文本:
public View getView(final int position, View convertView, ViewGroup parent)
{
...
Parent_Number = (EditText) convertView.findViewById(R.id.Father_number);
Button Send_Father = (Button) convertView.findViewById(R.id.Send_Father);
Send_Father.setTag(Parent_Number);
Send_Father.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Log.i("Send SMS", "");
EditText parent = (EditText) view.getTag();
String phoneNo = parent.getText().toString();
String sms = "HELLO World" ;
try {
// Get the default instance of the SmsManager
SmsManager smsManager = SmsManager.getDefault();
smsManager.sendTextMessage(phoneNo,
null,
sms,
null,
null);
Toast.makeText(getContext(), "Your sms has successfully sent!",
Toast.LENGTH_LONG).show();
} catch (Exception ex) {
Toast.makeText(getContext(),"Your sms has failed...",
Toast.LENGTH_LONG).show();
ex.printStackTrace();
}
}
});
return convertView;
}