2017-07-15 45 views
0

下面是代碼異常沒有被handeled

@SuppressWarnings("MissingPermission") 
public static Location getLocation() throws LocationNotFoundException{ 
    mFusedLocationProviderClient.getLastLocation() 
      .addOnSuccessListener(myActivity, new OnSuccessListener<Location>() { 
       @Override 
       public void onSuccess(Location location) { 
        if(location!=null) { 
         mLocation = location; 
        } 
        else { 
         throw new LocationNotFoundException(); 
        } 
       } 
      }); 
    return mLocation; 
} 

現在有些線路,LocationNotFoundException是一個自定義異常,延長了Exception類。在我拋出自定義異常的行中,我收到一個錯誤消息,說明LocationNotFoundException未處理,即使我使用throws關鍵字讓異常沿着調用堆棧向下傳播,但我正在處理異常,調用特定的方法,使用try/catch塊。

這裏是我處理異常的地方。

try { 
     mLocation = LocationUtil.getLocation(); 

    } catch (LocationNotFoundException e) { 
     Toast.makeText(MainActivity.this, "Location Not found", Toast.LENGTH_LONG) 
       .show(); 
    } 

似乎無法弄清楚我在這裏做錯了什麼。希望有人能幫助我解決這個問題。

+0

檢查您的自定義LocationNotFoundException是否與具有相同名稱但不同包的另一個異常不衝突 – MatPag

+0

@MatPag不,似乎沒有異常名爲LocationNotFoundException –

回答

3

異常被引發到與您預期不同的範圍內。 它被拋出在匿名內部類的onSuccess方法的範圍內。 您不能從getLocation方法 傳播此異常,因爲在調用getLocation, 期間不會拋出異常,而是在實際使用成功偵聽器的較晚時間拋出異常。

另外請注意,通過OnSuccessListener接口的合同, 這個onSuccess方法不能拋出異常。 您需要在執行此方法時處理異常。

+0

感謝您指出它。 –

+0

@AshwinKumar如果這回答了你的問題,那麼也許你可以[標記爲接受](https://stackoverflow.com/help/someone-answers)。 – janos

0

這是因爲OnSuccessListener的onSuccess方法既沒有在throws部分聲明您的異常,也沒有在catch塊中處理它。這就是代碼無法編譯的原因。