Android - 合约和提供商JOIN互动

时间:2014-10-30 03:48:29

标签: java android join android-contentprovider

我只是想了解Udacity Android课程中我的代码中发生了什么。

当我使用一种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

1 个答案:

答案 0 :(得分:0)

客观地说,这是我的问题的答案。

SQLiteQueryBuilder - &gt; setTables - &gt; http://developer.android.com/reference/android/database/sqlite/SQLiteQueryBuilder.html#setTables%28java.lang.String%29