Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/204.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 异步任务中的HTTP请求_Android_Request_Android Asynctask - Fatal编程技术网

Android 异步任务中的HTTP请求

Android 异步任务中的HTTP请求,android,request,android-asynctask,Android,Request,Android Asynctask,我有一个解析XML文件的HTTP请求。 我正在尝试从asyntask连接到internet,但一直无法连接 我这样做是通过将代码放在线程中,而不是放在AsycTask中来实现的 我遇到的问题是,HTTP请求是在一个字符串中使用以下代码行调用的: String xml = parser.getXmlFromUrl(URL); 运行这个 public String getXmlFromUrl(String url) { Thread t= new Thread(){

我有一个解析XML文件的HTTP请求。 我正在尝试从asyntask连接到internet,但一直无法连接

我这样做是通过将代码放在线程中,而不是放在AsycTask中来实现的 我遇到的问题是,HTTP请求是在一个字符串中使用以下代码行调用的:

String xml = parser.getXmlFromUrl(URL);
运行这个

public String getXmlFromUrl(String url) {
            Thread t= new Thread(){
                public void run() {
                    xml = null;              
                    try {
                        Log.i("Log1","Parse");
                        // defaultHttpClient
                        DefaultHttpClient httpClient = new DefaultHttpClient();
                        HttpPost httpPost = new HttpPost("http://api.androidhive.info/music/music.xml");

                        HttpResponse httpResponse = httpClient.execute(httpPost);
                        HttpEntity httpEntity = httpResponse.getEntity();
                        xml = EntityUtils.toString(httpEntity);

                    } catch (UnsupportedEncodingException e) {
                        e.printStackTrace();
                    } catch (ClientProtocolException e) {
                        e.printStackTrace();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                    mHandler.post(mUpdateResults);
                }
            };
            t.start();
            return xml;
        }

        final Runnable mUpdateResults =new Runnable (){
            public void run(){//2

            }
        };
正如我所提到的,HTTP请求在一个线程中,但当我试图将其放入AsycTask中时,总是会发现错误。。。我不知道怎么做

我已经参考了AsycTask的文档,并且已经阅读了很多次,我搜索了教程,但是我无法正确构建它

两天后,我开始有点绝望

我为我的工作提供了完整的代码,如果有人能告诉我如何替换AsyncTask线程,我将非常感激

非常感谢您的问候

全部活动:

公共类PrueBasaActivity扩展活动{
静态最终字符串URL=”http://api.androidhive.info/music/music.xml";
//XML节点密钥
静态最终字符串键\u SONG=“SONG”//父节点
静态最终字符串键\u ID=“ID”;
静态最终字符串键\u TITLE=“TITLE”;
静态最终字符串键\u ARTIST=“ARTIST”;
静态最终字符串键\u DURATION=“DURATION”;
静态最终字符串键\u THUMB\u URL=“THUMB\u URL”;
私有数组列表数据;
ArrayList songsList;
列表视图列表;
懒散适配器;
字符串xml;
最终处理程序mHandler=新处理程序();
//建造师
公共void XMLParser(){
}
/**
*Cogiendo el XML de la URL中介HTTP请求
*@param url字符串
* */
公共字符串getXmlFromUrl(字符串url){
线程t=新线程(){
公开募捐{
xml=null;
试一试{
Log.i(“Log1”、“Parse”);
//defaultHttpClient
DefaultHttpClient httpClient=新的DefaultHttpClient();
HttpPost HttpPost=新的HttpPost(“http://api.androidhive.info/music/music.xml");
HttpResponse HttpResponse=httpClient.execute(httpPost);
HttpEntity HttpEntity=httpResponse.getEntity();
xml=EntityUtils.toString(httpEntity);
}捕获(不支持的编码异常e){
e、 printStackTrace();
}捕获(客户端协议例外e){
e、 printStackTrace();
}捕获(IOE异常){
e、 printStackTrace();
}
mHandler.post(mUpdateResults);
}
};
t、 start();
返回xml;
}
最终可运行mUpdateResults=新可运行(){
public void run(){//2
}
};
/*
*@param XML字符串
* */
公共文档getDoElement(字符串xml){
单据单据=空;
DocumentBuilderFactory dbf=DocumentBuilderFactory.newInstance();
试一试{
DocumentBuilder db=dbf.newDocumentBuilder();
InputSource is=新的InputSource();
is.setCharacterStream(新的StringReader(xml));
doc=db.parse(is);
}捕获(ParserConfiguration异常e){
Log.e(“错误:,e.getMessage());
返回null;
}捕获(SAXE异常){
Log.e(“错误:,e.getMessage());
返回null;
}捕获(IOE异常){
Log.e(“错误:,e.getMessage());
返回null;
}
退货单;
}
/*
*@param元素
*/
公共最终字符串getElementValue(节点元素){
节点子节点;
if(elem!=null){
if(elem.hasChildNodes()){
for(child=elem.getFirstChild();child!=null;child=child.getNextSibling()){
if(child.getNodeType()==Node.TEXT\u节点){
返回child.getNodeValue();
}
}
}
}
返回“”;
}
/*
*@param元素节点
*@param键字符串
* */
公共字符串getValue(元素项,字符串str){
NodeList n=item.getElementsByTagName(str);
返回此.getElementValue(n.item(0));
}
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
list=(ListView)findViewById(R.id.list);
songsList=newarraylist();
XMLParser=新的XMLParser();
String xml=parser.getXmlFromUrl(URL);//Cogiendo xml de la URL
Document doc=parser.getdoElement(xml);//Cogiendo DOM de los elementos
NodeList nl=doc.getElementsByTagName(KEY_-SONG);
//循环通过所有歌曲节点
对于(int i=0;ivalue
put(KEY_ID,parser.getValue(e,KEY_ID));
put(KEY_TITLE,parser.getValue(e,KEY_TITLE));
put(KEY_-ARTIST,parser.getValue(e,KEY_-ARTIST));
put(KEY_DURATION,parser.getValue(e,KEY_DURATION));
put(KEY_THUMB_URL,parser.getValue(e,KEY_THUMB_URL));
//将哈希列表添加到ArrayList
歌曲列表。添加(地图);
}
//帕桑多·达托斯·帕萨多斯·德尔·阿雷利斯特
适配器=新的MinAdapter(t
public class PruebasActivity extends Activity {


    static final String URL = "http://api.androidhive.info/music/music.xml";
    // XML node keys
        static final String KEY_SONG = "song"; // parent node
        static final String KEY_ID = "id";
        static final String KEY_TITLE = "title";
        static final String KEY_ARTIST = "artist";
        static final String KEY_DURATION = "duration";
        static final String KEY_THUMB_URL = "thumb_url";

        private ArrayList<HashMap<String, String>> data;
        ArrayList<HashMap<String, String>> songsList;

        ListView list;
        LazyAdapter adapter;
        String xml;

        final Handler mHandler=new Handler();


        // constructor
        public void XMLParser() {

        }

        /**
         * Cogiendo el XML de la URL mediante HTTP request
         * @param url string
         * */
        public String getXmlFromUrl(String url) {
            Thread t= new Thread(){
                public void run() {
                    xml = null;              
                    try {
                        Log.i("Log1","Parse");
                        // defaultHttpClient
                        DefaultHttpClient httpClient = new DefaultHttpClient();
                        HttpPost httpPost = new HttpPost("http://api.androidhive.info/music/music.xml");

                        HttpResponse httpResponse = httpClient.execute(httpPost);
                        HttpEntity httpEntity = httpResponse.getEntity();
                        xml = EntityUtils.toString(httpEntity);

                    } catch (UnsupportedEncodingException e) {
                        e.printStackTrace();
                    } catch (ClientProtocolException e) {
                        e.printStackTrace();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                    mHandler.post(mUpdateResults);
                }
            };
            t.start();
            return xml;
        }

        final Runnable mUpdateResults =new Runnable (){
            public void run(){//2

            }
        };

        /*
         * @param XML string
         * */
        public Document getDomElement(String xml){
            Document doc = null;
            DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
            try {

                DocumentBuilder db = dbf.newDocumentBuilder();

                InputSource is = new InputSource();
                is.setCharacterStream(new StringReader(xml));
                doc = db.parse(is); 

            } catch (ParserConfigurationException e) {
                Log.e("Error: ", e.getMessage());
                return null;
            } catch (SAXException e) {
                Log.e("Error: ", e.getMessage());
                return null;
            } catch (IOException e) {
                Log.e("Error: ", e.getMessage());
                return null;
            }

            return doc;
        }

        /*
         * @param elem element
         */
        public final String getElementValue( Node elem ) {
            Node child;
            if( elem != null){
                if (elem.hasChildNodes()){
                    for( child = elem.getFirstChild(); child != null; child = child.getNextSibling() ){
                        if( child.getNodeType() == Node.TEXT_NODE  ){
                            return child.getNodeValue();
                        }
                    }
                }
            }
            return "";
        }

        /*
         * @param Element node
         * @param key string
         * */
        public String getValue(Element item, String str) {      
            NodeList n = item.getElementsByTagName(str);        
            return this.getElementValue(n.item(0));
        }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        list=(ListView)findViewById(R.id.list);

        songsList = new ArrayList<HashMap<String, String>>();

        XMLParser parser = new XMLParser();
        String xml = parser.getXmlFromUrl(URL); // Cogiendo XML de la URL
        Document doc = parser.getDomElement(xml); // Cogiendo DOM de los elementos

        NodeList nl = doc.getElementsByTagName(KEY_SONG);
        // 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_ID, parser.getValue(e, KEY_ID));
            map.put(KEY_TITLE, parser.getValue(e, KEY_TITLE));
            map.put(KEY_ARTIST, parser.getValue(e, KEY_ARTIST));
            map.put(KEY_DURATION, parser.getValue(e, KEY_DURATION));
            map.put(KEY_THUMB_URL, parser.getValue(e, KEY_THUMB_URL));          

            // adding HashList to ArrayList
            songsList.add(map);
        }

        // Pasando datos parseados del adaptador al arrayList
        adapter=new MinAdapter(this, songsList);        
        list.setAdapter(adapter);   
    }
}
public class XmlTask extends AsyncTask<String, Void, String>{

    public String doInBackground(String... urls){
        String url = urls[0];

        // Place your getXmlFromUrl content here

        return xml;
    }

    public void onPostExecute(String xml){
        // Your XML parsing staement here
    }
}
new XmlTask().execute("http://yoururl");
public class PruebasActivity extends Activity {

static final String URL = "http://api.androidhive.info/music/music.xml";
// XML node keys
    static final String KEY_SONG = "song"; // parent node
    static final String KEY_ID = "id";
    static final String KEY_TITLE = "title";
    static final String KEY_ARTIST = "artist";
    static final String KEY_DURATION = "duration";
    static final String KEY_THUMB_URL = "thumb_url";

    private ArrayList<HashMap<String, String>> data;
    ArrayList<HashMap<String, String>> songsList;

    ListView list;
    LazyAdapter adapter;
    String xml;

    // constructor
    public void XMLParser() {

    }

    /**
     * Cogiendo el XML de la URL mediante HTTP request
     * @param url string
     * */
    public String getXmlFromUrl(String url) {
            xml = null;              
            try {
                Log.i("Log1","Parse");
                // defaultHttpClient
                DefaultHttpClient httpClient = new DefaultHttpClient();
                HttpPost httpPost = new HttpPost("http://api.androidhive.info/music/music.xml");

                HttpResponse httpResponse = httpClient.execute(httpPost);
                HttpEntity httpEntity = httpResponse.getEntity();
                xml = EntityUtils.toString(httpEntity);

            } catch (UnsupportedEncodingException e) {
                e.printStackTrace();
            } catch (ClientProtocolException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }

        return xml;
    }


    /*
     * @param XML string
     * */
    public Document getDomElement(String xml){
        Document doc = null;
        DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
        try {

            DocumentBuilder db = dbf.newDocumentBuilder();

            InputSource is = new InputSource();
            is.setCharacterStream(new StringReader(xml));
            doc = db.parse(is); 

        } catch (ParserConfigurationException e) {
            Log.e("Error: ", e.getMessage());
            return null;
        } catch (SAXException e) {
            Log.e("Error: ", e.getMessage());
            return null;
        } catch (IOException e) {
            Log.e("Error: ", e.getMessage());
            return null;
        }

        return doc;
    }

    /*
     * @param elem element
     */
    public final String getElementValue( Node elem ) {
        Node child;
        if( elem != null){
            if (elem.hasChildNodes()){
                for( child = elem.getFirstChild(); child != null; child = child.getNextSibling() ){
                    if( child.getNodeType() == Node.TEXT_NODE  ){
                        return child.getNodeValue();
                    }
                }
            }
        }
        return "";
    }

    /*
     * @param Element node
     * @param key string
     * */
    public String getValue(Element item, String str) {     
        NodeList n = item.getElementsByTagName(str);        
        return this.getElementValue(n.item(0));
    }

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    list=(ListView)findViewById(R.id.list);

    AsyncTask<Void, Void, Void> ast = new AsyncTask<Void, Void, Void>(){
        ProgressDialog p;
        @Override
        protected void onPreExecute() {
            // TODO Auto-generated method stub
             p = new ProgressDialog(EditTextDemoActivity.this);
            //write code to start the progress dialog
        }

        @Override
        protected Void doInBackground(Void... params) {
            // TODO Auto-generated method stub
            songsList = new ArrayList<HashMap<String, String>>();

            XMLParser parser = new XMLParser();
            String xml = parser.getXmlFromUrl(URL); // Cogiendo XML de la URL
            Document doc = parser.getDomElement(xml); // Cogiendo DOM de los elementos

            NodeList nl = doc.getElementsByTagName(KEY_SONG);
            // 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_ID, parser.getValue(e, KEY_ID));
                map.put(KEY_TITLE, parser.getValue(e, KEY_TITLE));
                map.put(KEY_ARTIST, parser.getValue(e, KEY_ARTIST));
                map.put(KEY_DURATION, parser.getValue(e, KEY_DURATION));
                map.put(KEY_THUMB_URL, parser.getValue(e, KEY_THUMB_URL));          

                // adding HashList to ArrayList
                songsList.add(map);
            }
        }


        @Override
        protected void onPostExecute(Void result) {
            // TODO Auto-generated method stub
            p.dismiss();
            adapter=new MinAdapter(this, songsList);        
            lst.setAdapter(adapter); 
        }
    };

    ast.execute();
}
}