2017-11-14 37 views
0

これは、単純なテキストデータをsqliteデータベースに挿入する小さな割り当てです。私はこのためにSQLiteOpenHelperクラスを使用し、与えられたコードを使用しました。 私はここでいくつかの同様の質問を見つけましたが、まったく同じではありません。私を助けてください。ここに私のAndroidManifest.xmlファイルの権限次私が使用したexception-例外 - パーセルへの例外の書き込み

11-14 21:59:17.786 5746-5763/? E/DatabaseUtils: Writing exception to parcel 
              java.lang.SecurityException: Neither user 10169 nor current process has android.permission.READ_PROFILE. 
               at android.app.ContextImpl.enforce(ContextImpl.java:1921) 
               at android.app.ContextImpl.enforceCallingOrSelfPermission(ContextImpl.java:1950) 
               at android.content.ContextWrapper.enforceCallingOrSelfPermission(ContextWrapper.java:600) 
               at com.android.providers.contacts.ProfileProvider.enforceReadPermission(ProfileProvider.java:54) 
               at com.android.providers.contacts.ProfileProvider.query(ProfileProvider.java:84) 
               at com.android.providers.contacts.ContactsProvider2.query(ContactsProvider2.java:5066) 
               at android.content.ContentProvider$Transport.query(ContentProvider.java:214) 
               at android.content.ContentProviderNative.onTransact(ContentProviderNative.java:112) 
               at android.os.Binder.execTransact(Binder.java:446) 

です:

<uses-permission android:name="android.permission.READ_PHONE_STATE"/> 
<uses-permission android:name="android.Manifest.permission.READ_PHONE_STATE" /> 
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 

これは私のDBHelperあるクラス -

public class DBHelper extends SQLiteOpenHelper { 

public static final String DATABASE_NAME = "CANDIDATES"; 
public static final String TABLE_NAME = "CANDIDATES_TABLE"; 
public static final String NAME = "NAME"; 
public static final String AGE = "AGE"; 
public static final String QUAL = "QUALIFICATION"; 
public static final String SALARY = "SALARY"; 
public static final String ADD = "ADDRESS"; 
public static final String DES = "DESCRIPTION"; 
Context context; 


public DBHelper(Context context) { 
    super(context, DATABASE_NAME, null, 1); 
    this.context=context; 
} 

@Override 
public void onCreate(SQLiteDatabase db) { 
    db.execSQL("create table "+ TABLE_NAME +" ("+NAME+" TEXT,"+AGE+" INTEGER,"+QUAL+" TEXT,"+SALARY+" INTEGER,"+ADD+" TEXT,"+DES+" TEXT)"); 

} 

public boolean insertData(String name,int age,String qual,int salary, String add, String des){ 
    SQLiteDatabase db=this.getWritableDatabase(); 
    ContentValues contentValues=new ContentValues(); 
    contentValues.put(NAME,name); 
    contentValues.put(AGE,age); 
    contentValues.put(QUAL,qual); 
    contentValues.put(SALARY,salary); 
    contentValues.put(ADD,add); 
    contentValues.put(DES,des); 
    long result=db.insert(TABLE_NAME,null,contentValues); 
    Log.v("check",name+age+""+qual+salary+""+add+des); 
    if(result==-1){ 
     return false; 
    } 
    else return true; 
} 

public Cursor getData(){ 
    SQLiteDatabase db=this.getWritableDatabase(); 
    Cursor cursor=db.rawQuery("Select * from"+TABLE_NAME,null); 
    return cursor; 
} 
@Override 
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
    db.execSQL("DROP TABLE IF EXISTS "+TABLE_NAME); 
    onCreate(db); 
} 

}

+0

許可がありません – Zoe

+0

ありがとうございます@Zoe。どちらか教えていただけますか?私はすでに多くを試しました –

+1

あなたのマニフェストを投稿してください –

答えて

1

あなたはマニフェストは、新しいバージョンのために十分ではありません追加runtime permissions.に依頼する必要があります。

if (ContextCompat.checkSelfPermission(thisActivity, 
      Manifest.permission.READ_CONTACTS) 
    != PackageManager.PERMISSION_GRANTED) { 

// Should we show an explanation? 
if (ActivityCompat.shouldShowRequestPermissionRationale(thisActivity, 
     Manifest.permission.READ_CONTACTS)) { 

    // Show an explanation to the user *asynchronously* -- don't block 
    // this thread waiting for the user's response! After the user 
    // sees the explanation, try again to request the permission. 

} else { 

    // No explanation needed, we can request the permission. 

    ActivityCompat.requestPermissions(thisActivity, 
      new String[]{Manifest.permission.READ_CONTACTS}, 
      MY_PERMISSIONS_REQUEST_READ_CONTACTS); 

    // MY_PERMISSIONS_REQUEST_READ_CONTACTS is an 
    // app-defined int constant. The callback method gets the 
    // result of the request. 
} 
} 
+0

こんにちは@EmreAktürk、申し訳ありませんが、私のアプリで連絡先を読む必要はありません。 sqliteテーブルにデータを追加する単純なアプリです。私はなぜアプリケーションが実行時にこの例外を表示するのか分からない。 (それもアプリケーションをクラッシュさせない) –

+0

こんにちは@Wijay Sharma、そこには、コンタクトを読むことを試みているDatabaseUtilsという名前のクラスがあります。あなたはエラーログの最初の行からそれを理解することができます。このクラスは、使用している依存関係にある必要があります。そのクラッシュしていない場合は、おそらくtry-catchブロックにあります。 –

-1

この行をマニフェストに追加する必要があります:

<uses-permission android:name="android.permission.READ_PROFILE"/> 

enter image description here

+0

私が間違っている場合は私を修正してください。しかし、そのような許可はありません –

+0

私のマニフェスト –

+0

から[Androidスタジオ]をコピーしました[それは存在しません](https://developer.android.com/reference/android/Manifest.permission.html) – Zoe

関連する問題