2017-12-04 6 views
-1

私のコードに何が問題なのかよくわかりません。すべてのオブジェクトがSerializableを実装していることを確認しました。私はすでに他の質問を見てきましたが、まだ解決策を見つけることはできません。誰かが私が何が間違っているかを見つけるのを助けることができますかここでjava.lang.RuntimeException:Parcelable IOExceptionが発生しました。シリアライズ可能なオブジェクトを書き込んで、何が間違っているかを確認できません。

が、それはlogcatに

12-04 00:54:15.826 5602-5602/com.b07.joesapp E/AndroidRuntime: FATAL EXCEPTION: main 
                  Process: com.b07.joesapp, PID: 5602 
                  java.lang.RuntimeException: Parcelable encountered IOException writing serializable object (name = com.b07.joesapp.admin.AdminInterfaceImpl) 
                   at android.os.Parcel.writeSerializable(Parcel.java:1822) 
                   at android.os.Parcel.writeValue(Parcel.java:1770) 
                   at android.os.Parcel.writeArrayMapInternal(Parcel.java:838) 
                   at android.os.BaseBundle.writeToParcelInner(BaseBundle.java:1542) 
                   at android.os.Bundle.writeToParcel(Bundle.java:1232) 
                   at android.os.Parcel.writeBundle(Parcel.java:878) 
                   at android.content.Intent.writeToParcel(Intent.java:9595) 
                   at android.app.IActivityManager$Stub$Proxy.startActivity(IActivityManager.java:4327) 
                   at android.app.Instrumentation.execStartActivity(Instrumentation.java:1611) 
                   at android.app.Activity.startActivityForResult(Activity.java:4488) 
                   at android.support.v4.app.BaseFragmentActivityApi16.startActivityForResult(BaseFragmentActivityApi16.java:54) 
                   at android.support.v4.app.FragmentActivity.startActivityForResult(FragmentActivity.java:67) 
                   at android.app.Activity.startActivityForResult(Activity.java:4446) 
                   at android.support.v4.app.FragmentActivity.startActivityForResult(FragmentActivity.java:720) 
                   at android.app.Activity.startActivity(Activity.java:4807) 
                   at android.app.Activity.startActivity(Activity.java:4775) 
                   at com.b07.joesapp.adminMenu.AdminActionsController.onClick(AdminActionsController.java:49) 
                   at android.view.View.performClick(View.java:6294) 
                   at android.view.View$PerformClick.run(View.java:24770) 
                   at android.os.Handler.handleCallback(Handler.java:790) 
                   at android.os.Handler.dispatchMessage(Handler.java:99) 
                   at android.os.Looper.loop(Looper.java:164) 
                   at android.app.ActivityThread.main(ActivityThread.java:6494) 
                   at java.lang.reflect.Method.invoke(Native Method) 
                   at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438) 
                   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807) 
                  Caused by: java.io.NotSerializableException: com.b07.joesapp.adminMenu.AdminHomePage 
                   at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1233) 
                   at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1597) 
                   at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1558) 
                   at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1481) 
                   at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1227) 
                   at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:347) 
                   at android.os.Parcel.writeSerializable(Parcel.java:1817) 
                   at android.os.Parcel.writeValue(Parcel.java:1770)  
                   at android.os.Parcel.writeArrayMapInternal(Parcel.java:838)  
                   at android.os.BaseBundle.writeToParcelInner(BaseBundle.java:1542)  
                   at android.os.Bundle.writeToParcel(Bundle.java:1232)  
                   at android.os.Parcel.writeBundle(Parcel.java:878)  
                   at android.content.Intent.writeToParcel(Intent.java:9595)  
                   at android.app.IActivityManager$Stub$Proxy.startActivity(IActivityManager.java:4327)  
                   at android.app.Instrumentation.execStartActivity(Instrumentation.java:1611)  
                   at android.app.Activity.startActivityForResult(Activity.java:4488)  
                   at android.support.v4.app.BaseFragmentActivityApi16.startActivityForResult(BaseFragmentActivityApi16.java:54)  
                   at android.support.v4.app.FragmentActivity.startActivityForResult(FragmentActivity.java:67)  
                   at android.app.Activity.startActivityForResult(Activity.java:4446)  
                   at android.support.v4.app.FragmentActivity.startActivityForResult(FragmentActivity.java:720)  
                   at android.app.Activity.startActivity(Activity.java:4807)  
                   at android.app.Activity.startActivity(Activity.java:4775)  
                   at com.b07.joesapp.adminMenu.AdminActionsController.onClick(AdminActionsController.java:49)  
                   at android.view.View.performClick(View.java:6294)  
                   at android.view.View$PerformClick.run(View.java:24770)  
                   at android.os.Handler.handleCallback(Handler.java:790)  
                   at android.os.Handler.dispatchMessage(Handler.java:99)  
                   at android.os.Looper.loop(Looper.java:164)  
                   at android.app.ActivityThread.main(ActivityThread.java:6494)  
                   at java.lang.reflect.Method.invoke(Native Method)  
                   at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438)  
                   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807)  

そして、ここでは私のクラスであると言うものだありがとう。 AdminHomePage

package com.b07.joesapp.adminMenu; 

import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.widget.Button; 

import com.b07.joesapp.R; 
import com.b07.joesapp.admin.VoiceRecognitionAdminController; 
import com.b07.users.Admin; 

public class AdminHomePage extends AppCompatActivity { 

    private Admin admin; 
    private Button toAdminActions; 
    private Button talkAdminCtrl; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_admin_home_page); 

     // get the admin and the inventory to create an AdminInterfaceImpl object to be passed on 
     admin = (Admin) getIntent().getSerializableExtra("adminUser"); 

     AdminActionsController controller = new AdminActionsController(this, admin); 
     toAdminActions = (Button) findViewById(R.id.toAdminActionsBtn); 
     toAdminActions.setOnClickListener(controller); 



     // this is what happens when the voice control button is clicked 
     talkAdminCtrl= (Button) findViewById(R.id.voiceControlAdminActionsBtn); 
     VoiceRecognitionAdminController voiceRecognitionAdmin = new VoiceRecognitionAdminController(this, admin); 
     talkAdminCtrl.setOnClickListener(voiceRecognitionAdmin); 

    } 
} 

AdminActionsController

package com.b07.joesapp.adminMenu; 

import android.content.Context; 
import android.content.Intent; 
import android.view.View; 

import com.b07.database.DatabaseSelectHelper; 
import com.b07.exceptions.DatabaseException; 
import com.b07.exceptions.interfaceexceptions.UserNotAuthenticatedException; 
import com.b07.inventory.Inventory; 
import com.b07.joesapp.admin.AdminControls; 
import com.b07.joesapp.admin.AdminInterfaceImpl; 
import com.b07.users.Admin; 

/** 
* Created by shama on 12/1/2017. 
*/ 

public class AdminActionsController implements View.OnClickListener { 

    private Context appContext; 
    private Admin adminUser; 
    private Inventory inventory; 
    private AdminInterfaceImpl adminInterface; 



    public AdminActionsController(Context context, Admin admin) { 
     appContext = context; 
     adminUser = admin; 
     try { 
      DatabaseSelectHelper selectHelper = new DatabaseSelectHelper(appContext); 
      inventory = selectHelper.getInventory(); 
     } catch (DatabaseException e) { 
      //will not be handled 
     } 
     try { 
      adminInterface = new AdminInterfaceImpl(adminUser, inventory, appContext); 
     } catch (UserNotAuthenticatedException e) { 
      // do something if exception is caught 
     } 
    } 


    @Override 
    public void onClick(View view) { 
     Intent intent = new Intent(appContext, AdminControls.class); 
     intent.putExtra("adminInterface", adminInterface); 
     appContext.startActivity(intent); 
    } 
} 

管理

package com.b07.users; 

import android.content.Context; 

import java.io.Serializable; 

/** 
* Class that represents an admin. 
* 
* @author Linda 
* 
*/ 
public class Admin extends User implements Serializable { 

    /** 
    * Initializes admin. 
    * 
    * @param id the id of the admin 
    * @param name the name of the admin 
    * @param age the age of the admin 
    * @param address the address of the admin 
    */ 
    public Admin(int id, String name, int age, String address) { 
    //Sets all appropriate variables 
    super(id, name, age, address); 
    } 

    /** 
    * Initializes authenticated admin. 
    * 
    * @param id the id of the admin 
    * @param name the name of the admin 
    * @param age the age of the admin 
    * @param address the address of the admin 
    * @param authenticated the authentication of the admin 
    */ 
    public Admin 
    (int id, String name, int age, String address, boolean authenticated, Context context) { 
    super(id, name, age, address, authenticated); 
    } 

    /** promoteEmployee removed **/ 
} 

インベントリ

/** 
* 
*/ 

package com.b07.inventory; 

import com.b07.exceptions.ItemNotFoundException; 
import java.io.Serializable; 
import java.util.HashMap; 

/** 
* Class that represents an inventory. 
* @author Linda 
* 
*/ 
public class InventoryImpl implements Inventory, Serializable { 

    // declare variables inside InventoryImpl instance 
    int totalItems = 0; 
    HashMap<Item, Integer> itemMap = new HashMap<>(); 

    /** 
    * Returns the item map of the inventory. 
    * @return itemMap 
    */ 
    @Override 
    public HashMap<Item, Integer> getItemMap() { 
    return this.itemMap; 
    } 

    /** 
    * Sets the item map of the inventory. 
    * @param itemMap the new item map 
    */ 
    @Override 
    public void setItemMap(HashMap<Item, Integer> itemMap) { 
    this.itemMap = itemMap; 
    this.setTotalItems(this.itemMap.size()); 

    } 

    /** 
    * Changes the quantity of a given item. 
    * @param item the item 
    * @param value the quantity changed 
    * @throws ItemNotFoundException if item not in inventory 
    */ 
    @Override 
    public void updateMap(Item item, Integer value) throws ItemNotFoundException { 
    // if the item exists it is added if not an exception is thrown 
    if (this.itemMap.containsKey(item)) { 
     this.itemMap.put(item, value); 
    } else { 
     throw new ItemNotFoundException(); 
    } 

    } 

    /** 
    * Returns the total number of items in the inventory. 
    * @return totalItems 
    */ 
    @Override 
    public int getTotalItems() { 
    return this.totalItems; 
    } 

    /** 
    * Sets the new total number of items in the inventory. 
    * @param total the new total 
    */ 
    @Override 
    public void setTotalItems(int total) { 
    this.totalItems = total; 

    } 

    /** 
    * Checks if the inventory contains the desired item. 
    * 
    * @param item the desired item 
    * @return true if it is in the inventory, false if not 
    */ 
    @Override 
    public boolean containsItem(Item item) { 
    if (itemMap.containsKey(item)) { 
     return true; 
    } 
    return false; 
    } 

    /** 
    * Returns the quantity of the desired item. 
    * 
    * @param item the desired item 
    * @return quantity the current quantity of item 
    * @throws ItemNotFoundException if item is not found in the inventory 
    */ 
    @Override 
    public int getItemQuantity(Item item) throws ItemNotFoundException { 
    // if the item exists then its quantity is returned otherwise an exception is thrown 
    if (this.itemMap.containsKey(item)) { 
     return this.itemMap.get(item); 
    } 
    throw new ItemNotFoundException(); 
    } 

} 

私は本当にここにこだわっています。私は何度も何度もチェックしてきましたが、すべてのオブジェクトがSerializableを実装していますが、私はまだ問題が何かを確かめていません。ありがとう!この方法では

答えて

0

public void onClick(View view) { 
    Intent intent = new Intent(appContext, AdminControls.class); 
    intent.putExtra("adminInterface", adminInterface); 
    appContext.startActivity(intent); 
} 

あなたはので、私はちょうどそれを試してみましたし、それが動作しませんでした。この

public void onClick(View view) { 
    Bundle bundle = new Bundle(); 
    bundle.putSerializable("adminInterface", adminInterface); 
    Intent intent = new Intent(appContext, AdminControls.class); 
    intent.putExtras(bundle); 
    appContext.startActivity(intent); 
} 
+0

てみてくださいカスタムオブジェクトを渡します。私はまだlogcatで同じエラーが発生します –

+0

admin =(Admin)getIntent()。getSerializableExtra( "adminUser");シリアライズ可能なコンテンツを置くこの行から。 &正しいシリアライズ可能なオブジェクトを配置するアクティビティを開始するためのすべてのインテントを確認します。 –

関連する問題