0

デバイスのストレージにオブジェクトを保存するのに問題があります。最初は を取得していたNotSerializableExceptionので、オブジェクトをシリアライズ可能にしましたが、現在はtry {} catch {}ブロック内で をスローしており、StreamCorruptedExceptionこれは という行を指していると思いますin = new ObjectInputStream(byteArray);。その結果、リストにデータが取り込まれていません。ブロックの外側にリストを設定することはできtry {} catch {}ますが、リストのオブジェクトをデバイスに格納するという目的が無効になります。関連するコードは次のとおりです。

public class MainListFragment extends ListFragment implements Serializable {

    OnListSelectedListener mCallback;
    public transient ObjectStorage mainObjectList = new ObjectStorage(); // creates
                                                                        // the
                                                                        // list
                                                                        // of
                                                                        // objects
    SharedPreferences mPrefs;
    int mCurrentPosition = -1;

    // The container Activity must implement this interface so the frag can
    // deliver messages
    public interface OnListSelectedListener {

        /** Called by ListFragment when a list item is selected */
        public void onItemSelected(int position, String schedulename,
                String[] ampm, boolean[] days, int[] times, boolean vibrate);
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    }

    @Override
    public void onStart() {
        super.onStart();

        updateStorage();
        ByteArrayInputStream byteArray = new ByteArrayInputStream(mPrefs
                .getString("myobject", "").getBytes());
        ObjectInputStream in;
        try {
            in = new ObjectInputStream(byteArray);
            ObjectStorage updatedStorageList = (ObjectStorage) in.readObject();
            Log.i("mydebug", "Populating list with storage");
            CustomListAdapter adapter = new CustomListAdapter(getActivity(),
                    R.layout.listview_item_row, updatedStorageList);
            // setListAdapter(new ArrayAdapter<String>(getActivity(), layout,
            // arraylist));
            setListAdapter(adapter);
            setListShown(true);
        } catch (StreamCorruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (ClassNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

    public void updateStorage() {
        getActivity();// used for MODE_PRIVATE

        // store object list into android system
        mPrefs = getActivity().getPreferences(Context.MODE_PRIVATE);
        SharedPreferences.Editor ed = mPrefs.edit();
        ByteArrayOutputStream arrayOutputStream = new ByteArrayOutputStream();
        ObjectOutputStream out;
        try {
            Log.i("mydebug", "Updating object storage");
            out = new ObjectOutputStream(arrayOutputStream);
            out.writeObject(mainObjectList);
            out.close();
            arrayOutputStream.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
        ed.putString("myobject", arrayOutputStream.toString());
        ed.commit();
    }
}

LogCat 情報と同様に:

03-02 00:41:07.857: I/mydebug(12435): TEMPMAINFRAG: MainListFragment{41dfe598 id=0x7f070028}
03-02 00:41:07.857: I/mydebug(12435): 1
03-02 00:41:07.857: D/AbsListView(12435): Get MotionRecognitionManager
03-02 00:41:07.877: D/AbsListView(12435): Get MotionRecognitionManager
03-02 00:41:07.877: I/mydebug(12435): Updating object storage
03-02 00:41:07.877: W/System.err(12435): java.io.StreamCorruptedException
03-02 00:41:07.877: W/System.err(12435):    at java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:2106)
03-02 00:41:07.877: W/System.err(12435):    at java.io.ObjectInputStream.<init>(ObjectInputStream.java:372)
03-02 00:41:07.877: W/System.err(12435):    at com.example.android.fragments.MainListFragment.onStart(MainListFragment.java:94)
03-02 00:41:07.877: W/System.err(12435):    at android.support.v4.app.Fragment.performStart(Fragment.java:1332)
03-02 00:41:07.877: W/System.err(12435):    at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:906)
03-02 00:41:07.877: W/System.err(12435):    at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1080)
03-02 00:41:07.877: W/System.err(12435):    at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1062)
03-02 00:41:07.877: W/System.err(12435):    at android.support.v4.app.FragmentManagerImpl.dispatchStart(FragmentManager.java:1815)
03-02 00:41:07.877: W/System.err(12435):    at android.support.v4.app.FragmentActivity.onStart(FragmentActivity.java:518)
03-02 00:41:07.877: W/System.err(12435):    at com.example.android.fragments.MainActivity.onStart(MainActivity.java:104)
03-02 00:41:07.877: W/System.err(12435):    at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1178)
03-02 00:41:07.887: W/System.err(12435):    at android.app.Activity.performStart(Activity.java:5058)
03-02 00:41:07.887: W/System.err(12435):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2061)
03-02 00:41:07.887: W/System.err(12435):    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2113)
03-02 00:41:07.887: W/System.err(12435):    at android.app.ActivityThread.handleRelaunchActivity(ActivityThread.java:3554)
03-02 00:41:07.887: W/System.err(12435):    at android.app.ActivityThread.access$800(ActivityThread.java:139)
03-02 00:41:07.887: W/System.err(12435):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1230)
03-02 00:41:07.887: W/System.err(12435):    at android.os.Handler.dispatchMessage(Handler.java:99)
03-02 00:41:07.887: W/System.err(12435):    at android.os.Looper.loop(Looper.java:137)
03-02 00:41:07.887: W/System.err(12435):    at android.app.ActivityThread.main(ActivityThread.java:4918)
03-02 00:41:07.887: W/System.err(12435):    at java.lang.reflect.Method.invokeNative(Native Method)
03-02 00:41:07.887: W/System.err(12435):    at java.lang.reflect.Method.invoke(Method.java:511)
03-02 00:41:07.887: W/System.err(12435):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1004)
03-02 00:41:07.887: W/System.err(12435):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:771)
03-02 00:41:07.887: W/System.err(12435):    at dalvik.system.NativeStart.main(Native Method)
03-02 00:41:07.947: I/Adreno200-EGLSUB(12435): <ConfigWindowMatch:2087>: Format RGBA_8888.
03-02 00:41:08.908: I/mydebug(12435): TEMPMAINFRAG: MainListFragment{41e237f8 id=0x7f070028}
03-02 00:41:08.908: I/mydebug(12435): 1
03-02 00:41:08.918: D/AbsListView(12435): Get MotionRecognitionManager
03-02 00:41:08.928: D/AbsListView(12435): Get MotionRecognitionManager
03-02 00:41:08.938: I/mydebug(12435): Updating object storage
03-02 00:41:08.938: W/System.err(12435): java.io.StreamCorruptedException
03-02 00:41:08.938: W/System.err(12435):    at java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:2106)
03-02 00:41:08.938: W/System.err(12435):    at java.io.ObjectInputStream.<init>(ObjectInputStream.java:372)
03-02 00:41:08.938: W/System.err(12435):    at com.example.android.fragments.MainListFragment.onStart(MainListFragment.java:94)
03-02 00:41:08.938: W/System.err(12435):    at android.support.v4.app.Fragment.performStart(Fragment.java:1332)
03-02 00:41:08.938: W/System.err(12435):    at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:906)
03-02 00:41:08.938: W/System.err(12435):    at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1080)
03-02 00:41:08.938: W/System.err(12435):    at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1062)
03-02 00:41:08.948: W/System.err(12435):    at android.support.v4.app.FragmentManagerImpl.dispatchStart(FragmentManager.java:1815)
03-02 00:41:08.948: W/System.err(12435):    at android.support.v4.app.FragmentActivity.onStart(FragmentActivity.java:518)
03-02 00:41:08.948: W/System.err(12435):    at com.example.android.fragments.MainActivity.onStart(MainActivity.java:104)
03-02 00:41:08.948: W/System.err(12435):    at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1178)
03-02 00:41:08.948: W/System.err(12435):    at android.app.Activity.performStart(Activity.java:5058)
03-02 00:41:08.948: W/System.err(12435):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2061)
03-02 00:41:08.948: W/System.err(12435):    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2113)
03-02 00:41:08.948: W/System.err(12435):    at android.app.ActivityThread.handleRelaunchActivity(ActivityThread.java:3554)
03-02 00:41:08.948: W/System.err(12435):    at android.app.ActivityThread.access$800(ActivityThread.java:139)
03-02 00:41:08.948: W/System.err(12435):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1230)
03-02 00:41:08.948: W/System.err(12435):    at android.os.Handler.dispatchMessage(Handler.java:99)
03-02 00:41:08.948: W/System.err(12435):    at android.os.Looper.loop(Looper.java:137)
03-02 00:41:08.958: W/System.err(12435):    at android.app.ActivityThread.main(ActivityThread.java:4918)
03-02 00:41:08.958: W/System.err(12435):    at java.lang.reflect.Method.invokeNative(Native Method)
03-02 00:41:08.958: W/System.err(12435):    at java.lang.reflect.Method.invoke(Method.java:511)
03-02 00:41:08.958: W/System.err(12435):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1004)
03-02 00:41:08.958: W/System.err(12435):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:771)
03-02 00:41:08.958: W/System.err(12435):    at dalvik.system.NativeStart.main(Native Method)
03-02 00:41:09.178: I/Adreno200-EGLSUB(12435): <ConfigWindowMatch:2087>: Format RGBA_8888.
03-02 00:41:52.326: W/IInputConnectionWrapper(12435): getExtractedText on inactive InputConnection
03-02 00:41:52.326: W/IInputConnectionWrapper(12435): getTextBeforeCursor on inactive InputConnection
03-02 00:41:52.326: W/IInputConnectionWrapper(12435): getSelectedText on inactive InputConnection
03-02 00:41:52.326: W/IInputConnectionWrapper(12435): getTextAfterCursor on inactive InputConnection
03-02 00:41:52.326: W/IInputConnectionWrapper(12435): getExtractedText on inactive InputConnection
03-02 00:41:52.326: W/IInputConnectionWrapper(12435): getTextBeforeCursor on inactive InputConnection
03-02 00:41:52.336: W/IInputConnectionWrapper(12435): getExtractedText on inactive InputConnection
03-02 00:41:52.336: W/IInputConnectionWrapper(12435): getTextBeforeCursor on inactive InputConnection
03-02 00:41:52.336: W/IInputConnectionWrapper(12435): getSelectedText on inactive InputConnection
03-02 00:41:52.336: W/IInputConnectionWrapper(12435): getTextAfterCursor on inactive InputConnection
03-02 00:41:52.336: W/IInputConnectionWrapper(12435): getExtractedText on inactive InputConnection
03-02 00:41:52.336: W/IInputConnectionWrapper(12435): getTextBeforeCursor on inactive InputConnection
03-02 00:41:52.336: W/IInputConnectionWrapper(12435): getSelectedText on inactive InputConnection
03-02 00:41:52.336: W/IInputConnectionWrapper(12435): getTextAfterCursor on inactive InputConnection
03-02 00:41:52.336: W/IInputConnectionWrapper(12435): beginBatchEdit on inactive InputConnection
03-02 00:41:52.336: W/IInputConnectionWrapper(12435): endBatchEdit on inactive InputConnection
03-02 00:41:52.336: W/IInputConnectionWrapper(12435): getExtractedText on inactive InputConnection
03-02 00:41:52.336: W/IInputConnectionWrapper(12435): getTextBeforeCursor on inactive InputConnection
03-02 00:41:52.336: W/IInputConnectionWrapper(12435): getSelectedText on inactive InputConnection
03-02 00:41:52.336: W/IInputConnectionWrapper(12435): getTextAfterCursor on inactive InputConnection
03-02 00:41:52.336: W/IInputConnectionWrapper(12435): beginBatchEdit on inactive InputConnection
03-02 00:41:52.336: W/IInputConnectionWrapper(12435): endBatchEdit on inactive InputConnection
4

1 に答える 1

0

すべての ByteArrayInput/OutputStreams、String への変換、String.getBytes() 呼び出し、およびシリアライズするオブジェクト、FileOutputStream に直接接続されたオブジェクト、またはその逆の writeObject() の直接呼び出しではないすべてのものを取り除きます。 FileInputStream に直接接続された ObjectInputStream から必要なオブジェクトを直接読み取ります。

3 つまたは 4 つの別々のポイントでデータを破損しています。データが破損していなくても、このマラーキーは実際には必要ありません。

于 2013-03-02T23:01:27.860 に答える