Phonegap を使用して webview ベースの Android アプリケーションを作成しています。アプリケーションを支援するために、基本的にユーザーの場所を時々取得し、それを処理して保存するサービスを作成しました。
これが起こることです:
- アプリケーションを実行します - MainActivityを
startService()
呼び出します。onCreate()
アプリケーションには他のアクティビティはありません (今まで)。 - サービスが実行され、アプリケーションが実行されます。これはすべて LogCat で確認できます。
- ここで、アプリケーションの最初の画面で戻るキーを押すと、アプリケーションが終了し、その結果、数秒後に 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;
}
}