android中的错误连接超时

时间:2014-04-01 17:19:05

标签: java android xml eclipse

我的应用程序启动..加载..当它完成加载时,它只显示一个空白页面。它不会崩溃只显示一个空白页面。 我注意到在logcat上有这样的错误:异常localhost / 127.0.0.1:8080连接被拒绝 我在不在模拟器中的另一台设备上播放我的应用程序。 所以我认为它在网址“localhost:8080 / lab / lab1.xml”上有错误 或者我的代码有错误。

所以这是MainActivity.java

import android.app.Activity;
import android.app.ProgressDialog;
import android.os.AsyncTask;
import android.os.Bundle;
import android.widget.TextView;

public class MainActivity extends Activity {

    TextView tvResponse;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        tvResponse = (TextView) findViewById(R.id.tvResponse);
        new PostAsync().execute();
    }

    class PostAsync extends AsyncTask<Void, Void, Void> {
        ProgressDialog pd;
        XMLHelper helper;


        @Override
        protected void onPreExecute() {
            pd = ProgressDialog.show(MainActivity.this, "by Es", "Loading", true, false);
        }
        @Override
        protected Void doInBackground(Void... arg0) {
            helper = new XMLHelper();
            helper.get();
            return null;
        }


        @Override
        protected void onPostExecute(Void result) {
            StringBuilder builder = new StringBuilder();
            for(EventValue event : helper.events) {
                builder.append("\nWhat: " + event.getWhat());
                builder.append("\nWhen: " + event.getWhen());
                builder.append("\nWhere: " + event.getWhere());
                builder.append("\n");
            }
            tvResponse.setText(builder.toString());
            pd.dismiss();
        }

    }

}

这是XMLHelper.java

import java.io.InputStream;
import java.net.URL;
import java.util.ArrayList;

import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;

import org.xml.sax.Attributes;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
import org.xml.sax.XMLReader;
import org.xml.sax.helpers.DefaultHandler;

import android.util.Log;

public class XMLHelper extends DefaultHandler {
    /** 
     * The URL to be parsed
     */
    private String URL_MAIN = "http://localhost:8080/lab/lab1.xml";
    String TAG = "XMLHelper";

    Boolean currTag = false;
    String currTagVal = "";
    public EventValue event = null;
    public ArrayList<EventValue> events = new ArrayList<EventValue>();


    public void get() {
        try {
            SAXParserFactory factory = SAXParserFactory.newInstance();
            SAXParser mSaxParser = factory.newSAXParser();
            XMLReader mXmlReader = mSaxParser.getXMLReader();
            mXmlReader.setContentHandler(this);
            InputStream mInputStream = new URL(URL_MAIN).openStream();
            mXmlReader.parse(new InputSource(mInputStream));
        } catch(Exception e) {
            // Exceptions can be handled for different types
            // But, this is about XML Parsing not about Exception Handling
            Log.e(TAG, "Exception: " + e.getMessage());
        }
    }


    @Override
    public void characters(char[] ch, int start, int length)
            throws SAXException {
        if(currTag) {
            currTagVal = currTagVal + new String(ch, start, length);
            currTag = false;
        }
    }


    @Override
    public void endElement(String uri, String localName, String qName)
            throws SAXException {
        currTag = false;

        if(localName.equalsIgnoreCase("what"))
            event.setWhat(currTagVal);

        else if(localName.equalsIgnoreCase("when"))
            event.setWhen(currTagVal);

        else if(localName.equalsIgnoreCase("where"))
            event.setWhere(currTagVal);

        else if(localName.equalsIgnoreCase("event"))
            events.add(event);
    }


    @Override
    public void startElement(String uri, String localName, String qName,
            Attributes attributes) throws SAXException {
        Log.i(TAG, "TAG: " + localName);

        currTag = true;
        currTagVal = "";

        if(localName.equals("event"))
            event = new EventValue();
    }
}

这是EventValue.java

public class EventValue {
    String what, when, where;

    public String getWhat() {
        return what;
    }

    public void setWhat(String what) {
        this.what = what;
    }

    public String getWhen() {
        return when;
    }

    public void setWhen(String when) {
        this.when = when;
    }

    public String getWhere() {
        return where;
    }

    public void setWhere(String where) {
        this.where = where;
    }



}

这是xml文件lab1.xml(localhost:8080 / lab / lab1.xml)

<?xml version="1.0" encoding="utf-8"?>
<events>

     <event>
        <what>Summer</what>
        <when>March1</when>
        <where>--</where>
    </event>

     <event>
        <what>asdasdas</what>
        <when>March 2</when>
        <where>asasas</where>
    </event>

     <event>
        <what>asdasdq</what>
        <when>asdasdx</when>
        <where>asdasdf</where>
    </event>

</events>

请查看代码。谢谢 修改 - 它现在工作我正在使用计算机IP地址,但现在问题是这个新的例外 例外:连接超时

1 个答案:

答案 0 :(得分:1)

您的错误与XML解析没有任何关系。您有连接错误。您正在使用localhost,这是手机本身,当然它会返回连接错误。你可能意味着你开发的机器。

如果要引用运行Android模拟器的计算机,请改用IP地址10.0.2.2。您可以从here了解更多信息。