1

最初に下手な英語で申し訳ありません。

これが私の目標です。

リンクからxmlを読み取る必要があります(実際にはWebサービスからですが、ホストに問題があり、Webサービスがデータを返すため、直接xmlリンクを使用しています)。次に、それらのデータを listView に書き込む必要があります。

ここに私の問題があります。

そのxmlをWebリンクから読みましたが、解析されたxmlだと思います。私がこのように言うのは、プロジェクトをデバッグすると、GettersSetters 変数にいくつかのデータが表示されるからです。しかし、それらのデータをアダプター クラスに送信しても、アクションはないと思います。listView に変更が表示されないためです。

ここに私の MainActivity.java があります

public class MainActivity extends Activity {
XMLGettersSetters data;

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

    try {
        SAXParserFactory saxPF = SAXParserFactory.newInstance();
        SAXParser saxP = saxPF.newSAXParser();
        XMLReader xmlR = saxP.getXMLReader();

        URL url = new URL("http://utkuyegen.com/dersProgramiListele.xml");

        XMLHandler myXMLHandler = new XMLHandler();
        xmlR.setContentHandler(myXMLHandler);
        xmlR.parse(new InputSource(url.openStream()));

    } catch (Exception e) {
        Log.e("xmlParser", e.getMessage());
        System.out.println(e);
    }
    data = XMLHandler.data;
    System.out.println("data = XMLHandler.data");

    try {
        ListView lv = (ListView) findViewById(R.id.listView1);
        System.out.println("listView tanımlandı");

        dataAdapter adapter = new dataAdapter(this, R.layout.listview_row,
                data.getDersID(), data.getDersAdi());
        System.out.println("adapter tanımlandı");

        lv.setAdapter(adapter);
        System.out.println("adapter listView 'e atandı");

        // TextView textView1 = (TextView) findViewById(R.id.textView1);
        // textView1.setText(data.getDersID().get(2));

        System.out.println("onCreate son satır");
    } catch (Exception e) {
        Log.d("tag", e.getMessage());
    }

}

public class dataAdapter extends ArrayAdapter<XMLGettersSetters> {
    // XMLGettersSetters items;
    ArrayList<String> _dID, _dAdi;

    public dataAdapter(Context context, int textViewResourceId,
            ArrayList<String> dID, ArrayList<String> dAdi) {
        super(context, textViewResourceId);
        this._dID = dID;
        this._dAdi = dAdi;
        Log.d("da", "1");
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        if (convertView == null) {
            LayoutInflater vi = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            convertView = vi.inflate(R.layout.listview_row, null);
            Log.d("da", "5");
        }

        Log.d("da", "2");
        TextView dersID = (TextView) convertView.findViewById(R.id.dersID);
        TextView dersAdi = (TextView) convertView
                .findViewById(R.id.dersAdi);
        Log.d("da", "3");
        dersID.setText(_dID.get(position));
        dersAdi.setText(_dAdi.get(position));
        Log.d("da", "4");
        return convertView;
    }
}

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

および XMLGettersSetters.java

public class XMLGettersSetters {
private ArrayList<String> dersID = new ArrayList<String>();
private ArrayList<String> dersAdi = new ArrayList<String>();

public XMLGettersSetters(ArrayList<String> dersID, ArrayList<String> dersAdi) {
    this.dersID = dersID;
    this.dersAdi = dersAdi;
}

public XMLGettersSetters() {
}

public String getDersID_tek(int i) {
    return dersID.get(i);
}
public ArrayList<String> getDersID() {
    return dersID;
}
public void setDersID(String dersID) {
    this.dersID.add(dersID);
}

public String getDersAdi_tek(int i) {
    return dersAdi.get(i);
}
public ArrayList<String> getDersAdi() {
    return dersAdi;
}
public void setDersAdi(String dersAdi) {
    this.dersAdi.add(dersAdi);
}
}

そして XMLHandler.java

public class XMLHandler extends DefaultHandler {

    String elementValue = null;
    Boolean elementOn = false;

    public static XMLGettersSetters data = null;

    public static XMLGettersSetters getXMLData() {
        return data;
    }

    public static void setXMLData(XMLGettersSetters data) {
        XMLHandler.data = data;
    }

    @Override
    public void startElement(String uri, String localName, String qName,
            Attributes attributes) throws SAXException {

        elementOn = true;

        if (localName.equals("ArrayOfDersProgrami"))
        {
            data = new XMLGettersSetters();
        } else if (localName.equals("dersProgrami"))
        {
            /** 
             * We can get the values of attributes for eg. if the CD tag had an attribute( <CD attr= "band">Akon</CD> ) 
             * we can get the value "band". Below is an example of how to achieve this.
             * 
             * String attributeValue = attributes.getValue("attr");
             * data.setAttribute(attributeValue);
             * 
             * */
        }
    }

    @Override
    public void endElement(String uri, String localName, String qName)
            throws SAXException {

        elementOn = false;

        /** 
         * Sets the values after retrieving the values from the XML tags
         * */ 
        if (localName.equalsIgnoreCase("DersID"))
            data.setDersID(elementValue);
        if (localName.equalsIgnoreCase("DersAdi"))
            data.setDersAdi(elementValue);
    }

    @Override
    public void characters(char[] ch, int start, int length)
            throws SAXException {
        if (elementOn) {
            elementValue = new String(ch, start, length);
            elementOn = false;
        }
    }
}

ところで、私は自分のコードとデバッグである程度のポイントを得ました。

このコードをデバッグすると、データを理解できないことがわかります。

これは私のxmlファイルです

<?xml version="1.0" encoding="utf-8"?>
<ArrayOfDersProgrami xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://tempuri.org/">
  <dersProgrami>
    <DersID>0</DersID>
    <DersAdi>0</DersAdi>
  </dersProgrami>
  <dersProgrami>
    <DersID>1</DersID>
    <DersAdi>1</DersAdi>
  </dersProgrami>
  <dersProgrami>
    <DersID>2</DersID>
    <DersAdi>4</DersAdi>
  </dersProgrami>
  <dersProgrami>
    <DersID>3</DersID>
    <DersAdi>9</DersAdi>
  </dersProgrami>
  <dersProgrami>
    <DersID>4</DersID>
    <DersAdi>16</DersAdi>
  </dersProgrami>
</ArrayOfDersProgrami>

ご覧のとおり、5 つのデータがありますが、デバッグ時に言ったように、配列に 12 のデータが表示されます。データ変数「data = XMLHandler.data;」をスコープします。2 つの arrayList、dersAdi および dersID が表示されます。次に、dersAdi をスコープします。配列 = Object[12]、modCount = 5、サイズ = 5 を参照します。次に、配列 = Obj をスコープします。[0、1、4、9、16、null、null、null、null を参照します。 、ヌル、ヌル、ヌル]。

それはどういう意味ですか?私のxmlには5つのデータがありますが、12のデータがあります。

そして、私が欲しいもの; 提案が必要で、期限が迫っています。

このプロジェクトは私の季節です

4

1 に答える 1

0

これは通常の動作だと思います。ArrayList<> をデバッグしているため、最初はサイズ 12 で null のセルを持つ配列があり、保持する整数があることがわかるように、クラス ArrayList への変数が表示されます。アイテムの実数 (modCount)

クラスArrayListがよく開発されていることを心配しないでください:P

私が言うことから、他のArrayListをデバッグできることを確認するには、同じ動作が得られます。

編集:

adapter.notifyDataSetChanged();アダプタをリストビューに設定してから呼び出してみてください

于 2013-05-24T09:15:54.773 に答える