Android - 方法设置其值

时间:2016-01-25 12:35:04

标签: android

我一直在努力解决这个问题,但这是非常持久的。我正在开发一个具有原生android SIP堆栈的SIP客户端,我使用了两个设备来运行它。第一个设备是android 5.0.2,第二个是android 4.3 IIRC。较新的版本运行应用程序非常好但是当我尝试运行旧版本时,寄存器方法总是失败,这表示我使用的变量为null,但是由于注册过程的第一件事是不可能的创建要使用的变量。以下是我使用的功能:

public void createProfile(String id, String pas, String ip){
    try {
        SipProfile.Builder build = new SipProfile.Builder(id, ip);
        build.setPassword(pas);
        profile = build.build();
    }catch (Exception e){
        e.printStackTrace();
        System.out.println("UNABLE TO CREATE PROFILE");
    }
}

public void openProfile(Context context){
    Intent i = new Intent();
    i.setAction("com.ta.SipTes.INCOMING_CALL");
    PendingIntent pi = PendingIntent.getBroadcast(context, 0, i, Intent.FILL_IN_DATA);
    try {
        manager.open(profile, pi, reglist);
    } catch (Exception e) {
        e.printStackTrace();
        System.out.println("UNABLE TO OPEN PROFILE");
    }
}

 public void registerProfile(){
    try{
        manager.register(profile, 30, reglist);
    }catch(Exception e){
        e.printStackTrace();
        System.out.println("UNABLE TO REGISTER PROFILE");
    }
}

这是我以前称之为

的方法
 public void register(String id, String pas, String dom){
    createProfile(id, pas, dom);
    openProfile(MainPage.this);
    registerProfile();
}

我在onPostExecute中使用了这个方法,如下所示:

public void onPostExecute(String stream){
        if (stream != null){
            id = tes;
            String pwd = "0";
            String adr = "192.168.5.5";
            register(id, pwd, adr);
            }
        }
    }

这是我得到的错误日志:

    01-25 19:32:51.194 25768-25789/com.ta.SipTes W/System.err: java.lang.NullPointerException
01-25 19:32:51.194 25768-25789/com.ta.SipTes W/System.err:     at com.ta.SipTes.MainPage.openProfile(MainPage.java:160)
01-25 19:32:51.194 25768-25789/com.ta.SipTes W/System.err:     at com.ta.SipTes.MainPage.register(MainPage.java:291)
01-25 19:32:51.194 25768-25789/com.ta.SipTes W/System.err:     at com.ta.SipTes.MainPage$Process.doInBackground(MainPage.java:377)
01-25 19:32:51.194 25768-25789/com.ta.SipTes W/System.err:     at com.ta.SipTes.MainPage$Process.doInBackground(MainPage.java:362)
01-25 19:32:51.194 25768-25789/com.ta.SipTes W/System.err:     at android.os.AsyncTask$2.call(AsyncTask.java:287)
01-25 19:32:51.194 25768-25789/com.ta.SipTes W/System.err:     at java.util.concurrent.FutureTask.run(FutureTask.java:234)
01-25 19:32:51.195 25768-25789/com.ta.SipTes W/System.err:     at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230)
01-25 19:32:51.195 25768-25789/com.ta.SipTes W/System.err:     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080)
01-25 19:32:51.195 25768-25789/com.ta.SipTes W/System.err:     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573)
01-25 19:32:51.195 25768-25789/com.ta.SipTes W/System.err:     at java.lang.Thread.run(Thread.java:838)
01-25 19:32:51.195 25768-25789/com.ta.SipTes I/System.out: UNABLE TO OPEN PROFILE
01-25 19:32:51.195 25768-25789/com.ta.SipTes W/System.err: java.lang.NullPointerException
01-25 19:32:51.196 25768-25789/com.ta.SipTes W/System.err:     at com.ta.SipTes.MainPage.registerProfile(MainPage.java:169)
01-25 19:32:51.196 25768-25789/com.ta.SipTes W/System.err:     at com.ta.SipTes.MainPage.register(MainPage.java:292)
01-25 19:32:51.196 25768-25789/com.ta.SipTes W/System.err:     at com.ta.SipTes.MainPage$Process.doInBackground(MainPage.java:377)
01-25 19:32:51.196 25768-25789/com.ta.SipTes W/System.err:     at com.ta.SipTes.MainPage$Process.doInBackground(MainPage.java:362)
01-25 19:32:51.196 25768-25789/com.ta.SipTes W/System.err:     at android.os.AsyncTask$2.call(AsyncTask.java:287)
01-25 19:32:51.197 25768-25789/com.ta.SipTes W/System.err:     at java.util.concurrent.FutureTask.run(FutureTask.java:234)
01-25 19:32:51.197 25768-25789/com.ta.SipTes W/System.err:     at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230)
01-25 19:32:51.197 25768-25789/com.ta.SipTes W/System.err:     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080)
01-25 19:32:51.197 25768-25789/com.ta.SipTes W/System.err:     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573)
01-25 19:32:51.197 25768-25789/com.ta.SipTes W/System.err:     at java.lang.Thread.run(Thread.java:838)
01-25 19:32:51.197 25768-25789/com.ta.SipTes I/System.out: UNABLE TO REGISTER PROFILE

知道为什么会这样吗?根植的旧设备也可能与它有关吗?

感谢您的回复

1 个答案:

答案 0 :(得分:0)

好吧,我觉得真的很蠢,原来我的4.0.3设备没有原生SIP堆栈,甚至不能用本机SIP堆栈进行VoIP通话,它仍然可以进行VoIP通话如果您的应用拥有SIP堆栈。

搜索了一段时间后,我发现SipManager可以使用isApiSupportedisVoipSupported来检查设备是否可以使用本机SIP堆栈。并且模拟器和android 4.0.3设备都返回false以进行检查,因此这就是为什么我一直得到空指针,因为设备没有使用本机SIP堆栈。

希望这可以成为某人的教训/建议,感谢您的回复