2016-09-13 3 views
0

私はコンテンツプロバイダを初めて使用しています。 ので、私はこのている:contentProviderとIDではなく名前で検索する

public class ContactsContentProvider extends ContentProvider { 

    private ContactsDatabaseHelper dbHelper; 
    private static final UriMatcher uriMatcher = 
      new UriMatcher(UriMatcher.NO_MATCH);  

    private static final int ONE_CONTACT = 1; 
    private static final int CONTACTS = 2; 
    private static final int CONTACT = 3; 
    static {  
     uriMatcher.addURI(ContactsDatabaseDescription.AUTHORITY, 
       Contact.TABLE_NAME + "/#", ONE_CONTACT); 
     uriMatcher.addURI(ContactsDatabaseDescription.AUTHORITY, 
       Contact.TABLE_NAME, CONTACTS); 
     uriMatcher.addURI(ContactsDatabaseDescription.AUTHORITY, 
       Contact.TABLE_NAME + "/*" , CONTACT); 
    } 

    @Override 
    public boolean onCreate() {  
     dbHelper = new ContactsDatabaseHelper(getContext()); 
     return true; 
    }  

    @Override 
    public String getType(Uri uri) { 
     return null; 
    } 

    @Override 
    public Cursor query(Uri uri, String[] projection, 
         String selection, String[] selectionArgs, String sortOrder) {  
     SQLiteQueryBuilder queryBuilder = new SQLiteQueryBuilder(); 
     queryBuilder.setTables(Contact.TABLE_NAME); 

     switch (uriMatcher.match(uri)) { 
      case ONE_CONTACT: 
       queryBuilder.appendWhere(
         Contact._ID + "=" + uri.getLastPathSegment()); 
       break; 
      case CONTACTS: 
       break; 
      default: 
       throw new UnsupportedOperationException(
         getContext().getString(R.string.invalid_query_uri) + uri); 
     }  

     Cursor cursor = queryBuilder.query(dbHelper.getReadableDatabase(), 
       projection, selection, selectionArgs, null, null, sortOrder);  

     cursor.setNotificationUri(getContext().getContentResolver(), uri); 
     return cursor; 
    } 

    // insert a new contact in the database 
    @Override 
    public Uri insert(Uri uri, ContentValues values) { 
     Uri newContactUri = null; 

     switch (uriMatcher.match(uri)) { 
      case CONTACTS: 
       // insert the new contact--success yields new contact's row id 
       long rowId = dbHelper.getWritableDatabase().insert(
         Contact.TABLE_NAME, null, values);  

       if (rowId > 0) { 
        newContactUri = Contact.buildContactUri(rowId); 


        getContext().getContentResolver().notifyChange(uri, null); 
       } 
       else 
        throw new SQLException(
          getContext().getString(R.string.insert_failed) + uri); 
       break; 
      default: 
       throw new UnsupportedOperationException(
         getContext().getString(R.string.invalid_insert_uri) + uri); 
     } 

     return newContactUri; 
    }  

    @Override 
    public int update(Uri uri, ContentValues values, 
         String selection, String[] selectionArgs) { 
     int numberOfRowsUpdated; // 1 if update successful; 0 otherwise 

     switch (uriMatcher.match(uri)) { 
      case ONE_CONTACT: 

       String id = uri.getLastPathSegment();  

       numberOfRowsUpdated = dbHelper.getWritableDatabase().update(
         Contact.TABLE_NAME, values, Contact._ID + "=" + id, 
         selectionArgs); 
       break; 
      default: 
       throw new UnsupportedOperationException(
         getContext().getString(R.string.invalid_update_uri) + uri); 
     } 

     if (numberOfRowsUpdated != 0) { 
      getContext().getContentResolver().notifyChange(uri, null); 
     } 

     return numberOfRowsUpdated; 
    }  

    @Override 
    public int delete(Uri uri, String selection, String[] selectionArgs) { 
     int numberOfRowsDeleted; 

     switch (uriMatcher.match(uri)) { 
      case ONE_CONTACT: 

       String id = uri.getLastPathSegment();  

       numberOfRowsDeleted = dbHelper.getWritableDatabase().delete(
         Contact.TABLE_NAME, Contact._ID + "=" + id, selectionArgs); 
       break; 
      default: 
       throw new UnsupportedOperationException(
         getContext().getString(R.string.invalid_delete_uri) + uri); 
     }  

     if (numberOfRowsDeleted != 0) { 
      getContext().getContentResolver().notifyChange(uri, null); 
     } 

     return numberOfRowsDeleted; 
    } 
} 

私のデータベースは

public class ContactsDatabaseDescription { 
    public static final String AUTHORITY = 
      "com.example.afran.bdcontacts.data";  

    private static final Uri BASE_CONTENT_URI = 
      Uri.parse("content://" + AUTHORITY); 
     public static final class Contact implements BaseColumns { 
      public static final String TABLE_NAME = "contacts"; // table's name 
      public static final Uri CONTENT_URI = 
        BASE_CONTENT_URI.buildUpon().appendPath(TABLE_NAME).build(); 

      public static final String COLUMN_FIRST_NAME = "firstName"; 
      public static final String COLUMN_LAST_NAME = "lastName"; 
      public static final String COLUMN_EMAIL = "email"; 
      public static final String COLUMN_TYPE = "type"; 

     public static Uri buildContactUri(long id) { 
      return ContentUris.withAppendedId(CONTENT_URI, id); 
     } 
    } 
} 

この断片である私は1人の姓(検索)を読んで、私は連絡先を見つけたいと私はどのように

分かりません
public class DetailFragment extends Fragment 
     implements LoaderManager.LoaderCallbacks<Cursor> {  

    public interface DetailFragmentListener { 
     void onContactDeleted(); 
     void onEditContact(Uri contactUri); 
    } 

    private static final int CONTACT_LOADER = 0; 

    private DetailFragmentListener listener; 
    private Uri contactUri; 

    private TextView prenomTextView; 
    private TextView nomTextView; 
    private TextView emailTextView; 
    private TextView typeTextView;  

    @Override 
    public void onAttach(Context context) { 
     super.onAttach(context); 
     listener = (DetailFragmentListener) context; 
    } 

    @Override 
    public void onDetach() { 
     super.onDetach(); 
     listener = null; 
    } 

    @Override 
    public View onCreateView(
      LayoutInflater inflater, ViewGroup container, 
      Bundle savedInstanceState) { 
     super.onCreateView(inflater, container, savedInstanceState); 
     setHasOptionsMenu(true);  

     Bundle arguments = getArguments(); 

     if (arguments != null) 
      contactUri = arguments.getParcelable(MainActivity.CONTACT_URI);  

     View view = 
       inflater.inflate(R.layout.fragment_detail, container, false);  

     prenomTextView = (TextView) view.findViewById(R.id.firstNameTextView); 
     nomTextView = (TextView) view.findViewById(R.id.lastNameTextView); 
     emailTextView = (TextView) view.findViewById(R.id.emailTextView); 
     typeTextView = (TextView) view.findViewById(R.id.typeTextView); 

     getLoaderManager().initLoader(CONTACT_LOADER, null, this); 
     return view; 
    }  

    @Override 
    public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { 
     super.onCreateOptionsMenu(menu, inflater); 
     inflater.inflate(R.menu.menu_main, menu); 
    }  

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     switch (item.getItemId()) { 
      case R.id.action_edit: 
       listener.onEditContact(contactUri); 
       return true; 
      case R.id.action_delete: 
       deleteContact(); 
       return true; 
      case R.id.action_search:  
       searchContact(); 
       return true; 
     } 

     return super.onOptionsItemSelected(item); 
    } 

    private void searchContact() { 
     final EditText input = new EditText(getContext()); 

     final AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); 
     builder.setTitle(R.string.menuitem_recherche); 
     builder.setMessage(R.string.label_lastName); 
     builder.setView(input); 

     builder.setPositiveButton(R.string.button_ok, new DialogInterface.OnClickListener() { 
      @Override 
      public void onClick(DialogInterface dialog, int whichButton) { 
       String value = input.getText().toString(); 

       return; 
      } 
     }); 
     builder.setNegativeButton(R.string.button_cancel, new DialogInterface.OnClickListener() { 

      public void onClick(DialogInterface dialog, int which) { 
       // TODO Auto-generated method stub 
       return; 
      } 
     }); 
     builder.create().show();  
    } 

    private void deleteContact() { 
     final AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); 
     builder.setTitle(R.string.confirm_title); 
     builder.setMessage(R.string.confirm_message); 
     builder.setPositiveButton(R.string.button_delete, new DialogInterface.OnClickListener() { 
       @Override 
       public void onClick(
         DialogInterface dialog, int button) {  

        getActivity().getContentResolver().delete(
          contactUri, null, null); 
        listener.onContactDeleted(); 
       } 
      } 
     ); 
     builder.setNegativeButton(R.string.button_cancel, null); 
     builder.create().show(); 
     } 


    @Override 
    public Loader<Cursor> onCreateLoader(int id, Bundle args) { 

     CursorLoader cursorLoader; 

     switch (id) { 
      case CONTACT_LOADER: 
       cursorLoader = new CursorLoader(getActivity(), 
         contactUri, 
         null, 
         null, 
         null, 
         null); 
       break; 
      default: 
       cursorLoader = null; 
       break; 
     } 

     return cursorLoader; 
    } 


    @Override 
    public void onLoadFinished(Loader<Cursor> loader, Cursor data) { 

     if (data != null && data.moveToFirst()) { 

      int firstIndex = data.getColumnIndex(ContactsDatabaseDescription.Contact.COLUMN_FIRST_NAME); 
      int lastIndex = data.getColumnIndex(ContactsDatabaseDescription.Contact.COLUMN_LAST_NAME); 
      int emailIndex = data.getColumnIndex(ContactsDatabaseDescription.Contact.COLUMN_EMAIL); 
      int typeIndex = data.getColumnIndex(ContactsDatabaseDescription.Contact.COLUMN_TYPE); 

      prenomTextView.setText(data.getString(firstIndex)); 
      nomTextView.setText(data.getString(lastIndex)); 
      emailTextView.setText(data.getString(emailIndex)); 
      typeTextView.setText(data.getString(typeIndex));  
     } 
    }  

    @Override 
    public void onLoaderReset(Loader<Cursor> loader) { } 
} 

答えて

0

テーブル内の任意の列の一致を検索するのは簡単です。クエリのcontentUri、whereおよびwhereArgsパラメータが必要です。 Uriがテーブル全体を指していることを確認してください。 "first_name"と "surname"という名前の列をfirstNameとsurnameというStringと照合したいと仮定します。

String where = "first_name =? and surname =?"; 
String[] whereArgs = {firstName, surname}; 

さらに複雑なクエリを作成するには、かっこと "and"を使用できます。数値フィールドでは>と<などを使用できます。WhereArgsには "?"

関連する問題