xml解析を使用してAndroidリストビューを開発する必要があります。
mysqlサーバーからxmlフィードを取得しています。製品は日々のアクティビティに追加されます。
ここで私は3種類のリストビューが必要です:
1st view: Category
2nd view: SubCategory
3rd view: Product
fistviewでは、Categorynameのみを表示する必要があります。
私のxmlフィードから最初のビューを表示する必要があります
カテゴリ名のみ
2番目のビュー:
Categorynameに属するサブカテゴリ名を表示する必要があります。
3番目のビューで:
製品名を表示する必要があり、価格はサブカテゴリ名に属しています。
これは私の最初のビューコードです:
public class MainActivity extends Activity {
static final String URL =http://api1.sfsfsfsf.com/dev/categories/?fields=&categoryid=3&access_token=bfb787a6e
static String KEY_CATEGORY = "category";
static final String KEY_TITLE = "categoryName";
static final String KEY_SUBCATE = "categoryId";
ListView lview3;
LazyAdapter adapter;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final ArrayList<HashMap<String, String>> songsList = new ArrayList<HashMap<String, String>>();
XMLParser parser = new XMLParser();
String xml = parser.getXmlFromUrl(URL); // getting XML from URL
Document doc = parser.getDomElement(xml); // getting DOM element
NodeList nl = doc.getElementsByTagName(KEY_CATEGORY);
// looping through all song nodes <song>
for (int i = 0; i < nl.getLength(); i++) {
// creating new HashMap
HashMap<String, String> map = new HashMap<String, String> ();
Element e = (Element) nl.item(i);
map.put(KEY_TITLE, parser.getValue(e, KEY_TITLE));
map.put(KEY_SUBCATE, parser.getValue(e, KEY_SUBCATE));
songsList.add(map);
}
lview3 = (ListView) findViewById(R.id.listView1);
adapter = new LazyAdapter(this, songsList);
lview3.setAdapter(adapter);
lview3.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
HashMap<String, String> map = songsList.get(position);
Intent in = new Intent(
MainActivity.this,
com.example.androidcartxml.SubCate.class);
in.putExtra(KEY_TITLE, map.get(KEY_TITLE));
in.putExtra(KEY_SUBCATE, map.get(KEY_SUBCATE));
}
});
}
}
ここでは、カテゴリリストを1番目のビューに表示しています。また、カテゴリIDを1番目のビューから2番目のビューに渡します。
これは私の2番目のビューコードです:
public class SubCate extends Activity {
String mTitle;
static final String URL = "http://api1.sfsfsff.com/dev/categories/?fields=&categoryid="+mTitle+"&access_token=bfb787a6e11";
static String KEY_CATEGORY = "category";
static final String KEY_TITLE = "categoryName";
static final String KEY_NAME ="categoryId";
static final String KEY_SUBCATE = "categoryId";
ListView lview3;
ListViewCustomAdapter adapter;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.subcate);
Bundle b = getIntent().getExtras();
//String s= getIntent().getStringExtra("orderid");
mTitle = b.getString(KEY_SUBCATE);
TextView grandtotal = (TextView) findViewById(R.id.subcate);
grandtotal.setText("Welcome ," + mTitle );
final ArrayList<HashMap<String, String>> songsList = new ArrayList<HashMap<String, String>>();
// String key = getIntent().getStringExtra(KEY_TITLE);
XMLParser parser = new XMLParser();
String xml = parser.getXmlFromUrl(URL); // getting XML from URL
Document doc = parser.getDomElement(xml); // getting DOM element
NodeList nl = doc.getElementsByTagName(KEY_CATEGORY);
// looping through all song nodes <song>
for (int i = 0; i < nl.getLength(); i++) {
// creating new HashMap
HashMap<String, String> map = new HashMap<String, String>();
Element e = (Element) nl.item(i);
// adding each child node to HashMap key => value
map.put(KEY_TITLE, parser.getValue(e, KEY_TITLE));
map.put(KEY_NAME, parser.getValue(e, KEY_NAME));
songsList.add(map);
}
lview3 = (ListView) findViewById(R.id.listView1);
adapter = new ListViewCustomAdapter(this, songsList);
lview3.setAdapter(adapter);
lview3.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
HashMap<String, String> map = songsList.get(position);
Intent in = new Intent(
SubCate.this,
com.example.androidcartxml.Catalogue.class);
in.putExtra(KEY_TITLE, map.get(KEY_TITLE));
in.putExtra(KEY_NAME, map.get(KEY_NAME));
// in.putExtra(KEY_THUMB_URL, map.get(KEY_THUMB_URL));
//in.putExtra(KEY_PRICE, map.get(KEY_PRICE));
startActivity(in);
}
});
2番目のビューでcategoryid値が表示され、1番目のアクティビティから取得します。ただし、リンクするIDは、サブカテゴリリストを取得しないことを意味します。これらの解決策を教えてください。
例:
これは私のサブカテゴリのリンクです:
[http://api1.sfsfsffsf.com/dev/categories/?fields="_categoryid=10&access_token=bfb787a6e1] [1]
サブカテゴリリストを表示したことを意味します。
ここでは、そのカテゴリID 10(categoryid = 10)を最初から2番目に渡して、テキストビューに保存する必要があります。
mTitle = b.getString(KEY_SUBCATE);
TextView grandtotal = (TextView) findViewById(R.id.subcate);
grandtotal.setText("Welcome ," + mTitle );
リンクでこれらのmTitle値を呼び出す必要があります。これは、サブカテゴリリストに表示されないことを意味します。助けてください。
[http://api1.sfsfsff.com/dev/categories/?fields3%categoryid="+mTitle+"&access_token=bfb787a6] [2]
私のコードの何が問題になっていますか。どのようにしてそのcategoryidを私のURLに呼び出すことができますか。これらの解決策を教えてください。
編集:
これは私のURLです:
[http://api1.sfsfsfsf.com/dev/categories/?fields3%categoryid=10&access_token=bfb787a6e] [3]
私が直接言及したcategoryid=10は、すべての製品を無効にしたことを意味します。
しかし、私はこのURLを次のように変更する必要があります:
[http://api1.sfsfsf.com/dev/categories/?fields3%categoryid="+mTitle+"&access_token=bfb787a6e17] [4]
カテゴリID="+ mTitle +"のようにURLを変更したので、すべての製品が表示されないことを意味します。
mTitleの価値は、私の以前の活動から得られています。
私のコードの何が問題なのですか。
私のmTitle値は10です。私は手段のようなコードを書かなければなりません
grandtotal.setText("Welcome ," + mTitle );
表示されたmTitle値は正常に表示されます。
grandtotal.setText("Welcome ," + URL );
私にnull値を与えたことを意味します