ERROR/AndroidRuntime(8484): java.lang.NoClassDefFoundError: com.android.providers.telephony.MmsSmsDatabaseHelper我把包导入了,一运行就报这个错。
是这样的,我的MyTest21类和包里的一个类一模一样,代码如下现在纳闷的是,问什么它的类就没问题,我的就有问题了?

解决方案 »

  1.   

    public class MyTest21 extends ContentProvider {
         private static final Uri NOTIFICATION_URI = Uri.parse("content://sms");
           private static final Uri ICC_URI = Uri.parse("content://sms/icc");
          static final String TABLE_SMS = "sms";
           private static final String TABLE_RAW = "raw";
          private static final String TABLE_SR_PENDING = "sr_pending";
          private static final Integer ONE = Integer.valueOf(1);
           private static final String[] CONTACT_QUERY_PROJECTION =
                   new String[] { Contacts.Phones.PERSON_ID };
           private static final int PERSON_ID_COLUMN = 0;
      
          /**
            * These are the columns that are available when reading SMS
            * messages from the ICC.  Columns whose names begin with "is_"
            * have either "true" or "false" as their values.
            */
           private final static String[] ICC_COLUMNS = new String[] { 
              "service_center_address",       // getServiceCenterAddress
               "address",                      // getDisplayOriginatingAddress
               "message_class",                // getMessageClass
               "body",                         // getDisplayMessageBody
               "date",                         // getTimestampMillis
               "status",                       // getStatusOnIcc
              "index_on_icc",                 // getIndexOnIcc
               "is_status_report",             // isStatusReportMessage
               "transport_type",               // Always "sms".
             "type",                         // Always MESSAGE_TYPE_ALL.
               "locked"                        // Always 0 (false).
           };
       
           @Override
           public boolean onCreate() {
         Log.e(TAG, "@@@@@@@@@@@@@@@" );
               mOpenHelper = MmsSmsDatabaseHelper.getInstance(getContext());
               Log.e(TAG, "#####" );
               return true;
           }
       
           @Override
           public Cursor query(Uri url, String[] projectionIn, String selection,
                   String[] selectionArgs, String sort) {
          } 
          @Override
          public Uri insert(Uri url, ContentValues initialValues) {
              ContentValues values;
              long rowID;
              int type = Sms.MESSAGE_TYPE_ALL;
      
              int match = sURLMatcher.match(url);
              String table = TABLE_SMS;
      
              switch (match) {
                  case SMS_ALL:
                      Integer typeObj = initialValues.getAsInteger(Sms.TYPE);
                      if (typeObj != null) {
                          type = typeObj.intValue();
                      } else {
                          // default to inbox
                          type = Sms.MESSAGE_TYPE_INBOX;
                      }
                      break;
      
                  case SMS_INBOX:
                      type = Sms.MESSAGE_TYPE_INBOX;
                      break;
      
                  case SMS_FAILED:
                      type = Sms.MESSAGE_TYPE_FAILED;
                      break;
      
                  case SMS_QUEUED:
                      type = Sms.MESSAGE_TYPE_QUEUED;
                      break;
      
                  case SMS_SENT:
                      type = Sms.MESSAGE_TYPE_SENT;
                      break;
      
                 case SMS_DRAFT:
                     type = Sms.MESSAGE_TYPE_DRAFT;
                    break;
      
                 case SMS_OUTBOX:
                      type = Sms.MESSAGE_TYPE_OUTBOX;
                      break;
      
                  case SMS_RAW_MESSAGE:
                      table = "raw";
                      break;
      
                  case SMS_STATUS_PENDING:
                      table = "sr_pending";
                      break;
      
                  case SMS_ATTACHMENT:
                      table = "attachments";
                      break;
      
                  case SMS_NEW_THREAD_ID:
                      table = "canonical_addresses";
                      break;
                  case SMS_ALL_ICC:
                   Log.e(TAG, "Invalid ###  request: " + url);
                   break;
                  default:
                      Log.e(TAG, "Invalid request: " + url);
                      return null;
              }
      
              SQLiteDatabase db = mOpenHelper.getWritableDatabase();
      
              if (table.equals(TABLE_SMS)) {
                  boolean addDate = false;
                  boolean addType = false;
     
                  // Make sure that the date and type are set
                  if (initialValues == null) {
                      values = new ContentValues(1);
                      addDate = true;
                      addType = true;
                  } else {
                      values = new ContentValues(initialValues);
      
                      if (!initialValues.containsKey(Sms.DATE)) {
                          addDate = true;
                      }
      
                      if (!initialValues.containsKey(Sms.TYPE)) {
                          addType = true;
                      }
                  }
      
                  if (addDate) {
                      values.put(Sms.DATE, new Long(System.currentTimeMillis()));
                  }
      
                  if (addType && (type != Sms.MESSAGE_TYPE_ALL)) {
                      values.put(Sms.TYPE, Integer.valueOf(type));
                  }
      
                  // thread_id
                  Long threadId = values.getAsLong(Sms.THREAD_ID);
                  String address = values.getAsString(Sms.ADDRESS);
      
                  if (((threadId == null) || (threadId == 0)) && (address != null)) {
                      values.put(Sms.THREAD_ID, Threads.getOrCreateThreadId(
                                         getContext(), address));
                  } 
                  if (values.getAsInteger(Sms.TYPE) == Sms.MESSAGE_TYPE_DRAFT) {
                      db.delete(TABLE_SMS, "thread_id=? AND type=?",
                              new String[] { values.getAsString(Sms.THREAD_ID),
                                             Integer.toString(Sms.MESSAGE_TYPE_DRAFT) });
                  }
      
                  if (type == Sms.MESSAGE_TYPE_INBOX) {
                      // Look up the person if not already filled in.
                      if ((values.getAsLong(Sms.PERSON) == null) && (!TextUtils.isEmpty(address))) {
                          Cursor cursor = null;
                         Uri uri = Uri.withAppendedPath(Contacts.Phones.CONTENT_FILTER_URL,
                                  Uri.encode(address));
                          try {
                              cursor = getContext().getContentResolver().query(
                                      uri,
                                      CONTACT_QUERY_PROJECTION,
                                      null, null, null);
      
                              if (cursor.moveToFirst()) {
                                  Long id = Long.valueOf(cursor.getLong(PERSON_ID_COLUMN));
                                  values.put(Sms.PERSON, id);
                              }
                          } catch (Exception ex) {
                              Log.e(TAG, "insert: query contact uri " + uri + " caught ", ex);
                          } finally {
                              if (cursor != null) {
                                  cursor.close();
                              }
                          }
                      }
                  } else {
                      // Mark all non-inbox messages read.
                     values.put(Sms.READ, ONE);
                  }
              } else {
                  if (initialValues == null) {
                      values = new ContentValues(1);
                  } else {
                      values = initialValues;
                  }
             }
     
              rowID = db.insert(table, "body", values);
              if (rowID > 0) {
                  Uri uri = Uri.parse("content://" + table + "/" + rowID);
      
                  if (Log.isLoggable(TAG, Log.VERBOSE)) {
                      Log.d(TAG, "insert " + uri + " succeeded");
                  }
                  notifyChange(uri);
                  return uri;
              } else {
                  Log.e(TAG,"insert: failed! " + values.toString());
              }
      
              return null;
          }
      
          @Override
          public int delete(Uri url, String where, String[] whereArgs) {
              int count; 
              return count;
          }
      
         /**
           * Delete the message at index from ICC.  Return true iff
           * successful.
           */ 
          @Override
          public int update(Uri url, ContentValues values, String where, String[] whereArgs) {
              int count = 0; 
              return count;
          } 
          }
      }
      

  2.   

    hide 的话,我引用应该也报错的,我找到了源码编译后的包,导入了,可以用,由于源码中没有我想要的处理,我想改一下,就继承了他,但是我调用不到我的类,于是我就把那个类的代码复制了,一模一样的,运行的时候,我的类就报错,说是找类A,类A也是那个包下面的,我写的类也在该包下,如果不在改包下,就会报错,改到该包下就不报错了,但是运行的时候说是找不到类A。