简体   繁体   English

java.lang.IllegalStateException:HTC Android 6.0 Marshmallow崩溃 - Google Play快照

[英]java.lang.IllegalStateException: HTC Android 6.0 Marshmallow crash - Google Play Snapshots

I have an app released that works great on most phones ranging from Android 4.X to 7.X. 我有一个应用程序发布,适用于大多数手机,从Android 4.X到7.X. But there is one device, an HTC One M9 (6.0 Marshmallow) and the app crashes everytime. 但是有一个设备,一个HTC One M9(6.0 Marshmallow),应用程序每次都会崩溃。 It always happens when the main menu is loaded and the app tries to connect to google play games services. 它总是在加载主菜单并且应用程序尝试连接到谷歌播放游戏服务时发生。 To be honest, I don't get the error log. 说实话,我没有得到错误日志。 This is what i get: 这就是我得到的:

java.lang.RuntimeException: An error occurred while executing doInBackground()
    at android.os.AsyncTask$3.done(AsyncTask.java:309)
    at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:354)
    at java.util.concurrent.FutureTask.setException(FutureTask.java:223)
    at java.util.concurrent.FutureTask.run(FutureTask.java:242)
    at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:234)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)
    at java.lang.Thread.run(Thread.java:818)
Caused by: java.lang.IllegalStateException: Must provide a valid file name!
    at android.os.Parcel.readException(Parcel.java:1616)
    at android.os.Parcel.readException(Parcel.java:1561)
    at com.google.android.gms.games.internal.IGamesService$Stub$Proxy.zza(Unknown Source)
    at com.google.android.gms.games.internal.GamesClientImpl.zza(Unknown Source)
    at com.google.android.gms.games.internal.api.SnapshotsImpl$2.zza(Unknown Source)
    at com.google.android.gms.games.internal.api.SnapshotsImpl$2.zza(Unknown Source)
    at com.google.android.gms.internal.zzaad$zza.zzb(Unknown Source)
    at com.google.android.gms.internal.zzaaq.zze(Unknown Source)
    at com.google.android.gms.internal.zzaaq.zzb(Unknown Source)
    at com.google.android.gms.internal.zzaav.zzb(Unknown Source)
    at com.google.android.gms.internal.zzaat.zzb(Unknown Source)
    at com.google.android.gms.games.internal.api.SnapshotsImpl.open(Unknown Source)
    at com.google.android.gms.games.internal.api.SnapshotsImpl.open(Unknown Source)
    at com.duke.privatpc.quiztest.MainActivity$2.doInBackground(MainActivity.java:362)
    at com.duke.privatpc.quiztest.MainActivity$2.doInBackground(MainActivity.java:357)
    at android.os.AsyncTask$2.call(AsyncTask.java:295)
    at java.util.concurrent.FutureTask.run(FutureTask.java:237)
    ... 4 more

Also, the two lines in the log referring to my MainActivity.java within these methods (here at "Snapshots.OpenSnapshotResult open"): 此外,日志中的两行引用了这些方法中的MainActivity.java(此处为“Snapshots.OpenSnapshotResult open”):

private void savedGamesUpdate() {
        final String snapshotName = makeSnapshotName(APP_STATE_KEY);
        final boolean createIfMissing = true;

        // Use the data from the EditText as the new Snapshot data.
        final byte[] data = mSaveGameData;

        AsyncTask<Void, Void, Boolean> updateTask = new AsyncTask<Void, Void, Boolean>() {


            @Override
            protected Boolean doInBackground(Void... params) {
                Snapshots.OpenSnapshotResult open = Games.Snapshots.open(
                        mGoogleApiClient, snapshotName, createIfMissing).await();

                if (!open.getStatus().isSuccess()) {
                    return false;
                }

                Bitmap coverImage = BitmapFactory.decodeResource(MainActivity.this.getResources(),
                        R.mipmap.autosave);
                String desc = "Autosave "+android.os.Build.MODEL;
                // Create the change operation
                SnapshotMetadataChange metadataChange = new SnapshotMetadataChange.Builder()
                        .setCoverImage(coverImage)
                        .setDescription(desc)
                        .build();

                // Change data but leave existing metadata
                Snapshot snapshot = open.getSnapshot();
                snapshot.getSnapshotContents().writeBytes(data);

                Snapshots.CommitSnapshotResult commit = Games.Snapshots.commitAndClose(
                        mGoogleApiClient, snapshot, metadataChange).await();

                if (!commit.getStatus().isSuccess()) {
                    return false;
                }

                // No failures
                return true;
            }

            @Override
            protected void onPostExecute(Boolean result) {
                dismissProgressDialog();

            }
        };
        updateTask.execute();
    }

and this one: 还有这个:

   private String makeSnapshotName(int appStateKey) {
        if(isAnHTCDevice()){
            return "Autosave HTC";
        }else{
            if(android.os.Build.MODEL != null){
                return "Autosave"+android.os.Build.MODEL;
            }else{
                return "Autosave";
            }
        }

    }

    public boolean isAnHTCDevice()
    {
        String manufacturer = android.os.Build.MANUFACTURER;
        if (manufacturer.toLowerCase().contains("htc"))
            return true;
        else
            return false;
    }

Anyone know what the cause for this could be? 任何人都知道这可能是什么原因?

RTFM. RTFM。 as refered in the document, [Snapshots.open]( https://developers.google.com/android/reference/com/google/android/gms/games/snapshot/Snapshots.html#open(com.google.android.gms.common.api.GoogleApiClient , java.lang.String, boolean)) 正如文档中所述[Snapshots.open]( https://developers.google.com/android/reference/com/google/android/gms/games/snapshot/Snapshots.html#open ( com.google.android)。 gms.common.api.GoogleApiClient ,java.lang.String,boolean))

The name of the snapshot file to open. 要打开的快照文件的名称。 Must be between 1 and 100 non-URL-reserved characters (az, AZ, 0-9, or the symbols "-", ".", "_", or "~"). 必须介于1到100个非URL保留字符(az,AZ,0-9或符号“ - ”,“。”,“_”或“〜”)之间。

so, modify makeSnapshotName method to generate a valid filename. 因此,修改makeSnapshotName方法以生成有效的文件名。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 Google Play控制台中的java.lang.IllegalStateException崩溃报告 - java.lang.IllegalStateException crash reports from Google Play Console Google Play控制台向我显示java.lang.IllegalStateException错误 - Google play console show me java.lang.IllegalStateException error Android:Google Play游戏服务连接错误(java.lang.IllegalStateException:必须连接GoogleApiClient。) - Android: Google play games services connection error ( java.lang.IllegalStateException: GoogleApiClient must be connected.) Android中的java.lang.IllegalStateException - java.lang.IllegalStateException In Android Android,java.lang.IllegalStateException - Android, java.lang.IllegalStateException Android 9 上的 java.lang.IllegalStateException - java.lang.IllegalStateException on Android 9 java.lang.IllegalStateException关于在Android中添加Google Places API - java.lang.IllegalStateException on adding google places API in android Android:java.lang.IllegalStateException:已经连接 - Android: java.lang.IllegalStateException: Already connected Android java.lang.IllegalStateException,不在主线程上 - Android java.lang.IllegalStateException, not on the main thread Android应用程式java.lang.IllegalStateException错误 - Android app java.lang.IllegalStateException error
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM