我有一個應用程序發佈,適用於從Android 4.X到7.X的各種手機。但有一個設備,HTC One M9(6.0棉花糖)和應用程序每次崩潰。當主菜單加載並且應用程序嘗試連接到Google Play遊戲服務時,它總是會發生。說實話,我沒有得到錯誤日誌。這就是我得到:java.lang.IllegalStateException:宏達Android 6.0棉花糖崩潰 - 谷歌播放快照
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
而且,兩條線在日誌中提到我的MainActivity.java這些方法中(在這裏「Snapshots.OpenSnapshotResult打開」):
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();
}
這一個:
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;
}
任何人都知道這可能是什麼原因?
你能解釋一下我在哪裏做錯了嗎?我沒有看到我創建的快照名稱不符合這些要求?還是不接受「Autosave HTC」的空間? –
@DustinKeßler'Autosave HTC',不允許有空格。 – jiashie
爲什麼我在其他稱爲「手動保存點」的地方保存遊戲並且工作正常? –