6

Ich habe eine App, die ActiveAndroid verwendet und es hat gut funktioniert. Jedoch; Wenn ich jetzt versuche, ein Modell in der Datenbank zu speichern, erhalte ich eine SecurityException.SecurityException: Fehler beim Suchen nach Anbieter-Null für Benutzer 0; auf ActiveAndroid auf Android 8.0

Der Stapel ist:

Error saving model java.lang.SecurityException: Failed to find provider null for user 0; expected to find a valid ContentProvider for this authority 
at android.os.Parcel.readException(Parcel.java:1942) 
at android.os.Parcel.readException(Parcel.java:1888) 
at android.content.IContentService$Stub$Proxy.notifyChange(IContentService.java:801) 
at android.content.ContentResolver.notifyChange(ContentResolver.java:2046) 
at android.content.ContentResolver.notifyChange(ContentResolver.java:1997) 
at android.content.ContentResolver.notifyChange(ContentResolver.java:1967) 
at com.activeandroid.Model.save(Model.java:162) 
[.... local stack removed] 

Hat jemand erlebt? Müssen wir den Inhaltsanbieter in der AndroidManifest.xml angeben?

Tut mir leid, aber ich habe noch kein isoliertes Beispiel dafür. Ich werde daran arbeiten, etwas zusammen zu stellen.

Vielen Dank im Voraus

+2

„finden konnte nicht ändern provider null "suggeriert ein missgebildetes' Uri', eines, dessen Autoritätsstring entweder fehlt oder wörtlich "" null "" ist. – CommonsWare

+0

Ich bekomme den gleichen Absturz, aber mit etwas anderem als "null" als Provider im Stacktrace. Ich weiß nicht, warum das passiert, aber es passiert nur auf Android 8 ... – Otziii

+1

Dieser macht mich verrückt. Targeting SDK 25 funktioniert einwandfrei und zielt auf mehr als 26 Abstürze mit genau diesem Fehler ab. Ich habe die Berechtigung im Provider richtig gesetzt. Immer noch dieser Absturz. Ich habe KEINE IDEE worum es geht. Natürlich ist mein Uri beim Ruf nicht null! Hast du jetzt was neues ?? – Zordid

Antwort

-1

hatte ich genau das gleiche Problem mit aktiven Android auf Android O. Es stellte sich heraus, dass eine der Methoden in meiner benutzerdefinierten Contentprovider ein Uri zurückgekehrt, einige Male es null zurückkommen würde und dies verursacht wurde die Problem. Also fügte ich die Annotation @Nullable zu der Methode hinzu, die unten gezeigt wird, die das Problem reparierte.

@Nullable 
@Override 
public Uri insert(Uri uri, ContentValues contentValues) {..} 
+0

Das behebt das Problem nicht. –

0

Android O offenbar die Contentprovider Verwendung eines benutzerdefinierten erfordert für die Datenbanknutzung, auch wenn Sie nicht beabsichtigen, Ihre Daten mit anderen Anwendungen zu teilen.

https://developer.android.com/about/versions/oreo/android-8.0-changes.html

Ihre benutzerdefinierte Klasse muss in einem Provider-Tag in Ihrer Anwendung Tag in AndroidManifest.xml definiert werden. Setzen Sie exported = false, um Ihre Daten vor externer Verwendung zu schützen.

Für mich entstand das Problem, weil ich NotifyChange vom contentResolver anrief. Ich brauchte das nicht, also konnte ich die Implementierung eines ContentProviders vermeiden.

2

Wie von @GeigerGeek hervorgehoben, müssen Sie bei Sicherheitsänderungen unter Android 26 und höher den Inhaltsanbieter in Ihrem Manifest angeben.

Für ActiveAndroid können Sie das unten zu Ihrem Manifest hinzufügen und Ihren Paketnamen ändern.

<provider 
    android:name="com.activeandroid.content.ContentProvider" 
    android:authorities="<your.package.name>" 
    android:enabled="true" 
    android:exported="false"> 
</provider> 

Weitere Lösungen oder dieser Informationen wurde from here.

0

bearbeiten Manifest genommen und diesen Anbieter-Tag-Knoten in Seitenanwendungsknoten hinzuzufügen.

<application ....> 
    <provider android:name="com.activeandroid.content.ContentProvider" 
     android:exported="false" 
     android:enabled="true" 
     android:authorities="here will be package name of your app"/> 
..... 
</application> 

Ich benutze dies und es hat meinen Fehler behoben. Click here for demo.

0

Besuchen https://github.com/pardom/ActiveAndroid/issues/536#issuecomment-344470558

Wenn Projekt Modellklassen in Java-Quellcode durch addModelClasses Konfigurationsmethode Anwendung noch Klassen Ursache Modell geladen wird, werden Absturz wird nicht durch diese Konfiguration definiert haben. In diesem Fall müssen Sie die Modelldefinition in die Datei AndroidManifest.xml verschieben.

AndroidManifest.xml

<provider 
    android:name=".content.DatabaseContentProvider" 
    android:authorities="your package name" 
    android:exported="false" /> 

DatabaseContentProvider.java

... 
import com.activeandroid.content.ContentProvider; 
... 

public class DatabaseContentProvider extends ContentProvider { 

@Override 
protected Configuration getConfiguration() { 
    Configuration.Builder builder = new Configuration.Builder(getContext()); 
    builder.addModelClass(SomeModel.class); 
    builder.addModelClass(OtherModel.class); 
    return builder.create(); 
}} 

Wenn Sie etwas mit FileProvider tun, nicht verpassen Paketnamen

Uri contentUri = FileProvider.getUriForFile(mContext, 
      "your package name", new File(mImageFilePath)); 
Verwandte Themen