Android-全局变量在方法设置其值后为空

Android-全局变量在方法设置其值后为空,android,Android,我一直在努力解决这个问题,但这是非常持久的。我正在开发一个带有本机android SIP堆栈的SIP客户端,我使用了两个设备来运行它。第一款是安卓5.0.2,第二款是安卓4.3 IIRC。较新的版本运行应用程序非常好,但当我尝试使用较旧的版本运行应用程序时,register方法总是失败,这表示我使用的变量为null,但这是不可能的,因为注册过程的第一件事是创建要使用的变量。以下是我使用的函数: public void createProfile(String id, String pas, St

我一直在努力解决这个问题,但这是非常持久的。我正在开发一个带有本机android SIP堆栈的SIP客户端,我使用了两个设备来运行它。第一款是安卓5.0.2,第二款是安卓4.3 IIRC。较新的版本运行应用程序非常好,但当我尝试使用较旧的版本运行应用程序时,register方法总是失败,这表示我使用的变量为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
知道为什么会这样吗?另外,被根化的旧设备是否与此有关


感谢您的回复

好吧,我觉得自己真的很蠢,原来我的4.0.3设备没有本机SIP堆栈,甚至无法使用本机SIP堆栈进行VoIP呼叫,如果您的应用程序拥有自己的SIP堆栈,它仍然可以进行VoIP呼叫

搜索一段时间后,我发现
SipManager
可以使用
isApiSupported
isVoipSupported
来检查设备是否可以使用本机SIP堆栈。emulator和android 4.0.3设备在检查时都返回false,因此我一直得到null指针,因为设备没有本机SIP堆栈可供使用


希望这对某人来说是一个教训/建议,感谢您的回答

我看不到扩展
异步任务的类
。在你做完那件事之后。您应该创建扩展
AsyncTask
类的类的对象。然后必须通过调用
execute()
方法来执行后台线程。之后,您可以通过调用
get()
方法从后台线程获取值。这里是我解决问题的一个链接:@superkytoz抱歉,我没有把它放在我的问题中,因为我没有问题,有一个类扩展了
AsyncTask
class,我在onCreate()上执行它。奇怪的是,在我的android 5.03中,所有的功能都运行得很好,但是在android 4.3中,注册功能不起作用,它只需要创建配置文件,但是该配置文件不能被打开和注册功能使用,我确实设置了这个配置文件,就像我上面的问题一样,我确实在create函数中设置了profile的值,但是open和register函数都表示profile为null,所以我尝试用模拟器运行我的应用程序,模拟器也会生成null指针,为什么会发生这种情况?