I have a problem with my android app and I can not solve. My app uses SQLite as data base. The problem is that the query method into ContentProvider is never called. When my fragment is opened, nothing happens. Can anyone help me ? Thanks!
My fragment
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);
}
}
My 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;
}
}
Aucun commentaire:
Enregistrer un commentaire