webentwicklung-frage-antwort-db.com.de

Auslöser: Java.lang.IllegalStateException: ParsePlugins ist bereits initialisiert

Ich beende die App, starte sie neu, ich bekomme eine Ausnahme.

public void onCreate() {
-->here Parse.initialize(this, "adfsfasdfs",
            "asdfadfsdf");
    ParseInstallation.getCurrentInstallation().saveInBackground();
    ParseInstallation.create(identity == null ? "No Identity Set"
            : identity);

Ausnahme

07-08 23:27:29.411: E/AndroidRuntime(4889): Caused by: Java.lang.IllegalStateException: ParsePlugins is already initialized
07-08 23:27:29.411: E/AndroidRuntime(4889):     at com.parse.ParsePlugins.set(ParsePlugins.Java:27)
07-08 23:27:29.411: E/AndroidRuntime(4889):     at com.parse.ParsePlugins.access$200(ParsePlugins.Java:11)
07-08 23:27:29.411: E/AndroidRuntime(4889):     at com.parse.ParsePlugins$Android.initialize(ParsePlugins.Java:141)
07-08 23:27:29.411: E/AndroidRuntime(4889):     at com.parse.Parse.initialize(Parse.Java:178)
07-08 23:27:29.411: E/AndroidRuntime(4889):     at com.mcruiseon.caregiri.Registration.onCreate(Registration.Java:98)

Manifest-Datei

        <service Android:name="com.parse.PushService" />

        <receiver Android:name="com.parse.ParseBroadcastReceiver" >
            <intent-filter>
                <action Android:name="Android.intent.action.BOOT_COMPLETED" />
                <action Android:name="Android.intent.action.USER_PRESENT" />
            </intent-filter>
        </receiver>
        <receiver
            Android:name="com.parse.ParsePushBroadcastReceiver"
            Android:exported="false" >
            <intent-filter>
                <action Android:name="com.parse.Push.intent.RECEIVE" />
                <action Android:name="com.parse.Push.intent.DELETE" />
                <action Android:name="com.parse.Push.intent.OPEN" />
            </intent-filter>
        </receiver>

Bearbeiten:

Ich frage mich, warum Parse hier eine Ausnahme machen würde. Warum nicht einfach info und weitermachen. Es ist initialisiert, eine große Sache, wenn ich es erneut initialisiere.

Lösung

Ich habe Parse aufgegeben. Mag die Anwendung nicht so, nur zu ärgerlich zu pflegen.

12
Siddharth

Parse.initialize() sollte für eine gesamte Anwendung nur einmal aufgerufen werden .

Wird es in der Funktion Activity einer onCreate aufgerufen, kann es mehrmals initialisiert werden, da eine Aktivität während des Lebenszyklus einer App mehrmals erstellt werden kann .

Erstellen Sie stattdessen eine Anwendungsklasse (und fügen Sie dem Manifest Ihrer Anwendung ein Android:name-Attribut hinzu).

Bewerbung: (Keine Aktivität/Dienstleistung/Empfänger)

//Note that this is an Android.app.Application class.
public class MyApplication extends Android.app.Application {

@Override
public void onCreate() {
    super.onCreate();

    //This will only be called once in your app's entire lifecycle.
    Parse.initialize(this,
            getResources().getString(R.string.parse_application_id),
            getResources().getString(R.string.parse_client_key));
}

AndroidManifest:

<application
        Android:name=".MyApplication">
        ....
        <activity>
            ....
        </activity>
</application>
28
Khalos

NIEMALS, ich habe es behoben. Das Problem lag an einem Syntaxfehler. Vielen Dank an alle für die Lösung.

Das ist seltsam, da ich befolgt habe, was gegeben wurde, aber jetzt überhaupt keine Push-Benachrichtigungen erhalte? Die einzigen Änderungen, die ich vorgenommen habe:

  1. app-Klasse zum Manifest hinzufügen &
  2. initialisieren Sie die Analyse in der App-Klasse. Ich benutze v1.10.1 des SDK ...

Manifest

<application
    Android:allowBackup="true"
    Android:icon="@drawable/ic_launcher"
    Android:label="@string/app_name"
    Android:theme="@style/AppTheme" 
    Android:name="full.package.name.UseParse" >

Anwendungsklasse

public class UseParse extends Android.app.Application {
@Override
public void onCreate() {
    super.onCreate();
    Parse.initialize(this, "id", "key");
    ParseInstallation.getCurrentInstallation().saveInBackground();
}
4
JC23

Überprüfe die Initialisierung selbst und behandle einfach die Ausnahme, und der Fehler wird die App nicht zum Absturz bringen. Wirf einfach die Ausnahme leise aus.

        try {
            Parse.initialize(this);
            parseinited = true;
        }
        catch (IllegalStateException e) {
            e.printStackTrace();
        }
2
pseudozach

Ich habe es mit einer booleschen isParseInitialized -Variable gelöst. Änderungen der Ausrichtung, d. H. Wenn die Aktivität in derselben Anwendungssitzung neu erstellt wird. Code-Auszug :

   public class YourActivity extends Activity {
        private static boolean isParseInitialized = false;
        public static final String APPLICATION_ID = "your_application_id";
        public static final String CLIENT_KEY = "your_client_key";

        @Override
        protected void onCreate(Bundle savedInstanceState) {
           super.onCreate(savedInstanceState);
           setContentView(R.layout.activity_youractivity);


    if(isParseInitialized==false) {
        Parse.initialize(this, APPLICATION_ID, CLIENT_KEY);
        isParseInitialized = true;
    }

  ..........

}
1
charany1

das ist eine Lösung

public class MainActivity extends AppCompatActivity {
    static  boolean  parseIsInit = false;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        if (!parseIsInit){
            Log.d("demo",""+parseIsInit );
        Parse.initialize(this, "PutHereYourKeys", "PutHereYourKeys");
            parseIsInit=true;
        }
        ParseInstallation.getCurrentInstallation().saveInBackground();

    }
}
0
user196554