0

我正在使用 Phonegap 创建一个基于 webview 的 Android 应用程序。为了帮助应用程序,我创建了一个基本上不时获取用户位置并对其进行处理并保存的服务。

这就是发生的事情:

  1. 我运行应用程序 - 我startService()调用onCreate()了 MainActivity。应用程序中没有其他活动(直到现在)。
  2. 服务运行,应用程序运行。我可以在 LogCat 中看到所有这些。
  3. 现在,当我在应用程序的第一个屏幕上按返回键时,应用程序退出,结果在几秒钟后我看到 LogCat 中的堆栈跟踪和应用程序已停止的消息。错误是NullPointerException

我在以下指示行的方法中得到异常:

public void GetAvailableLocation(){
    vstore = new VariableStorage(); //Even when I assigned new object to vstore
    if(vstore.load("mobileNumber").equals("0")) // Exception occures here
        return;

    // Get all available providers
    List<String> providers = locationManager.getAllProviders();

    for(String provider: providers) {
        Location newLocation = locationManager.getLastKnownLocation(provider);
    if(isBetter(newLocation, locationListener.location) 
             && newLocation != null) {
             locationListener.location = newLocation;
         }
    }
}

上述方法是onCreate()服务中调用的第一个方法。

请帮我解决这个问题。

编辑:这是vstore中的加载方法-

public String load(String key){

    Log.d(TAG, "Load key: "+key);
    try{

        if(!loaded){
            this.loadFromFile();
        }

        String result = null;

        if(key.equals("loggedIn"))
            result = Boolean.toString(loggedIn);
        else if(key.equals("mobileNumber"))
            result = Long.toString(mobileNumber);
        else if(key.equals("password"))
            result = password;
        else if(key.equals("gettingService"))
            result = Boolean.toString(gettingService);
        else if(key.equals("providingService"))
            result = Boolean.toString(providingService);
        else if(key.equals("gettingServiceID"))
            result = Integer.toString(gettingServiceID);
        else if(key.equals("providingServiceTo"))
            result = Long.toString(providingServiceTo);
        else if(key.equals("usersName"))
            result = usersName;
        else if(key.equals("currLatitude"))
            result = Double.toString(currLatitude);
        else if(key.equals("currLongitude"))
            result = Double.toString(currLongitude);
        else if(key.equals("prevLatitude"))
            result = Double.toString(prevLatitude);
        else if(key.equals("prevLongitude"))
            result = Double.toString(prevLongitude);
        else if(key.equals("lastLocationUpdateTime"))
            result = Integer.toString(lastLocationUpdateTime);
        else if(key.equals("publicKey"))
            result = publicKey;
        else if(key.equals("notification"))
            result = Integer.toString(notification);
        else if(key.equals("verifyMobileNumber"))
            result = Long.toString(verifyMobileNumber);

        return result;
    }
    catch(Exception e){
        Log.d(TAG, "VSLoad Error: " + e.getMessage());
        return null;
    }
}
4

2 回答 2

1

确保 vstore.load("mobileNumber") 返回一些东西

或写类似:

if(vstore.load("mobileNumber") == null || vstore.load("mobileNumber").equals("0")) 
    return;
于 2013-03-28T11:50:10.917 回答
1

这是编写该条件的更好方法:

if("0".equals(vstore.load("mobileNumber")))

总是给出“0”。所以如果load返回null,你会调用return; 这被称为null saved :)

于 2013-03-28T11:51:14.397 回答