【问题标题】:Caused by: java.lang.IllegalStateException: ParsePlugins is already initialized引起:java.lang.IllegalStateException:ParsePlugins 已经初始化
【发布时间】:2015-09-26 19:30:21
【问题描述】:

我退出了应用程序,重新启动它,我遇到了异常。

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

例外

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)

清单文件

        <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>

编辑:

我想知道为什么 Parse 会为此抛出异常。为什么不只是info 并继续前进。它已初始化,如果我再次初始化它,那就太重要了。

解决方案

我已经放弃 Parse。不喜欢Application方式,维护起来很烦。

【问题讨论】:

  • 你在什么阶段打电话给Parse.initialize,在你的onCreate
  • 是的,它在 onCreate 中
  • 它是Application 的子类的onCreate 还是您在其他本可以被破坏的地方调用Parse.initialize 并再次调用它?
  • @JorgeCasariego 谢谢,这有帮助

标签: java android parse-platform


【解决方案1】:

Parse.initialize() 只能为整个应用程序调用一次

ActivityonCreate 函数中调用它可能会导致它被多次初始化,因为在应用的生命周期中可以多次创建一个Activity

相反,创建一个应用程序类(并将android:name 属性添加到您的应用程序清单中)。

应用程序:(注意不是 Activity/Service/Reciever)

//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>

【讨论】:

  • 你没有告诉我任何新消息吗?您刚刚改述了这个问题。
  • 我在您的清单中没有看到命名应用程序。您是在 application 类中还是在 Activity/Service/Receiver 中使用onCreate?如果您在除应用程序之外的任何内容中执行此操作,它将无法正常工作。你能提供你的onCreate 方法的代码和上下文吗?这可能有助于找到解决方案。
  • 这是一个拥有 1000 名客户的有效发布应用程序。我正在向其中添加 Parse。是的,它是一个活动,是的,我正在 oncreate 中初始化 Parse。是的,清单文件有一个application
  • @Siddharth “是的,它是一个 Activity,是的,我正在 oncreate 中初始化 Parse。” 这是不正确的部分。如果你看我的回答,我在public class Application extends android.app.Application 中打电话给Parse.initialize() NOT public class MyActivity extends Activity
  • 正如@Khalos 所说。您无法在Activity或服务中初始化(Parse.initialize())解析SDK,因为在整个应用程序过程中只能执行一次初始化。进程的入口点是Application 类,您可以像@Khalos answear 一样扩展和添加解析初始化代码。所以从Activity onCreate中删除Parse.initialize并放入Application onCreate。
【解决方案2】:

没关系,我已经修好了。问题是由于语法错误造成的。感谢大家的解决。

这很奇怪,因为我遵循了给出的内容,但现在我根本没有收到任何推送通知?我所做的唯一更改:

  1. 将应用类添加到清单中 &
  2. 在应用程序类中初始化解析。我正在使用 SDK 的 v1.10.1...

清单

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

应用类

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

【讨论】:

    【解决方案3】:

    自己检查初始化,只处理异常,错误不会使应用崩溃,只是悄悄地抛出异常。

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

    【讨论】:

      【解决方案4】:

      我使用布尔 isParseInitialized 变量解决了这个问题。适用于方向更改,即在同一个应用程序会话中重新创建活动时。代码sn-p:

         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;
          }
      
        ..........
      
      }
      

      【讨论】:

        【解决方案5】:

        这是一个解决方案

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

        【讨论】:

          猜你喜欢
          • 2020-12-25
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-12-29
          相关资源
          最近更新 更多