0

ローカルの xml ファイルから読み取るアプリを作成しようとしていますが、助けが必要です。ここでいくつかの記事を読んだだけでなく、google や youtube で xml ファイルを読み書きしましたが、それらのほとんどはオンラインのファイルに関するものです。Androidでxmlをローカルで読み書きしたいと考えています。これまでのところ、必要な手順は次のとおりです。

  1. XML ファイルを読み取ります。
  2. 要素を文字列配列に変換します。
  3. リストに文字列配列を入力します。

最初の2つが機能しないようです。コードや簡単な方法を探しているわけではありません。私は本当にこれを理解したいと思っていますが、ここにいるすべての教祖からのガイダンスが必要です. xml ファイルを読み取る方法が本当に見つかりません。ここで見つけたものから、xml ファイルを res/raw フォルダーに配置する必要があります。そこから、何をすべきかわかりません。それを配列に読み込むにはどうすればよいですか?これを起動して実行したら、コードを投稿して、同様の問題を抱えている他の人を助けるためにできることをします. 再度、感謝します!

4

2 に答える 2

2

あなたのメインクラスで

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.Toast;

public class SimpleList extends Activity {  //SimpleList is the name of this class

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        final ListView lv=(ListView)findViewById(R.id.listView1);       

        //final ArrayList<String> myNewList = new ArrayList<String>();

        ArrayAdapter<CharSequence> adapter=ArrayAdapter.createFromResource(this, R.array.simple_array,android.R.layout.simple_list_item_1);
        lv.setAdapter(adapter);
        lv.setOnItemClickListener(new OnItemClickListener() {

            @Override
            public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
                // TODO Auto-generated method stub      
                String item=lv.getItemAtPosition(arg2).toString();
                String itemordered;
                itemordered = item + " added to list";
                Toast.makeText(getApplicationContext(), itemordered, Toast.LENGTH_LONG).show();
            }
        });
    }
}

文字列配列をstrings.xmlに作成します

<resources>

    <string name="app_name">SimpleList</string>
    <string name="menu_settings">Settings</string>
    <string name="title_activity_main">SimpleList</string>

    <string-array name="simple_array">
        <item>Bacon Double Cheese Burger</item>
        <item>Bacon Cheeses Burger</item>
        <item>Cheese Burger</item>
        <item>Hamburger</item>
        <item>Grilled Chicken Sandwich</item>
        <item>Crispy Chicken Sandwich</item>
        <item>Chicken Strips</item>
        <item>Hot Dog</item>
        <item>Chocolate Chip Cookie Dough Polar Swirl</item>
        <item>Vanilla Shake</item>
        <item>Chocolate Shake</item>
        <item>Strawberry Shake</item>
    </string-array>


</resources>    

main.xmlでListViewのレイアウトを作成します

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <ListView
        android:id="@+id/listView1"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:divider="#FFCC00"
        android:dividerHeight="2dp" >
    </ListView>

</LinearLayout> 
于 2012-07-21T01:01:04.887 に答える
1

ようやく思い通りに動作するようになりました。これが私が達成しようとしていたことです。回答をくださった皆様、どうもありがとうございました!私はあなたの各パターンの断片を取り、必要なものに合わせてカスタマイズしました. 私は決して android/java/xml の専門家ではありませんが、これが私が得たものであり、私が望むように動作しています!

public class MainActivity extends Activity {

Spinner spinner;
List<String> ingredient = new ArrayList<String>();
List<String> effect1 = new ArrayList<String>();
List<String> effect2 = new ArrayList<String>();
List<String> effect3 = new ArrayList<String>();
List<String> effect4 = new ArrayList<String>();

XmlResourceParser myXml;
int eventType;
String nodeValue;

@Override
public void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    loadXml(); // Reads XML and loads it into Lists, One list for each element
    convertListToSpinner(); // Takes Lists and merges data with Spinners (Currently Unimplemented)


}


private void convertListToSpinner() {
    // TODO Auto-generated method stub

}


private void loadXml() {
    // TODO Auto-generated method stub
    myXml = getBaseContext().getResources().getXml(R.xml.xmlfilename);
    try {
        myXml.next();

    eventType = myXml.getEventType(); // Get current xml Event

    } catch (XmlPullParserException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

    while(eventType != XmlPullParser.END_DOCUMENT){
        if(eventType == XmlPullParser.START_DOCUMENT){
            // checks can be placed here to make sure file is read
        }
        else if(eventType == XmlPullParser.START_TAG){
            nodeValue = myXml.getName();

            try{
            if(nodeValue.equalsIgnoreCase("Ingredient")){ //Finds Ingredient tag
            myXml.next(); //Since the ingredient tag does not hold the text, we go to next element area
            ingredient.add(myXml.getText().trim()); // Set the text of the Ingredient tag to list
            }

            //Since the effect tags are followed by ending tags, we can just do nextText() to get tag text
            if(nodeValue.equalsIgnoreCase("Effect1")){
                effect1.add(myXml.nextText().trim()); // Set the text of the Effect1 tag to list
            }
            if(nodeValue.equalsIgnoreCase("Effect2")){
                effect2.add(myXml.nextText().trim()); // ditto
            }
            if(nodeValue.equalsIgnoreCase("Effect3")){
                effect3.add(myXml.nextText().trim()); // ditto
            }
            if(nodeValue.equalsIgnoreCase("Effect4")){
                effect4.add(myXml.nextText().trim()); // ditto
            }
            }catch(Exception e){
                e.getMessage();
            }


        }
        try {
            eventType = myXml.next();
        } catch (XmlPullParserException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

    for(int i = 0; ingredient.size() > i; i++){
        System.out.println(ingredient.get(i));

    }

}


@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.activity_main, menu);
    return true;
}




}

また、XML ファイルは現在の形式です。

<?xml version="1.0" encoding="UTF-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android" >
    <item
        name="item"
        type="string">
        <Ingredient>
         Intrests
            <effect1>
            Android
            </effect1>
            <effect2>
            Programming
            </effect2>
            <effect3>
            Type O Negative
            </effect3>
            <effect4>
            Sirenia
            </effect4>
        </Ingredient>
        <Ingredient>
        Virtues
            <effect1>
        Power
            </effect1>
            <effect2>
        Money
            </effect2>
            <effect3>
        Knowledge
            </effect3>
            <effect4>
        Kindness
            </effect4>
        </Ingredient>
    </item>
</resources>

これが、同様の問題を抱えている他の人の助けになることを願っています。繰り返しになりますが、貢献してくれた Sobo と HADEV に感謝します!!

行われていることを行うためのはるかに良い方法があると確信していますが、これが機能するようになったことを嬉しく思います:)

于 2012-07-21T18:20:48.077 に答える