2016-04-25 6 views
1

Quickbloxが4月15日から、QuickbloxがAndroid用SDKを2.5.2にアップデートしたときに、quickbloxの問題に直面しています。 私が気付いた問題は、customDataパラメータがダイアログのために満たされている場合、以下に述べるIOExeptionをスローします。それ以外の問題はありません。シリアル化可能オブジェクトの書き込み可能なIOExceptionの発生[QUICKBLOX DIALOG]

ダイアログボックスは問題ありません。

QBDialog = 1461046124 {ID = XXXX、のcreated_at = 2016-19-04 11時36分54秒、 last_msg_user_id = XXXX、occupants_ids = [XXXX、XXXX、last_message =ちょっと、 last_message_date_sent、タイプ= PRIVATE 、名前= XXXX、 room_jid =ヌル、USER_ID = XXXX、写真=ヌル、unread_message_count = 0、 customData = NULL}クラッシュを引き起こす

ダイアログ。

QBDialog {= 1461047494、タイプID = XXXX、のcreated_at = 2016-19-04午前12時01分00秒、 last_msg_user_id = XXXX、occupants_ids = [XXXX、XXXX]、last_message =こんにちは、 last_message_date_sent = PRIVATE、名前= XXXX、 room_jid =ヌル、USER_ID = XXXX、写真=ヌル、unread_message_count = 1、 customData = QBBaseCustomObject {クラス名= 'DialogueRelationState' フィールド= {isFriends = TRUE、location_field = NULL}}}

上記のようなダイアログをActivity_cに渡すコードセグメント受信活動の帽子クラス

Bundle bundle = new Bundle(); 
bundle.getString(selectedDialog.toString()); 
bundle.putSerializable(Activity_Chat.EXTRA_DIALOG, selectedDialog); 
Activity_Chat.start(DrawActivity_Chatlist.this, bundle);// error points here 

startメソッド

public static void start(Context context, Bundle bundle) { 

    Intent intent = new Intent(context, Activity_Chat.class); 
    intent.putExtras(bundle); 
    context.startActivity(intent); //error points here 
} 

エラーログ:

Fatal Exception: java.lang.RuntimeException: Parcelable encountered IOException writing serializable object (name = com.quickblox.chat.model.QBDialog) 
     at android.os.Parcel.writeSerializable(Parcel.java:1323) 
     at android.os.Parcel.writeValue(Parcel.java:1271) 
     at android.os.Parcel.writeArrayMapInternal(Parcel.java:618) 
     at android.os.Bundle.writeToParcel(Bundle.java:1692) 
     at android.os.Parcel.writeBundle(Parcel.java:643) 
     at android.content.Intent.writeToParcel(Intent.java:7152) 
     at android.app.ActivityManagerProxy.startActivity(ActivityManagerNative.java:2663) 
     at android.app.Instrumentation.execStartActivity(Instrumentation.java:1419) 
     at android.app.Activity.startActivityForResult(Activity.java:3532) 
     at android.app.Activity.startActivityForResult(Activity.java:3458) 
     at android.support.v4.app.FragmentActivity.startActivityForResult(FragmentActivity.java:784) 
     at android.app.Activity.startActivity(Activity.java:3780) 
     at android.app.Activity.startActivity(Activity.java:3748) 
     at com.social.fitspur.activities.Activity_Chat.start(Activity_Chat.java:100) 
     at com.social.fitspur.activities.DrawActivity_Chatlist$3.onItemClick(DrawActivity_Chatlist.java:198) 
     at android.widget.AdapterView.performItemClick(AdapterView.java:299) 
     at android.widget.AbsListView.performItemClick(AbsListView.java:1162) 
     at android.widget.AbsListView$PerformClick.run(AbsListView.java:2953) 
     at android.widget.AbsListView$3.run(AbsListView.java:3708) 
     at android.os.Handler.handleCallback(Handler.java:733) 
     at android.os.Handler.dispatchMessage(Handler.java:95) 
     at android.os.Looper.loop(Looper.java:149) 
     at android.app.ActivityThread.main(ActivityThread.java:5257) 
     at java.lang.reflect.Method.invokeNative(Method.java) 
     at java.lang.reflect.Method.invoke(Method.java:515) 
     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793) 
     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:609) 
     at dalvik.system.NativeStart.main(NativeStart.java) 
Caused by java.io.NotSerializableException: org.json.JSONObject$1 
     at java.io.ObjectOutputStream.writeNewObject(ObjectOutputStream.java:1366) 
     at java.io.ObjectOutputStream.writeObjectInternal(ObjectOutputStream.java:1673) 
     at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:1519) 
     at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:1483) 
     at java.util.HashMap.writeObject(HashMap.java:995) 
     at java.lang.reflect.Method.invokeNative(Method.java) 
     at java.lang.reflect.Method.invoke(Method.java:515) 
     at java.io.ObjectOutputStream.writeHierarchy(ObjectOutputStream.java:1055) 
     at java.io.ObjectOutputStream.writeNewObject(ObjectOutputStream.java:1406) 
     at java.io.ObjectOutputStream.writeObjectInternal(ObjectOutputStream.java:1673) 
     at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:1519) 
     at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:1483) 
     at java.io.ObjectOutputStream.writeFieldValues(ObjectOutputStream.java:981) 
     at java.io.ObjectOutputStream.defaultWriteObject(ObjectOutputStream.java:368) 
     at java.io.ObjectOutputStream.writeHierarchy(ObjectOutputStream.java:1076) 
     at java.io.ObjectOutputStream.writeNewObject(ObjectOutputStream.java:1406) 
     at java.io.ObjectOutputStream.writeObjectInternal(ObjectOutputStream.java:1673) 
     at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:1519) 
     at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:1483) 
     at java.io.ObjectOutputStream.writeFieldValues(ObjectOutputStream.java:981) 
     at java.io.ObjectOutputStream.defaultWriteObject(ObjectOutputStream.java:368) 
     at java.io.ObjectOutputStream.writeHierarchy(ObjectOutputStream.java:1076) 
     at java.io.ObjectOutputStream.writeNewObject(ObjectOutputStream.java:1406) 
     at java.io.ObjectOutputStream.writeObjectInternal(ObjectOutputStream.java:1673) 
     at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:1519) 
     at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:1483) 
     at android.os.Parcel.writeSerializable(Parcel.java:1318) 
     at android.os.Parcel.writeValue(Parcel.java:1271) 
     at android.os.Parcel.writeArrayMapInternal(Parcel.java:618) 
     at android.os.Bundle.writeToParcel(Bundle.java:1692) 
     at android.os.Parcel.writeBundle(Parcel.java:643) 
     at android.content.Intent.writeToParcel(Intent.java:7152) 
     at android.app.ActivityManagerProxy.startActivity(ActivityManagerNative.java:2663) 
     at android.app.Instrumentation.execStartActivity(Instrumentation.java:1419) 
     at android.app.Activity.startActivityForResult(Activity.java:3532) 
     at android.app.Activity.startActivityForResult(Activity.java:3458) 
     at android.support.v4.app.FragmentActivity.startActivityForResult(FragmentActivity.java:784) 
     at android.app.Activity.startActivity(Activity.java:3780) 
     at android.app.Activity.startActivity(Activity.java:3748) 
     at com.social.fitspur.activities.Activity_Chat.start(Activity_Chat.java:100) 
     at com.social.fitspur.activities.DrawActivity_Chatlist$3.onItemClick(DrawActivity_Chatlist.java:198) 
     at android.widget.AdapterView.performItemClick(AdapterView.java:299) 
     at android.widget.AbsListView.performItemClick(AbsListView.java:1162) 
     at android.widget.AbsListView$PerformClick.run(AbsListView.java:2953) 
     at android.widget.AbsListView$3.run(AbsListView.java:3708) 
     at android.os.Handler.handleCallback(Handler.java:733) 
     at android.os.Handler.dispatchMessage(Handler.java:95) 
     at android.os.Looper.loop(Looper.java:149) 
     at android.app.ActivityThread.main(ActivityThread.java:5257) 
     at java.lang.reflect.Method.invokeNative(Method.java) 
     at java.lang.reflect.Method.invoke(Method.java:515) 
     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793) 
     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:609) 
     at dalvik.system.NativeStart.main(NativeStart.java) 

私はこのことから理解され、それがでJSONとして何かに遭遇しましたダイアログはシリアライズ可能ではなく、したがってエラーです。

注:これは、4月15日の前に罰金働いていた、と私は私がV2.5.2にV2.5からSDKのバージョンをアップグレードしようとした、あまりにも

私のカスタムクラスに変更を加えていない、ない使用。

答えて

2

QuickBloxは最近、jsonObjectを返すlocation_fieldを追加しましたが、stringを予期していました。最後に、ダイアログを取得しながらこの行を追加することがトリックになりました。私は同じ問題に直面しています

public static void setGroupDialog(QBDialog qbDialog) { 
    GsonBuilder builder = new GsonBuilder().setExclusionStrategies(new ExclusionStrategy() { 
     @Override 
     public boolean shouldSkipField(FieldAttributes f) { 
      return f.getName().equals("sdf"); 
     } 

     @Override 
     public boolean shouldSkipClass(Class<?> clazz) { 
      return false; 
     } 
    }); 
    String json = builder.create().toJson(qbDialog); 
    getAuthPreferences(YOUR_APP_CONTEXT).edit() 
      .putString(PREF_GROUP_DIALOG, json).commit(); 
} 
+0

私は同じ例外が直面していますが、私は、以前のコードを追加できる場所、問題は時に私と一緒に起こるのかわかりません私は新しいダイアログを作成しようとします。 –

+0

前のコードは何を話していますか?上記の問題は、カスタムデータをダイアログに追加する場合にのみ発生します。そうでなければ – Veer3383

0

私のソリューションは、シンプルな日付形式をエクスクルードました。代わりに今私のプロジェクト全体がこの問題によって影響を受けます。ですから当分の間、私はこのテクニックを使用していますが、これは使いにくいですが、SDKをアップデートするときには後で使用でき、後者では変更を数秒で元に戻すことができます。QBDialogに依存している私のすべてのクラスは、今クラッシュしています。だから私はあなたのクラスコードブロックの1つをあなたと共有しています。それはあなたのために完全に役立つかもしれません。

クラッシュコード:

public class ChattingActivity extends ... { 


    public static final void start(Context context, QBDialog qbDialog) 
    { 
      Intent intent = new Intent(context,ChattingActivity.class); 
      intent.putExtra(Intent.EXTRA_STREAM, qbDialog); 
      context.startActivity(intent); // Crash when try to start 
    } 
} 

安定コード:

public class ChattingActivity extends ... { 

    private static QBDialog QB_DIALOG; 

    public static final void start(Context context, QBDialog qbDialog) 
    { 
      Intent intent = new Intent(context,ChattingActivity.class); 
     // intent.putExtra(Intent.EXTRA_STREAM, qbDialog); 
      ChattingActivity.QB_DIALOG = qbDialog; 
      context.startActivity(intent); // Crash when try to start 
    } 

    // Important: Should do null in OnDestroy. 
     @Override 
    protected void onDestroy() { 
     super.onDestroy(); 
     QB_DIALOG = null; 
    } 


} 
0

for (QBDialog dialog : dialogs) { 
    QBDialogCustomData customData = dialog.getCustomData(); 
    usersIDs.addAll(dialog.getOccupants()); 
    if (customData == null) { 
     continue; 
    } 
    HashMap<String, Object> fields = customData.getFields(); 
    if (!fields.isEmpty()) { 
     fields.put("location_field", null); 
    } 
} 
+0

Ok、Thanx for the response ..私はjarファイルを逆コンパイルして、問題のあるコードを見つけました。私の場合、quickbloxはCustomDataクラスの場所に新しいフィールドを追加しましたが、sdkでは更新されていませんでした。 – Veer3383

関連する問題