0

できるだけ具体的にしようと思います。xml ファイルに取り込まれるカスタム オブジェクト クラスを作成しました。クラスはロボット用で、ロボットには武器や鎧などがあります。ロボットの各反復を配列リストに保存しています。次に、リスト ビュー (カスタム リスト アダプター) にロボットに関する情報を入力します。ロボットのさまざまな部分をクリックすると、それらのコンポーネントに取り付けられている武器や鎧などが表示されます。これはすべて正常に機能し、どういうわけかランダムに機能しなくなりました。アクティビティ間で渡されるときにアプリがデータを失っているか、GC が一部のデータを削除しているようです。突然間違ったデータが表示されたり、データが欠落したりする理由を突き止めようとして、私は髪を引っ張っています。ここにコードを投稿できればいいのにと思いますが、実際にはアプリ全体でこの問題が発生しています。私の質問だと思います。カスタムオブジェクトを配列リストに適切に保存していますか? または彼らの別の方法です。以前は機能していたため、どこからデバッグを開始すればよいかさえわかりません。

private Mech loadMDF(Mech mech) {

    MechComponents mechComponents = null;
    String mechfile = "";
    String name = "";
    float HP = 0;
    int maxSlots = 0;
    try {
        XmlPullParserFactory factory;

        factory = XmlPullParserFactory.newInstance();
        factory.setNamespaceAware(true);
        XmlPullParser xpp = factory.newPullParser();
        // FileInputStream fis = new FileInputStream(file);

        // set the input for the parser using an InputStreamReader
        // xpp.setInput(new InputStreamReader(fis));
        xpp.setInput(getResources().getAssets().open(mech.mdf), null);
        int eventType = xpp.getEventType();

        while (eventType != XmlPullParser.END_DOCUMENT) {
            if (eventType == XmlPullParser.START_DOCUMENT) {

            } else if (eventType == XmlPullParser.START_TAG) {
                if (xpp.getName().equals("MechDefinition")) {
                    for (int i = 0; i < xpp.getAttributeCount(); i++) {
                        if (xpp.getAttributeName(i).equals("HardpointPath")) {
                            boolean found = false;
                            String[] theFilename = xpp.getAttributeValue(i)
                                    .split("/");
                            for (int n = 0; n < MechHardPointFiles.size(); n++) {
                                if (MechHardPointFiles.get(n).equals(
                                        theFilename[theFilename.length - 1])) {
                                    found = true;
                                }
                            }
                            if (!found) {
                                MechHardPointFiles
                                        .add(theFilename[theFilename.length - 1]);
                                loadMechFile(theFilename[theFilename.length - 1]);
                            }
                            mechfile = theFilename[theFilename.length - 1];

                        }
                    }
                }
                if (xpp.getName().equals("Mech")) {
                    for (int i = 0; i < xpp.getAttributeCount(); i++) {
                        if (xpp.getAttributeName(i).equals("MaxTons")) {
                            mech.MaxTons = Float.parseFloat(xpp.getAttributeValue(i));

                        }
                        if (xpp.getAttributeName(i).equals("BaseTons")) {
                            mech.BaseTons = Float
                                    .parseFloat(xpp.getAttributeValue(i));
                        }
                        if (xpp.getAttributeName(i).equals("CanEquipECM")) {
                            mech.setCanEquipECM(xpp.getAttributeValue(i));
                        }
                        if (xpp.getAttributeName(i).equals("MaxJumpJets")) {
                            mech.MaxJumpJets = xpp.getAttributeValue(i);
                        }
                        if (xpp.getAttributeName(i).equals("LeftArmAim")) {
                            // mech.MaxTons =
                            // Float.parseFloat(xpp.getAttributeValue(i));
                        }
                        if (xpp.getAttributeName(i).equals("RightArmAim")) {
                            // mech.MaxTons =
                            // Float.parseFloat(xpp.getAttributeValue(i));
                        }
                        if (xpp.getAttributeName(i).equals("MinEngineRating")) {
                            mech.MinEngineRating = Integer.parseInt(xpp
                                    .getAttributeValue(i));
                        }
                        if (xpp.getAttributeName(i).equals("MaxEngineRating")) {
                            mech.MaxEngineRating = Integer.parseInt(xpp
                                    .getAttributeValue(i));
                        }
                        if (xpp.getAttributeName(i).equals("MaxJumpJets")) {
                            mech.setCanEquipECM(xpp.getAttributeValue(i));
                        }

                    }
                }
                if (xpp.getName().equals("Component")) {
                    mechComponents = new MechComponents();
                    for (int i = 0; i < xpp.getAttributeCount(); i++) {

                        if (xpp.getAttributeName(i).equals("Name")) {

                            name = helperObjects.checkForSpace(xpp
                                    .getAttributeValue(i));
                        }
                        if (xpp.getAttributeName(i).equals("HP")) {
                            HP = Float.parseFloat(xpp.getAttributeValue(i));
                        }
                        if (xpp.getAttributeName(i).equals("Slots")) {
                            maxSlots = Integer.parseInt(xpp.getAttributeValue(i));
                        }

                    }
                }
                if (xpp.getName().equals("Internal")) {

                    for (int i = 0; i < xpp.getAttributeCount(); i++) {

                        if (xpp.getAttributeName(i).equals("Name")) {
                            mechComponents.addToSlot(xpp.getAttributeValue(i));
                        }

                    }
                }
                if (xpp.getName().equals("Hardpoint")) {
                    int hpType = 0;
                    int hpSlots = 0;
                    for (int i = 0; i < xpp.getAttributeCount(); i++) {

                        if (xpp.getAttributeName(i).equals("Type")) {

                            hpType = Integer.parseInt(xpp.getAttributeValue(i));
                        }
                        if (xpp.getAttributeName(i).equals("ID")) {
                            for (int f = 0; f < MechHardPoints.size(); f++) {
                                if (MechHardPoints.get(f).hpFile.equals(mechfile)) {
                                    if (MechHardPoints.get(f).id == Integer
                                            .parseInt(xpp.getAttributeValue(i))) {
                                        hpSlots = MechHardPoints.get(f).Slots;

                                        break;
                                    }
                                }
                            }

                        }

                    }
                    mechComponents.addHardPointRestriction(new HardPointRestriction(
                            hpType, hpSlots));
                }

            } else if (eventType == XmlPullParser.END_TAG) {
                if (xpp.getName().equals("Component")) {
                    mechComponents.name = name;
                    mechComponents.HP = HP;
                    mechComponents.maxSlots = maxSlots;
                    mech.components.add(mechComponents);
                    Log.i("mwo_app",
                            "Hard Point Check: "
                                    + Integer.toString(mechComponents
                                            .getHardPointRestrictions().size()));
                }

            } else if (eventType == XmlPullParser.TEXT) {

            }

            eventType = xpp.next();
        }

    } catch (XmlPullParserException e) {

        e.printStackTrace();
    } catch (IOException e) {

        e.printStackTrace();
    }

    return mech;
}

これは、アクティビティを切り替えるために使用する別のスニペットです

inte = new Intent(MainActivity2.this, MechView.class);
                Bundle b = new Bundle();
                b.putSerializable("com.typhonpacific.mwoapp.mech",
                        mechListAdapter.getItem(arg2));
                inte.putExtras(b);
                startActivity(inte);
4

0 に答える 0