最初に下手な英語で申し訳ありません。
これが私の目標です。
リンクから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のデータがあります。
そして、私が欲しいもの; 提案が必要で、期限が迫っています。
このプロジェクトは私の季節です