Null Java.lang.NullPointerException在其他类上调用方法

时间:2013-01-22 12:42:04

标签: java android

我正在编写一个程序,它包含几个用于调用具有不同参数的核心函数的东西和接口的核心类。当我在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);
                }
            }
        }
    }

1 个答案:

答案 0 :(得分:3)

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

2)您正在使用小写的第一个字母编写类名“core_sms”,而使用大写第一个名称的方法名称“EnviaSms”,它不遵循Java命名约定,尽管它与此问题无关但不应该给出名称通过这种方式。我没有权利建议/要求您阅读java基础知识,但仍然可以通过将代码文本/问题放入适当的格式来对SO共同成员表示一些怜悯。