-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) Basically core_sms is an Activity, you should not use methods of activity in another Activity. Write this method in another class and pass variable accordingly. I am afraid this is because you are seeing this NPE.

2) you are writing class name "core_sms" with small first letter, while method name "EnviaSms" with capital first name, which is not following java naming conventions, though it is not related to this issue but should not give name in this way. I have no rights to suggest/ask you to read java basics, but still have some mercy on SO co-members by putting code text/Question in proper format.

于 2013-01-22T12:47:58.820 に答える