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.
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>
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:
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();
}
Ü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();
}
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;
}
..........
}
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();
}
}