Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/224.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android SIP堆栈:寄存器上的NullPointerException_Android_Sip - Fatal编程技术网

Android SIP堆栈:寄存器上的NullPointerException

Android SIP堆栈:寄存器上的NullPointerException,android,sip,Android,Sip,我一直在运行2.3.3的HTC Desire Z上编写代码,效果很好——现在我来另一台设备上测试它(运行2.3.4的Nexus One),结果它崩溃了。代码如下: if (me == null || sipManager == null || listener == null){ Log.e("OH","NO"); } sipManager.register(me, 30, listener); 我传递给sipManager.register的所有内容都不为null(从未调用日志),

我一直在运行2.3.3的HTC Desire Z上编写代码,效果很好——现在我来另一台设备上测试它(运行2.3.4的Nexus One),结果它崩溃了。代码如下:

if (me == null || sipManager == null || listener == null){
    Log.e("OH","NO");
}

sipManager.register(me, 30, listener);
我传递给sipManager.register的所有内容都不为null(从未调用日志),但下面是我的堆栈跟踪:

FATAL EXCEPTION: main
java.lang.RuntimeException: Unable to create service com.myapp.Service: java.lang.NullPointerException
    at android.app.ActivityThread.handleCreateService(ActivityThread.java:1955)
    at android.app.ActivityThread.access$2500(ActivityThread.java:117)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:985)
    at android.os.Handler.dispatchMessage(Handler.java:99)
    at android.os.Looper.loop(Looper.java:130)
    at android.app.ActivityThread.main(ActivityThread.java:3683)
    at java.lang.reflect.Method.invokeNative(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:507)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
    at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.NullPointerException
    at android.net.sip.SipManager.register(SipManager.java:474)
    at com.myapp.Service.onCreate(Service.java:159)
    at android.app.ActivityThread.handleCreateService(ActivityThread.java:1945)
    ... 10 more
查看Android源代码似乎也没有透露任何明显的信息——我传递给它的所有信息在另一台设备上都是有效的

两个设备都运行2.3+并且都启用了SIP堆栈:

if (SipManager.isVoipSupported(this) && SipManager.isApiSupported(this)){
编辑:

下面是一个完整的活动,它复制了这个问题:

public class SIPTest extends Activity {

    public SipManager sipManager = null;
    SipProfile me = null;

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


        if (SipManager.isVoipSupported(this) && SipManager.isApiSupported(this)){
            // SIP is supported, let's go!
            Log.e("SIP", "SUPPORTED");
            sipManager = SipManager.newInstance(this);


            String username = "username";
            String password = "password";
            String domain = "example.org";

            try {
                SipProfile.Builder builder = new SipProfile.Builder(username, domain);
                builder.setPassword(password);
                builder.setDisplayName(username);
                builder.setProfileName(username + "@" + domain);
                me = builder.build();

                sipManager.register(me, 30, new SipRegistrationListener() {
                        public void onRegistering(String localProfileUri) {
                            Log.e("SIP","Registering with SIP Server...");
                        }

                        public void onRegistrationDone(String localProfileUri, long expiryTime) {
                            Log.e("SIP","Ready!");
                        }

                        public void onRegistrationFailed(String localProfileUri, int errorCode,
                                String errorMessage) {
                            Log.e("SIP","Registration failed. " + errorMessage + " ("+errorCode+") - " + localProfileUri);
                        }
                    });
            } catch (ParseException pe) {
                Log.e("SIP","Connection Error.");
            } catch (SipException se) {
                Log.e("SIP","Connection error.");
            }

        }

    }
}

问题列表中报告了与nexus one和SIP相关的类似问题:

我建议在此时进行调试,以监视设置ISipSession的参数。可能是由于系统配置的原因,其中一些设置不正确

供他人浏览的代码

以下是其他关注该问题的人的疑问行:

您只需放置sipManager.open(我);在执行sipManager.register()之前,需要创建新的sip会话


保重

android代码中似乎有一个bug

您可以从日志中看到,Sipsession试图调用
OnRegisteredDone
,但由于空指针而失败

我注意到sipsession中有很多空指针,这就是导致sipmanager中出现注册问题的原因

04-26 00:05:20.946:D/Dialapp(18910):活动SIPCallScreen:SipRegistrationListener\onRegisteringOne sip:105@192.168.1.1
04-26 00:05:20.946:D/Dialapp(18910):ActivitySIPCallScreen:updateStatus\String\Registered sip:105@192.168.1.1
04-26 00:05:20.946:W/SipSession(1937):onRegistrationDone()
04-26 00:05:20.946:W/SipSession(1937):java.lang.NullPointerException
04-26 00:05:20.946:W/SipSession(1937):在android.os.Parcel.readException(Parcel.java:1328)上 04-26 00:05:20.946:W/SipSession(1937):在android.os.Parcel.readException(Parcel.java:1276)上 04-26 00:05:20.946:W/SipSession(1937):在android.net.sip.ISipSessionListener$Stub$Proxy.onRegistrationDone(ISipSessionListener.java:416)
04-26 00:05:20.946:W/SipSession(1937):位于com.android.server.sip.SipSessionListenerProxy$10.run(SipSessionListenerProxy.java:173)
04-26 00:05:20.946:W/SipSession(1937):在java.lang.Thread.run(Thread.java:1027)上


我见过其他人提到,如果在服务中实例化,它也会在N1上崩溃,显然它在活动中工作得很好。谢谢。遗憾的是,情况似乎并非如此——我用一些示例代码编辑了我的答案。如果工作正常,您应该会收到身份验证错误(因为用户名:password@example.org不是有效的SIP帐户)。您确实拥有所有AndroidManifest权限吗?互联网和使用互联网。我可以通过电子邮件向您发送完整的项目?:)您是否有一个空的字符串构造函数,用于针对字符串的服务?