2015-11-19 47 views
-1

我是Android新手。我想在onLocationChanged方法中顯示Toast或Snackbar,但是我在此方法中獲取了NullPointerException。我該如何解決這個問題?在上下文的onLocationChanged方法中獲取空指針

private void displayTost(Location location) 
{ 
    Toast.makeText(getBaseContext(),"Location changed......",Toast.LENGTH_LONG).show(); 
} 

日誌輸出:

java.lang.NullPointerException 
11-19 12:43:35.944 23614-23614/com.vaidya.prasad.bumpd E/AndroidRuntime:  at android.content.ContextWrapper.getPackageName(ContextWrapper.java:135) 
11-19 12:43:35.944 23614-23614/com.vaidya.prasad.bumpd E/AndroidRuntime:  at android.content.ComponentName.<init>(ComponentName.java:77) 
11-19 12:43:35.944 23614-23614/com.vaidya.prasad.bumpd E/AndroidRuntime:  at android.content.Intent.<init>(Intent.java:4044) 
11-19 12:43:35.944 23614-23614/com.vaidya.prasad.bumpd E/AndroidRuntime:  at com.vaidya.prasad.bumpd.activities.BumpdActivity.displayTost(BumpdActivity.java:323) 
11-19 12:43:35.944 23614-23614/com.vaidya.prasad.bumpd E/AndroidRuntime:  at com.vaidya.prasad.bumpd.activities.BumpdActivity.onLocationChanged(BumpdActivity.java:282) 
11-19 12:43:35.944 23614-23614/com.vaidya.prasad.bumpd E/AndroidRuntime:  at android.location.LocationManager$ListenerTransport._handleMessage(LocationManager.java:279) 
11-19 12:43:35.944 23614-23614/com.vaidya.prasad.bumpd E/AndroidRuntime:  at android.location.LocationManager$ListenerTransport.access$000(LocationManager.java:208) 
11-19 12:43:35.944 23614-23614/com.vaidya.prasad.bumpd E/AndroidRuntime:  at android.location.LocationManager$ListenerTransport$1.handleMessage(LocationManager.java:224) 
11-19 12:43:35.944 23614-23614/com.vaidya.prasad.bumpd E/AndroidRuntime:  at android.os.Handler.dispatchMessage(Handler.java:110) 
11-19 12:43:35.944 23614-23614/com.vaidya.prasad.bumpd E/AndroidRuntime:  at android.os.Looper.loop(Looper.java:193) 
11-19 12:43:35.944 23614-23614/com.vaidya.prasad.bumpd E/AndroidRuntime:  at android.app.ActivityThread.main(ActivityThread.java:5292) 
11-19 12:43:35.944 23614-23614/com.vaidya.prasad.bumpd E/AndroidRuntime:  at java.lang.reflect.Method.invokeNative(Native Method) 
11-19 12:43:35.944 23614-23614/com.vaidya.prasad.bumpd E/AndroidRuntime:  at java.lang.reflect.Method.invoke(Method.java:515) 
11-19 12:43:35.944 23614-23614/com.vaidya.prasad.bumpd E/AndroidRuntime:  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:824) 
11-19 12:43:35.944 23614-23614/com.vaidya.prasad.bumpd E/AndroidRuntime:  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:640) 
11-19 12:43:35.944 23614-23614/com.vaidya.prasad.bumpd E/AndroidRuntime:  at dalvik.system.NativeStart.main(Native Method) 
+0

第一次正確發佈您的代碼和logcat。 –

回答

0

如果U嘗試獲取上下文()中的一類不延伸活動或appcompactactivity像回收視圖適配器類,然後只寫一個參數化建築工,其接受語境從類延伸活動的參數。 &然後通過創建它的對象只傳遞上下文到適配器類。 像下面的代碼public RVAdapter(Context contexts, List<quiz>quizList) { this.mContext = contexts; this.quizList=quizList; } & in activity just pass context as RVAdapter adapter=new RVAdapter(this,qw);

0

試試這個,

private void displayTost() { 
    Toast.makeText(getBaseContext(), "Location changed......", Toast.LENGTH_LONG).show(); 
} 

PS:交在你上面的方法使用Location location相關規範。

0

試試這個

Toast.makeText(getApplicationContext(),"Location changed......",Toast.LENGTH_LONG).show(); 

getApplicationContext() 返回當前進程的單一的全球應用對象的上下文。

1

您也可以嘗試使用監聽器的類名,只要它extends Activity implements LocationListener,從你的logcat的,我可以猜到活動名稱是BumpdActivity,那麼你爲什麼不試試下面一行..

Toast.makeText(BumpdActivity.this,"Location changed......",Toast.LENGTH_LONG).show(); 

如果不起作用,請分享你的課程..

+0

我會試試這個。它很容易閱讀,如果你在Activity(BumpdActivity)中調用'Toast.makeText',沒有理由使用'getApplicationContext()'或'getBaseContext()'。 – FlanschiFox

+0

我已經嘗試過getApplicationContext(),getBaseContext(),BumpedActivity.this。但沒有任何work.please試圖解決它 –

+0

你的類是否擴展Activity類? – aProgrammer

0

輸入你的名字點到這個上下文的位置或傳遞一個上下文參數。

private void displayTost(Context context, Location location) 
{ 
    Toast.makeText(context,"Location changed......",Toast.LENGTH_LONG).show(); 
}