1

\在android编程中..我喜欢从url(xmlparsing)检索xmltags中的数据,同时我想加载进度,直到从xmltags检索数据。我附上我的代码检查它的仪式或错误谢谢\

 \\main activity\\


public class act extends Activity
{

 \\button used to start the function after the click\\

    Button b;
    public ProgressDialog mDialog;
    @Override
     public void onCreate(Bundle savedInstanceState) {

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

        b=(Button)findViewById(R.id.button1);
        b.setOnClickListener(new OnClickListener() {

            public void onClick(View v) {
                // TODO Auto-generated method stub
                new GetTask().execute();

            }
        });
}
   \\my asynctask\\

class GetTask extends AsyncTask<Object, Void, String>
{



    @Override
    protected void onPreExecute()
    {
        super.onPreExecute();

         mDialog = new ProgressDialog(act.this);
         mDialog.setMessage("Please wait...");
         mDialog.show();
    }
     @Override
    protected String doInBackground(Object... params)
    {

  \\ui programetically declare the textviews\\

                 try {
                    LinearLayout layout = new LinearLayout(act.this);
                    layout.setOrientation(1);
                    TextView no[];
                    TextView na[];
                    TextView c[];


                  URL url = new URL("http://api.androidhive.info/pizza/?format=xml");          
                  DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();          
                  DocumentBuilder db = dbf.newDocumentBuilder();
                  Document doc = db.parse(new InputSource(url.openStream()));
                  doc.getDocumentElement().normalize();
                  NodeList nodeList = doc.getElementsByTagName("item");
                  no = new TextView[nodeList.getLength()];
                  na = new TextView[nodeList.getLength()];
                  c = new TextView[nodeList.getLength()];

                  for (int i = 0; i < nodeList.getLength(); i++) {
                      Node node = nodeList.item(i);
                      no[i] = new TextView(act.this);
                      na[i] = new TextView(act.this);
                      c[i] = new TextView(act.this);
                      Element fstElmnt = (Element) node;

                      NodeList idlist = fstElmnt.getElementsByTagName("id");
                      Element numelement = (Element) idlist.item(0);
                      idlist = numelement.getChildNodes();
                      no[i].setText("ID="+ ((Node) idlist.item(0)).getNodeValue());

                      NodeList namelist = fstElmnt.getElementsByTagName("name");
                      Element namelement = (Element) namelist.item(0);
                      namelist = namelement.getChildNodes();
                      na[i].setText("pizza name="+ ((Node) namelist.item(0)).getNodeValue());

                      NodeList costlist = fstElmnt.getElementsByTagName("cost");
                      Element costlement = (Element) costlist.item(0);
                      costlist = costlement.getChildNodes();
                      c[i].setText("cost="+ ((Node) costlist.item(0)).getNodeValue());

                      layout.addView(no[i]);
                      layout.addView(na[i]);
                      layout.addView(c[i]);
                      setContentView(layout);

                      }} 
             catch (Exception e) {
                     }
        return null;

            }

            @Override
    protected void onPostExecute(String result)
    {
        super.onPostExecute(result);
        mDialog.dismiss(); 

            }
   }
  }
4

3 回答 3

0

首先,您不能在 doInBackground() 中进行与 UI 相关的操作

如果你想要你可以在完成 doInBackground() 过程后在 onPostExecute() 中完成...

所以改变你的逻辑..

于 2013-01-24T06:16:57.367 回答
0

以下代码是错误的。

你的 onPostExecute() 中没有任何数据,所以无论你想显示什么,只需在 onPostExecute() 中显示该内容,而不是 doInBackground()。

所以改变它..

您可以在 LazyLoading 或 Asynctask 应用程序中找到一个示例示例:-

https://github.com/thest1/LazyList

https://github.com/ethervoid/android-async-task-example

可以用下面的代码你可以得到你的答案......!!!!

于 2013-01-24T06:27:23.930 回答
0
NodeList namelist;
String[] no,na,c;
 try {
              URL url = new URL("http://api.androidhive.info/pizza/?format=xml");          
              DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();          
              DocumentBuilder db = dbf.newDocumentBuilder();
              Document doc = db.parse(new InputSource(url.openStream()));
              doc.getDocumentElement().normalize();
              NodeList nodeList = doc.getElementsByTagName("item");

              no = new String[nodeList.getLength()];
              na = new String[nodeList.getLength()];
              c = new String[nodeList.getLength()];
              for (int i = 0; i < nodeList.getLength(); i++) {
                  Node node = nodeList.item(i);

                  Element fstElmnt = (Element) node;

                  NodeList idlist = fstElmnt.getElementsByTagName("id");
                  Element numelement = (Element) idlist.item(0);
                  idlist = numelement.getChildNodes();
                  no[i]=((Node) idlist.item(0)).getNodeValue();                     

                  NodeList namelist = fstElmnt.getElementsByTagName("name");
                  Element namelement = (Element) namelist.item(0);
                  namelist = namelement.getChildNodes();
                  na[i]=((Node) namelist.item(0)).getNodeValue()

                  NodeList costlist = fstElmnt.getElementsByTagName("cost");
                  Element costlement = (Element) costlist.item(0);
                  costlist = costlement.getChildNodes();


                  }} 
         catch (Exception e) {
                 }
    return null;

        }

        @Override
protected void onPostExecute(String result)
{
    super.onPostExecute(result);
                LinearLayout layout = new LinearLayout(act.this);
                layout.setOrientation(1);
                TextView no[];
                TextView na[];
                TextView c[];
              no = new TextView[nodeList.getLength()];
              na = new TextView[nodeList.getLength()];
              c = new TextView[nodeList.getLength()];
              for (int i = 0; i < nodeList.getLength(); i++) {

                  no[i] = new TextView(act.this);
                  na[i] = new TextView(act.this);
                  c[i] = new TextView(act.this);
                  no[i].setText("ID="+no[i] );
                 na[i].setText("pizza name="+ na[i]);
                c[i].setText("cost="+ ((Node) costlist.item(0)).getNodeValue());

                  layout.addView(no[i]);
                  layout.addView(na[i]);
                  layout.addView(c[i]);
                  setContentView(layout);
    mDialog.dismiss(); 

        }
于 2013-01-24T07:34:55.090 回答