2014-10-30 79 views
0

我只想了解Udacity Android课程中我的代码中发生了什么。Android - Contract and Provider JOIN交互

当我使用一种URI的JOIN语句的作品,但如果我使用另一种类型的URI JOIN不起作用,我不明白为什么。

1)当我加入它的工作原理:

String sortOrder = WeatherContract.WeatherEntry.COLUMN_DATETEXT + " ASC"; 
    mLocation = settings.getLocation(); 
    Uri weatherForLocationUri = WeatherContract.WeatherEntry.buildWeatherLocationWithDate(
      mLocation, DATE_KEY); 
    Log.e("URI_REQUISITE", weatherForLocationUri.toString()); 

    return new CursorLoader(
      getActivity(), 
      weatherForLocationUri, 
      new String[] { 
       WeatherContract.WeatherEntry.COLUMN_SHORT_DESC, 
       WeatherContract.WeatherEntry.COLUMN_MAX_TEMP, 
       WeatherContract.WeatherEntry.COLUMN_MIN_TEMP, 
       WeatherContract.WeatherEntry.COLUMN_HUMIDITY, 
       WeatherContract.WeatherEntry.COLUMN_WIND_SPEED, 
       WeatherContract.WeatherEntry.COLUMN_WEATHER_ID, 
       WeatherContract.WeatherEntry.COLUMN_PRESSURE, 
       WeatherContract.WeatherEntry.COLUMN_DEGREES, 
       WeatherContract.LocationEntry.COLUMN_LOCATION_SETTINGS // <- this row is the problem 
       //^ this row is the problem 
      }, 
      null, 
      null, 
      sortOrder 
    ); 

2-)当我加入它不起作用:

String sortOrder = WeatherContract.WeatherEntry.COLUMN_DATETEXT + " ASC"; 
    return new CursorLoader(
      getActivity(), 
      WeatherContract.LocationEntry.CONTENT_URI, 
      new String[] { 
       WeatherContract.WeatherEntry.COLUMN_SHORT_DESC, 
       WeatherContract.WeatherEntry.COLUMN_MAX_TEMP, 
       WeatherContract.WeatherEntry.COLUMN_MIN_TEMP, 
       WeatherContract.WeatherEntry.COLUMN_HUMIDITY, 
       WeatherContract.WeatherEntry.COLUMN_WIND_SPEED, 
       WeatherContract.WeatherEntry.COLUMN_WEATHER_ID, 
       WeatherContract.WeatherEntry.COLUMN_PRESSURE, 
       WeatherContract.WeatherEntry.COLUMN_DEGREES, 
       WeatherContract.LocationEntry.COLUMN_LOCATION_SETTINGS // <- this row is the problem 
       //^ this row is the problem 
      }, 
      WeatherEntry.COLUMN_DATETEXT+" = ?", 
      new String []{DATE_KEY}, 
      sortOrder 
    ); 

你可以看到WeatherContract.LocationEntry.COLUMN_LOCATION_SETTING在第二个例子中未找到和我的应用程序崩溃!

为什么在第一个示例中找到WeatherContract.LocationEntry.COLUMN_LOCATION_SETTING而在第二个示例中却不是?

为了方便,这是我WeatherContract和我WeatherProvider:

WeatherContract

WeatherProvider

回答