在安卓这个程序没有检索XML数据后,进度条加载帮我(In android this program

2019-10-17 15:27发布

\ Android中programming..i喜欢我想,直到数据从xmltags检索加载进度同时检索从URL中xmltags数据的(xmlparsing)。 我重视我的代码检查它的仪式或错误是否谢谢\

 \\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(); 

            }
   }
  }

Answer 1:

下面的代码是错误的。

ü不要在你的onPostExecute(),所以无论YOUE要显示的只是显示在onPostExecute那个东西(任何数据),而不是doInBackground()。

所以,改变它..

样本例如U可以在惰性加载或者应用程序的AsyncTask发现: -

https://github.com/thest1/LazyList

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

可以用下面的代码ü可以得到乌尔答...... !!!!



Answer 2:

首先你无法让在doInBackground的UI相关的动作()

如果妳希望u能做到这一点的onPostExecute()完成了doInBackground()过程后...

因此,改变乌尔逻辑..



Answer 3:

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(); 

        }


文章来源: In android this program not retrieve the xml data after the progress bar loading help me