-2

我正在编写一个程序,该程序具有多个事物的核心类和允许使用不同参数调用核心函数的接口。Nulljava.lang.NullPointerException当我打电话时EnviaSms它给了我错误utilitariosprincipal

我的代码如下:

public class utilitariosprincipal extends Activity {
    String nom="", num="", mai="";

    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.utilitarios);

        interfacescontactos inte=new interfacescontactos();

        contactos cont = new contactos(); //class where contacts are defined
        num=inte.sel_num(cont.Meu); //this contains a String (telephone number)

        core_sms sm=new core_sms();

        try{
            sm.EnviaSms(num,"Experiência", false);
        }
        catch(Exception e) {
            Toast.makeText(this, e.getMessage()+e.toString(), Toast.LENGTH_LONG).show();
        }
    }

    public class core_sms extends Activity {
        private static final int TAMANHO_MAX_SMS = 160;
        private static final int PORTA_SMS = 8091;
        private static final String SMS_ENTREGUE = "SMS_DELIVERED";
        private static final String SMS_ENVIADO = "SMS_SENT";

        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.utilitarios);
        }

        public void EnviaSms(String ntelefone,String mensagem,boolean isBinary) {

            SmsManager gestor = SmsManager.getDefault();

            PendingIntent piEnvio = PendingIntent.getBroadcast(this, 0, new Intent(SMS_ENVIADO), 0);
            PendingIntent piEntregue = PendingIntent.getBroadcast(this, 0, new Intent(SMS_ENTREGUE), 0);

            if(isBinary) {
                byte[] dados = new byte[mensagem.length()];
                for(int indice=0; indice<mensagem.length() && indice < TAMANHO_MAX_SMS; ++indice) {
                    dados[indice] = (byte)mensagem.charAt(indice);
                }
                gestor.sendDataMessage(ntelefone, null, (short) PORTA_SMS, dados, piEnvio, piEntregue);
            } else {
                int length = mensagem.length();

                if(lengthTAMANHO_MAX_SMS) {
                    ArrayList<String> messagelist = gestor.divideMessage(mensagem);
                    gestor.sendMultipartTextMessage(ntelefone, null, messagelist, null, null);
                } else {
                    gestor.sendTextMessage(ntelefone, null, mensagem, piEnvio, piEntregue);
                }
            }
        }
    }
4

1 回答 1

3

1)基本上core_sms是一个Activity,你不应该在另一个Activity中使用activity的方法。将此方法写入另一个类并相应地传递变量。恐怕这是因为您正在看到此 NPE。

2)你用小写的第一个字母写类名“core_sms”,而用大写的名字写方法名“EnviaSms”,这不遵循java命名约定,虽然它与这个问题无关,但不应该以这种方式命名. 我无权建议/要求您阅读 Java 基础知识,但仍然可以通过将代码文本/问题以适当的格式放置来对 SO 共同成员有所怜悯。

于 2013-01-22T12:47:58.820 回答