我的Android应用程序有问题,我无法解决。我的应用程序使用SQLite作为数据库。问题是从不调用ContentProvider中的查询方法。当我的片段打开时,没有任何反应。谁能帮我 ?谢谢!
我的片段
public class MensagemListFragment extends Fragment implements LoaderManager.LoaderCallbacks<Cursor> {
RecyclerView recyclerView;
MensagemListAdapter adapter;
public MensagemListFragment() {
// Required empty public constructor
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
adapter = new MensagemListAdapter();
getLoaderManager().initLoader(0, null, this);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
// Inflate the layout for this fragment
final View v = inflater.inflate(R.layout.fragment_mensagem_list, container, false);
recyclerView = (RecyclerView) v.findViewById(R.id.mensagem_recycler);
recyclerView.setAdapter(adapter);
recyclerView.setHasFixedSize(true);
recyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));
return v;
}
@Override
public Loader<Cursor> onCreateLoader(int i, Bundle bundle) {
return new CursorLoader(getActivity(), MensagemProvider.CONTENT_URI, null, null, null, null);
}
@Override
public void onLoadFinished(Loader<Cursor> loader, Cursor cursor) {
adapter.swapCursor(cursor);
}
@Override
public void onLoaderReset(Loader<Cursor> loader) {
adapter.swapCursor(null);
}
}
我的ContentProvider
public class MensagemProvider extends ContentProvider {
private DBManager db;
// Database Columns
public static final String COLUMN_MENSAGEMID = "MENS_SQ_MENSAGEM";
public static final String COLUMN_CODIGO = "MENS_CD_CODIGO";
public static final String COLUMN_DE = "COLA_SQ_COLABORADOR_DE";
public static final String COLUMN_PARA = "COLA_SQ_COLABORADOR_PARA";
public static final String COLUMN_DATA_ENVIO = "MENS_DT_ENVIO";
public static final String COLUMN_SITUACAO = "MENS_IN_SITUACAO";
public static final String COLUMN_MENSAGEM = "MENS_TX_MENSAGEM";
public static final String COLUMN_APELIDO_REMETENTE = "USUA_DS_APELIDO_DE";
public static final String COLUMN_APELIDO_DESTINATARIO = "USUA_DS_APELIDO_PARA";
public static final String DATABASE_TABLE = "MENSAGEM";
// Content Provider Uri and Authority
public static final String AUTHORITY = "br.com.soma.provider.MensagemProvider";
public static final Uri CONTENT_URI = Uri.parse("content://" + AUTHORITY + "/mensagem");
// MIME types used for listing amantes or looking up a single amante
private static final String MENSAGENS_MIME_TYPE = ContentResolver.CURSOR_DIR_BASE_TYPE + "/vnd.br.com.soma.mensagens";
private static final String MENSAGEM_MIME_TYPE = ContentResolver.CURSOR_ITEM_BASE_TYPE + "/vnd.br.com.soma.mensagem";
// UriMatcher stuff
private static final int LIST_MENSAGEM = 0;
private static final int ITEM_MENSAGEM = 1;
private static final int LIST_CONVERSA = 2;
private static final UriMatcher URI_MATCHER = buildUriMatcher();
public static final String[] TABLE_COLUMNS = new String[]{
COLUMN_MENSAGEMID,
COLUMN_CODIGO,
COLUMN_DE,
COLUMN_PARA,
COLUMN_DATA_ENVIO,
COLUMN_SITUACAO,
COLUMN_MENSAGEM
};
public static final String TABLE_CREATE =
"create table " + DATABASE_TABLE + " (" +
COLUMN_MENSAGEMID + " integer primary key autoincrement, " +
COLUMN_CODIGO + " integer not null, " +
COLUMN_DE + " integer not null, " +
COLUMN_PARA + " integer not null, " +
COLUMN_DATA_ENVIO + " integer not null, " +
COLUMN_SITUACAO + " text not null, " +
COLUMN_MENSAGEM + " tex not null);";
@Override
public boolean onCreate() {
db = new DBManager(getContext());
return true;
}
/**
* Builds up a UriMatcher for search suggestion and shortcut refresh
* queries.
*/
private static UriMatcher buildUriMatcher() {
UriMatcher matcher = new UriMatcher(UriMatcher.NO_MATCH);
matcher.addURI(AUTHORITY, "mensagem", LIST_MENSAGEM);
matcher.addURI(AUTHORITY, "mensagem/conversa", LIST_CONVERSA);
matcher.addURI(AUTHORITY, "mensagem/#", ITEM_MENSAGEM);
return matcher;
}
/**
* This method is required in order to query the supported types.
*/
@Override
public String getType(Uri uri) {
switch (URI_MATCHER.match(uri)) {
case LIST_MENSAGEM:
return MENSAGENS_MIME_TYPE;
case LIST_CONVERSA:
return MENSAGENS_MIME_TYPE;
case ITEM_MENSAGEM:
return MENSAGEM_MIME_TYPE;
default:
throw new IllegalArgumentException("Unknown Uri: " + uri);
}
}
/**
* This method is called when someone wants to insert something
* into our content provider.
*/
@Override
public Uri insert(Uri uri, ContentValues values) {
}
/**
* This method is called when someone wants to update something
* in our content provider.
*/
@Override
public int update(Uri uri, ContentValues values, String ignored1,
return 0;
}
/**
* This method is called when someone wants to delete something
* from our content provider.
*/
@Override
public int delete(Uri uri, String ignored1, String[] ignored2) {
return 0;
}
/**
* This method is called when someone wants to read something from
* our content provider. We'll turn around and ask our database
* for the information, and then return it in a Cursor.
*/
@Override
public Cursor query(Uri uri, String[] ignored1, String selection, String[] selectionArgs, String sortOrder) {
String[] projection = new String[]{
COLUMN_MENSAGEMID,
COLUMN_CODIGO,
COLUMN_DE,
COLUMN_PARA,
COLUMN_DATA_ENVIO,
COLUMN_SITUACAO,
COLUMN_MENSAGEM};
Cursor c;
switch (URI_MATCHER.match(uri)) {
case LIST_MENSAGEM:
StringBuilder builder = new StringBuilder();
builder.append(" SELECT m1.*, ude.USUA_DS_APELIDO as USUA_DS_APELIDO_DE, upara.USUA_DS_APELIDO as USUA_DS_APELIDO_PARA ");
builder.append(" FROM MENSAGEM m1 ");
builder.append(" LEFT JOIN MENSAGEM m2 ON ");
builder.append(" ( ");
builder.append(" (m1.COLA_SQ_COLABORADOR_DE = m2.COLA_SQ_COLABORADOR_DE OR m1.COLA_SQ_COLABORADOR_DE = m2.COLA_SQ_COLABORADOR_PARA) ");
builder.append(" AND ");
builder.append(" (m1.COLA_SQ_COLABORADOR_PARA = m2.COLA_SQ_COLABORADOR_DE OR m1.COLA_SQ_COLABORADOR_PARA = m2.COLA_SQ_COLABORADOR_PARA) ");
builder.append(" AND ");
builder.append(" (m1.MENS_DT_ENVIO < m2.MENS_DT_ENVIO) ");
builder.append(" ) ");
builder.append(" INNER JOIN COLABORADOR cde ON (m1.COLA_SQ_COLABORADOR_DE = cde.COLA_SQ_COLABORADOR) ");
builder.append(" INNER JOIN COLABORADOR cpara ON (m1.COLA_SQ_COLABORADOR_PARA = cpara.COLA_SQ_COLABORADOR) ");
builder.append(" INNER JOIN USUARIO ude ON (cde.USUA_DS_CHAVE = ude.USUA_DS_CHAVE) ");
builder.append(" INNER JOIN USUARIO upara ON (cpara.USUA_DS_CHAVE = upara.USUA_DS_CHAVE) ");
builder.append(" WHERE m2.MENS_CD_CODIGO IS NULL ");
c = db.getReadableDatabase().rawQuery(builder.toString(), null);
break;
case LIST_CONVERSA:
c = db.getReadableDatabase().query(DATABASE_TABLE, projection, selection, selectionArgs, null, null, sortOrder);
break;
case ITEM_MENSAGEM:
c = db.getReadableDatabase().query(DATABASE_TABLE, projection, COLUMN_MENSAGEMID + "=?", new String[]{Long.toString(ContentUris.parseId(uri))}, null, null, null, null);
if (c.getCount() > 0) {
c.moveToFirst();
}
break;
default:
throw new IllegalArgumentException("Unknown Uri: " + uri);
}
c.setNotificationUri(getContext().getContentResolver(), uri);
return c;
}
}