2013-01-22 119 views
-2

我正在編寫一個程序,它具有核心類的幾個事情和接口,允許使用不同參數調用核心函數。它給了我錯誤Nulljava.lang.NullPointerException當我打電話 utilitariosprincipalNulljava.lang.NullPointerException調用其他類的方法

我的代碼如下:

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); 
       } 
      } 
     } 
    } 
+0

core_sms是一項活動。您不應將其實例創建爲「core_sms sm = new core_sms();」 –

+0

如果你想使用它而不創建任何對象,則將該方法設置爲靜態。 – SilentKiller

回答

3

1)基本上core_sms是一種活動,你不應該使用活動的方法在另一個活動。將此方法寫入另一個類並相應地傳遞變量。恐怕這是因爲你看到了這個NPE。

2)您正在使用小首字母編寫類名「core_sms」,而使用大寫名的方法名「EnviaSms」,它不遵循java命名約定,儘管它與此問題無關,但不應該給這樣的名字。我沒有權利建議/要求你閱讀java基礎知識,但是仍然可以通過以適當的格式放置代碼文本/問題來對SO協作成員施加一些憐憫。