我遇到空指针异常的问题,我试图在下面的代码中进行调试/解决。我试图初始化waypointCursor为空,我需要检查它是否等于null以后在代码中。尽管这样做是给了我一个NullPointerExeception。我需要帮助,试图解决它。以下是以下代码和详细信息。NullPointerException - Android中的数据库光标 - 解决方法
这里是调用方法的代码:
private void displayCursor(Cursor tracksCursor)
{
UnitsI18n mUnits;
mUnits = new UnitsI18n(this, new UnitsI18n.UnitsChangeListener()
{
@Override
public void onUnitsChange()
{
//Do Nothing
}
});
Log.i(TAG, "TRACKS CONTENT URI:"+Tracks.CONTENT_URI);
StatisticsCalculator stats = new StatisticsCalculator(this, mUnits, this);
//UNCOMMENT THIS ONCE I FIGURE OUT WHAT IS GOING ON
if (Tracks.CONTENT_URI != null) {
stats.updateCalculations(Tracks.CONTENT_URI);
//stats.updateCalculations(Uri.withAppendedPath(Tracks.CONTENT_URI, TRACKURI));
}
这里是StatisticsCalculator的代码,其中所述的NullPointerException正在发生的事情:
public void updateCalculations(Uri trackUri)
{
mStarttime = -1;
mEndtime = -1;
mMaxSpeed = 0;
mAverageActiveSpeed = 0;
mMaxAltitude = 0;
mMinAltitude = 0;
mAscension = 0;
mDistanceTraveled = 0f;
mDuration = 0;
long duration = 1;
double ascension = 0;
ContentResolver resolver = mContext.getContentResolver();
Cursor waypointsCursor = null;
try
{
waypointsCursor = resolver.query(
Uri.withAppendedPath(trackUri, "waypoints"),
new String[] { "max (" + Waypoints.TABLE + "." + Waypoints.SPEED + ")"
, "max (" + Waypoints.TABLE + "." + Waypoints.ALTITUDE + ")"
, "min (" + Waypoints.TABLE + "." + Waypoints.ALTITUDE + ")"
, "count(" + Waypoints.TABLE + "." + Waypoints._ID + ")" },
null, null, null);
if(waypointsCursor.moveToLast())
{
mMaxSpeed = waypointsCursor.getDouble(0);
mMaxAltitude = waypointsCursor.getDouble(1);
mMinAltitude = waypointsCursor.getDouble(2);
long nrWaypoints = waypointsCursor.getLong(3);
waypointsText = nrWaypoints + "";
}
waypointsCursor.close();
waypointsCursor = resolver.query(
Uri.withAppendedPath(trackUri, "waypoints"),
new String[] { "avg (" + Waypoints.TABLE + "." + Waypoints.SPEED + ")" },
Waypoints.TABLE + "." + Waypoints.SPEED +" > ?",
new String[] { ""+Constants.MIN_STATISTICS_SPEED },
null);
if(waypointsCursor.moveToLast())
{
mAverageActiveSpeed = waypointsCursor.getDouble(0);
}
}
finally
{
if(waypointsCursor != null)
{
waypointsCursor.close();
}
}
的代码在StatisticsCalculator类中的线(第75行)是这行代码:
if(waypointsCursor.moveToLast())
它不喜欢e在此行上将路点设置等于零:
Cursor waypointsCursor = null;
正好在上面的try语句上方。我确实需要将它设置为空,但是我可以检查此行上的waypointsCursor是否等于null: if(waypointsCursor!= null) 在finally语句中。
这里是logcat的输出:
04-12 18:29:16.795: I/OGT.TrackList(6115): TRACKS CONTENT URI:content://com.android.gpstracker/tracks
04-12 18:29:16.795: E/OGT.GPStrackingProvider(6115): Unable to come to an action in the query uri: content://com.android.gpstracker/tracks/waypoints
04-12 18:29:16.795: D/AndroidRuntime(6115): Shutting down VM
04-12 18:29:16.807: W/dalvikvm(6115): threadid=1: thread exiting with uncaught exception (group=0x40a71930)
04-12 18:29:16.915: E/AndroidRuntime(6115): FATAL EXCEPTION: main
04-12 18:29:16.915: E/AndroidRuntime(6115): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.android.gpstracker/com.polaris.epicriders.Rides.RidesActivity}: java.lang.NullPointerException
04-12 18:29:16.915: E/AndroidRuntime(6115): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2180)
04-12 18:29:16.915: E/AndroidRuntime(6115): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230)
04-12 18:29:16.915: E/AndroidRuntime(6115): at android.app.ActivityThread.access$600(ActivityThread.java:141)
04-12 18:29:16.915: E/AndroidRuntime(6115): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234)
04-12 18:29:16.915: E/AndroidRuntime(6115): at android.os.Handler.dispatchMessage(Handler.java:99)
04-12 18:29:16.915: E/AndroidRuntime(6115): at android.os.Looper.loop(Looper.java:137)
04-12 18:29:16.915: E/AndroidRuntime(6115): at android.app.ActivityThread.main(ActivityThread.java:5041)
04-12 18:29:16.915: E/AndroidRuntime(6115): at java.lang.reflect.Method.invokeNative(Native Method)
04-12 18:29:16.915: E/AndroidRuntime(6115): at java.lang.reflect.Method.invoke(Method.java:511)
04-12 18:29:16.915: E/AndroidRuntime(6115): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
04-12 18:29:16.915: E/AndroidRuntime(6115): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
04-12 18:29:16.915: E/AndroidRuntime(6115): at dalvik.system.NativeStart.main(Native Method)
04-12 18:29:16.915: E/AndroidRuntime(6115): Caused by: java.lang.NullPointerException
04-12 18:29:16.915: E/AndroidRuntime(6115): at com.android.gpstracker.actions.utils.StatisticsCalculator.updateCalculations(StatisticsCalculator.java:75)
04-12 18:29:16.915: E/AndroidRuntime(6115): at com.polaris.epicriders.Rides.RidesActivity.displayCursor(RidesActivity.java:901)
04-12 18:29:16.915: E/AndroidRuntime(6115): at com.polaris.epicriders.Rides.RidesActivity.displayIntent(RidesActivity.java:880)
04-12 18:29:16.915: E/AndroidRuntime(6115): at com.polaris.epicriders.Rides.RidesActivity.access$6(RidesActivity.java:832)
04-12 18:29:16.915: E/AndroidRuntime(6115): at com.polaris.epicriders.Rides.RidesActivity$8.onCheckedChanged(RidesActivity.java:198)
04-12 18:29:16.915: E/AndroidRuntime(6115): at android.widget.RadioGroup.setCheckedId(RadioGroup.java:174)
04-12 18:29:16.915: E/AndroidRuntime(6115): at android.widget.RadioGroup.access$600(RadioGroup.java:54)
04-12 18:29:16.915: E/AndroidRuntime(6115): at android.widget.RadioGroup$CheckedStateTracker.onCheckedChanged(RadioGroup.java:358)
04-12 18:29:16.915: E/AndroidRuntime(6115): at android.widget.CompoundButton.setChecked(CompoundButton.java:129)
04-12 18:29:16.915: E/AndroidRuntime(6115): at com.polaris.epicriders.Rides.RidesActivity.onCreate(RidesActivity.java:222)
04-12 18:29:16.915: E/AndroidRuntime(6115): at android.app.Activity.performCreate(Activity.java:5104)
04-12 18:29:16.915: E/AndroidRuntime(6115): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080)
04-12 18:29:16.915: E/AndroidRuntime(6115): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2144)
任何帮助,将不胜感激。
安置自己的ContentProvider的'查询之后()'方法,所以我们可以看到它为什么返回null。 – Sam
query()方法是属于Android SDK的ContentResolver类的一部分。 – user268397