处理按钮和 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;
}