java - 线程中未调用 Run 方法

标签 java android xml multithreading

我正在尝试使用单独的线程解析 xml。整个代码的小代码 fragment 如下:

Thread t = new Thread(new Runnable() {
        @Override
        public void run() {
           try{
            c=c1;
            URL url = new URL(url1);
            HttpURLConnection con= (HttpURLConnection) url.openConnection();
            InputStream i= con.getInputStream();
            xf=XmlPullParserFactory.newInstance();
            xp=xf.newPullParser();
            xp.setInput(i,null);
            parseXML(xp,c);
        }
        catch(Exception e)
        {
            e.printStackTrace();

        }


        }
    });
    t.start();

但是 run 方法似乎没有被调用本身。有人可以帮我找出我在这里缺少什么吗?

编辑: 以下是XML相关的全部代码:

public void fetchXml(String u,final Context c1) throws IOException,   XmlPullParserException, InterruptedException {
    Thread t = new Thread(new Runnable() {
        @Override
        public void run() {
           try{

            c=c1;
               URL url = new URL(url1);
            HttpURLConnection con= (HttpURLConnection) url.openConnection();
            InputStream i= con.getInputStream();
            xf=XmlPullParserFactory.newInstance();
            xp=xf.newPullParser();
            xp.setInput(i,null);
            parseXML(xp,c);
        }
        catch(Exception e)
        {

            e.printStackTrace();

        }
     }
    });

    t.start();
    t.join();
   }


  public void parseXML(XmlPullParser xp,Context c) throws XmlPullParserException, IOException {

    int event;
    String text=null;
    Toast.makeText(c, "inside parse", Toast.LENGTH_LONG).show();

    event=xp.getEventType();

    while(event!=XmlPullParser.END_DOCUMENT)
    {

        String name=xp.getName();

        switch(event)
        {

            case XmlPullParser.START_TAG :
                break;

            case XmlPullParser.TEXT :
                text=xp.getText();
                break;

            case XmlPullParser.END_TAG :
                if(name.equals("country")){
                    country=text;
                    Toast.makeText(c, "Country"+country, Toast.LENGTH_LONG).show();
                }
                else if(name.equals("humidity")){

                    humidity=xp.getAttributeValue(null,"value");
                    Toast.makeText(c, "humidity"+humidity,  Toast.LENGTH_LONG).show();
                }

                else if (name.equals("pressure"))
                {
                    pressure=xp.getAttributeValue(null,"value");
                    Toast.makeText(c, "pressure"+pressure,  Toast.LENGTH_LONG).show();
                }
                else{}
                break;
   }
        event=xp.next();
  }
    parsingcomplete=true;
  }

此外,当我检查 logcat 时,我在上面的 parsexml 函数中编写的 Toast 语句出现以下错误。

 04-11 07:59:08.891 31361-31580/com.example.hp.xmlparsing W/System.err:   java.lang.RuntimeException: Can't create handler inside thread that has not  called Looper.prepare()
 04-11 07:59:08.892 31361-31580/com.example.hp.xmlparsing W/System.err:     at android.os.Handler.<init>(Handler.java:200)

看起来 run 方法运行良好..但我收到异常:

 java.lang.RuntimeException: Can't create handler inside thread that has not    called Looper.prepare()

有人可以帮忙吗...

最佳答案

运行

Toast.makeText(c, "inside parse", Toast.LENGTH_LONG).show();

GUI 线程内部:

runOnUiThread(new Runnable() {

                    @Override
                    public void run() {
                         Toast.makeText(c, "inside parse", Toast.LENGTH_LONG).show();
                    }
                });

关于java - 线程中未调用 Run 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36538757/

相关文章:

java - Hadoop NoSuchMethodError apache.commons.cli

android - Simpleperf 不记录任何样本

c# - 在 C# 中修改现有的 XML 内容

Python - 循环的深度 XML 文件

android - 如何使用android sdk将图片上传到twitter

XML::Twig 注释

java - Android中不同的apk签名

Java JDBC PreparedStatement 外键约束失败

java - 我收到标识符预期错误

android - 为 Qt for Android 目标构建 SMTP 客户端