0

Phonegap を使用して webview ベースの Android アプリケーションを作成しています。アプリケーションを支援するために、基本的にユーザーの場所を時々取得し、それを処理して保存するサービスを作成しました。

これが起こることです:

  1. アプリケーションを実行します - MainActivityをstartService()呼び出します。onCreate()アプリケーションには他のアクティビティはありません (今まで)。
  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」が与えられます。したがって、loadnull を返す場合は、nullreturn; と呼ばれる保存された :)を呼び出します

于 2013-03-28T11:51:14.397 に答える