2014-08-27 71 views
2

我试图创建一个SIP客户端从Android SIP演示参考。我创建了自己的类,但是当我尝试执行它时,我得到空指针异常。源代码是:创建SIP客户端的空指针异常

package com.example.sipclient; 
import java.text.ParseException; 
import android.net.sip.SipException; 
import android.net.sip.SipManager; 
import android.net.sip.SipProfile; 
import android.net.sip.SipRegistrationListener; 
import android.os.Bundle; 
import android.app.Activity; 
import android.app.PendingIntent; 
import android.content.Intent; 
import android.view.Menu; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.Button; 
import android.widget.EditText; 
import android.widget.Toast; 

public class MainActivity extends Activity{ 

EditText etUsername,etPassword,etIP; 
Button bProfileBuilder,bRegisterProfile,bCloseProfile; 

Intent intent = new Intent(); 
PendingIntent pendingIntent = null; 

public SipManager mSipManager = null; 
public SipProfile mSipProfile = null; 
SipProfile.Builder builder = null; 

boolean build=false,register=false,close=false; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    //Instantiate SIP Manager 
    fSipInstantiate(); 

    etUsername = (EditText)findViewById(R.id.username); 
    etPassword = (EditText)findViewById(R.id.password); 
    etIP = (EditText)findViewById(R.id.ip); 

    etUsername.setText("abhinav"); 
    etPassword.setText("abhinav"); 
    etIP.setText("192.168.0.1"); 

    bProfileBuilder = (Button)findViewById(R.id.buildProfile); 
    bRegisterProfile = (Button)findViewById(R.id.registerProfile); 
    bCloseProfile = (Button)findViewById(R.id.closeProfile); 

    bProfileBuilder.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      //Build SIP Profile 
      fSipProfileBuild(); 
      build=true; 
     } 
    }); 

    bRegisterProfile.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      //Register SIP Profile to server 
      if(build=true) 
      { 
       fSipRegister(); 
       register=true; 
       close=false; 
      } 
      else 
       genToast("Build Profile First"); 
     } 
    }); 

    bCloseProfile.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      //Close SIP Profile 
      if(register==true) 
      { 
       fSipProfileClose(); 
       close=true; 
       register=false; 
       genToast("Profile Closed Successfully"); 
      } 
      else 
       genToast("Profile Already Closed"); 
     } 
    }); 
} 

public void fSipInstantiate(){ 
    if(mSipManager == null){ 
     mSipManager = SipManager.newInstance(this); 
     genToast("Instantiate Successful"); 
     return; 
    } 
    genToast("Instantiate Failed"); 
    return; 
} 

public void fSipProfileBuild(){ 
    try { 
     builder = new SipProfile.Builder(etUsername.getText().toString(),etIP.getText().toString()); 
     builder.setPassword(etPassword.getText().toString()); 
     mSipProfile = builder.build(); 
     genToast("Profile Build Successful"); 
    } catch (ParseException e) { 
     genToast("Profile Build Failed"); 
     e.printStackTrace(); 
    } 
    fSetIntentFilter(); 
    return; 
} 

public void fSetIntentFilter(){ 
    //Set Up an Intent filter to recieve calls 
    try { 
     intent.setAction("android.SipDemo.INCOMING_CALL"); 
     pendingIntent = PendingIntent.getBroadcast(getApplicationContext(), 0, intent, Intent.FILL_IN_DATA); 
     mSipManager.open(mSipProfile,pendingIntent,null); 
     genToast("Intent Filter Set"); 
    }catch (SipException e) { 
     // TODO Auto-generated catch block 
     genToast("Intent Filter failed"); 
     e.printStackTrace(); 
    } 
    return; 
} 

public void fSipRegister(){ 
    try { 
     mSipManager.setRegistrationListener(mSipProfile.getUriString(), new SipRegistrationListener() { 

      @Override 
      public void onRegistrationFailed(String localProfileUri, int errorCode, 
        String errorMessage) { 
       bRegisterProfile.setText("Failed"); 
      } 

      @Override 
      public void onRegistrationDone(String localProfileUri, long expiryTime) { 
       bRegisterProfile.setText("Ready"); 
      } 

      @Override 
      public void onRegistering(String localProfileUri) { 
       bRegisterProfile.setText("Registering"); 
      } 
     }); 
    } catch (SipException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
} 

public void fSipProfileClose() { 
    if (mSipManager == null) { 
     return; 
    } 
    try { 
     if (mSipProfile != null) { 
      mSipManager.close(mSipProfile.getUriString()); 
      genToast("Profile Closed Successfully"); 
      bRegisterProfile.setText("Register Profile"); 
     } 
    } catch (Exception ee) { 
     genToast("Failed to Close Profile"); 
    } 
} 

public void genToast(String TText){ 
    Toast toast = Toast.makeText(getApplicationContext(), TText, Toast.LENGTH_SHORT); 
    toast.show(); 
    return; 
} 

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    // Inflate the menu; this adds items to the action bar if it is present. 
    getMenuInflater().inflate(R.menu.main, menu); 
    return true; 
} 

} 

在这里,按下按钮“bProfileBuilder”,我得到一个空指针异常。当我按下按钮“bRegisterProfile”时,会发生同样的事情。我似乎无法弄清楚什么是错的。 StackTrace显示:

08-28 03:28:58.756: W/dalvikvm(21034): threadid=1: thread exiting with uncaught exception (group=0x41b139a8) 
08-28 03:28:58.791: E/AndroidRuntime(21034): FATAL EXCEPTION: main 
08-28 03:28:58.791: E/AndroidRuntime(21034): java.lang.NullPointerException 
08-28 03:28:58.791: E/AndroidRuntime(21034): at com.example.sipclient.MainActivity.fSetIntentFilter(MainActivity.java:127) 
08-28 03:28:58.791: E/AndroidRuntime(21034): at com.example.sipclient.MainActivity.fSipProfileBuild(MainActivity.java:118) 
08-28 03:28:58.791: E/AndroidRuntime(21034): at com.example.sipclient.MainActivity$1.onClick(MainActivity.java:59) 
08-28 03:28:58.791: E/AndroidRuntime(21034): at android.view.View.performClick(View.java:4212) 
08-28 03:28:58.791: E/AndroidRuntime(21034): at android.view.View$PerformClick.run(View.java:17476) 
08-28 03:28:58.791: E/AndroidRuntime(21034): at android.os.Handler.handleCallback(Handler.java:800) 
08-28 03:28:58.791: E/AndroidRuntime(21034): at android.os.Handler.dispatchMessage(Handler.java:100) 
08-28 03:28:58.791: E/AndroidRuntime(21034): at android.os.Looper.loop(Looper.java:194) 
08-28 03:28:58.791: E/AndroidRuntime(21034): at android.app.ActivityThread.main(ActivityThread.java:5371) 
08-28 03:28:58.791: E/AndroidRuntime(21034): at java.lang.reflect.Method.invokeNative(Native Method) 
08-28 03:28:58.791: E/AndroidRuntime(21034): at java.lang.reflect.Method.invoke(Method.java:525) 
08-28 03:28:58.791: E/AndroidRuntime(21034): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:833) 
08-28 03:28:58.791: E/AndroidRuntime(21034): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:600) 
08-28 03:28:58.791: E/AndroidRuntime(21034): at dalvik.system.NativeStart.main(Native Method) 

请帮助。

+0

转到第127行,你有什么在这一行? – Joseph 2014-08-27 23:07:05

回答

0

我不觉得这是造成空指针异常,但你有这在你的注册配置文件OnClickListener。

if(build=true) 
     { 
      fSipRegister(); 
      register=true; 
      close=false; 
     } 

我只是想指出,如果你错过了它。

你还试过在另一台设备上运行你的应用程序? mSipManager.open()的第三个参数是监听器,根据android参考(http://developer.android.com/reference/android/net/sip/SipManager.html),可以给它一个null值。

当我试用SipDemo代码时,除了一个Goggle Nexus 10.1以外,我能够在多个设备上运行它,因为它总是停在那条线上,并告诉我存在空指针异常。如果您尝试了其他设备上的应用,但我不确定问题可能出在哪里。