`

Android处理POST请求、Android用SAX解析XML

阅读更多
1、处理post请求
public class HttpGet extends Activity {
private boolean isAuthenticated;
private ArrayList<BasicNameValuePair> pairs;
private DefaultHttpClient httpclient;
private HttpPost httppost;
private InputStream content;
private String returnConnection;
@Override
protected void onCreate(Bundle savedInstanceState) {
   super.onCreate(savedInstanceState);
   TextView tv=new TextView(this);
   Map vars=new HashMap();
   vars.put("mydata", "Hello,Android");
   ParameterHttp("http://5billion.com.cn/post.php",vars);
   doPost();
   tv.setText(this.returnConnection);
   this.setContentView(tv);
}

private void ParameterHttp(String url, Map vars) {
   this.httpclient=new DefaultHttpClient();
   this.httppost=new HttpPost(url);
   this.pairs=new ArrayList();
   if(vars!=null){
    Set keys=vars.keySet();
    for(Iterator i=keys.iterator();i.hasNext();){
     String key=(String)i.next();
     pairs.add(new BasicNameValuePair(key,(String) vars.get(key)));
    }
   }
}

private String doPost() {
   try{
    UrlEncodedFormEntity p_entity=new UrlEncodedFormEntity(pairs,"ISO-8859-1");
    httppost.setEntity(p_entity);
    HttpResponse response=httpclient.execute(httppost);
    HttpEntity entity=response.getEntity();
    content=entity.getContent();
    this.returnConnection=convertStreamToString(content);
    Log.d("HttpPostConnection",">>>>>>>>>"+returnConnection);
    int status_code=response.getStatusLine().getStatusCode();
    if(status_code>=300){
     this.isAuthenticated=false;
    }else{
     this.isAuthenticated=true;
    }
  
   }catch (Exception e) {
    // TODO: handle exception
   }
   return returnConnection;
}

private static String convertStreamToString(InputStream is) {
        /*
         * To convert the InputStream to String we use the BufferedReader.readLine()
         * method. We iterate until the BufferedReader return null which means
         * there's no more data to read. Each line will appended to a StringBuilder
         * and returned as String.
         */
        BufferedReader reader = new BufferedReader(new InputStreamReader(is));
        StringBuilder sb = new StringBuilder();

        String line = null;
        try {
            while ((line = reader.readLine()) != null) {
                sb.append(line + "\n");
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                is.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

        return sb.toString();
    }
3、SAX解析xml
public class HttpGet extends Activity{

@Override
protected void onCreate(Bundle savedInstanceState) {
   super.onCreate(savedInstanceState);
   TextView tv=new TextView(this);
   try{
    URL url=new URL("http://5billion.com.cn/example.xml");
    //从SAXParserFactor获取SAXParser
    SAXParserFactory spf=SAXParserFactory.newInstance();
    SAXParser sp=spf.newSAXParser();
    //从SAXParser获取XMLReader
    XMLReader xr=sp.getXMLReader();
    //创建文明自己的内容处理器
    ExampleHandler myExampleHandler=new ExampleHandler();
    //用内容处理器处理XMLReader
    xr.setContentHandler(myExampleHandler);
    //XMLReader获取xml文件
    xr.parse(new InputSource(url.openStream()));
    //用ExampleHandle解析XML中数据
    ParsedExampleDataSet parsedExampleDataSet=myExampleHandler.getParsedData();
    //将解析的结果显示到gui
    tv.setText(parsedExampleDataSet.toString());
   }catch (Exception e) {
    tv.setText(e.getMessage());
   }
   this.setContentView(tv);
}


class ExampleHandler extends DefaultHandler {
   private boolean in_outertag=false;
   private boolean in_innertag=false;
   private boolean in_mytag=false;
   private ParsedExampleDataSet myParsedExampleDataSet=new ParsedExampleDataSet();

   public ParsedExampleDataSet getParsedData(){
    return this.myParsedExampleDataSet;
   }

   @Override
   public void characters(char[] ch, int start, int length)
     throws SAXException {
    if(this.in_mytag){
     String str=new String(ch,start,length);
     myParsedExampleDataSet.setExtractedString(str);
     Log.v("ParsingXML","Characters():"+str);
    }
   }

   @Override
   public void startDocument() throws SAXException {
    this.myParsedExampleDataSet=new ParsedExampleDataSet();
    Log.v("ParsingXML","startDocument");
   }
   @Override
   public void endDocument() throws SAXException {
    Log.v("ParsingXML","endDocumnet");
   }
   @Override
   public void startElement(String uri, String localName, String name,
     Attributes attributes) throws SAXException {
    if(localName.equals("outertag")){
     this.in_outertag=true;
    }else if(localName.equals("innertag")){
     this.in_innertag=true;
    }else if(localName.equals("mytag")){
     this.in_mytag=true;
    }else if(localName.equals("tagwithnumber")){
     String attrValue=attributes.getValue("thenumber");
     int i=Integer.parseInt(attrValue);
     this.myParsedExampleDataSet.setExtractedInt(i);
    }
    Log.v("ParsingXML","StartElement():"+localName);
   }
   @Override
   public void endElement(String uri, String localName, String name)
     throws SAXException {
    if(localName.equals("outertag")){
     this.in_outertag=false;
    }else if(localName.equals("innertag")){
     this.in_innertag=false;
    }else if(localName.equals("mytag")){
     this.in_mytag=false;
    }else if(localName.equals("tagwithnumber")){
     //nothing to do
    }
    Log.v("ParsingXML","endElement():"+localName);
   }
}

class ParsedExampleDataSet {
   private String extractedString=null;
   private int extractedInt=0;
   public void setExtractedString(String extractedString) {
    this.extractedString = extractedString;
   }
   public void setExtractedInt(int extractedInt) {
    this.extractedInt = extractedInt;
   }
   @Override
   public String toString() {
    // TODO Auto-generated method stub
    return "String from XML="+this.extractedString+"\n Number from XML="+this.extractedInt;
   }
 
}
}
分享到:
评论

相关推荐

    【下载】Android 使用SAX实现XML的读和写,使用XML与后台交互

    首先,要使用SAX解析XML,我们需要创建一个实现`DefaultHandler`接口的类,这个类将包含处理XML事件的方法,如`startElement`、`endElement`和`characters`。例如: ```java public class MySaxHandler extends ...

    Android解析服务端XML

    这些库可以帮助我们发送GET或POST请求,并获取服务器响应的XML数据。 例如,使用`Volley`库发送GET请求获取XML数据: ```java RequestQueue queue = Volley.newRequestQueue(context); String url = ...

    android访问网络返回的XML数据并且进行解析

    2. **构建网络请求**:使用HttpURLConnection创建一个GET或POST请求。以下是一个简单的GET请求示例: ```java URL url = new URL("http://example.com/xml_data.xml"); HttpURLConnection connection = ...

    Android解析xml文件获取网络数据http请求,带Fragment框架,图片缓存本地

    在Android中,我们可以使用多种方式解析XML,如DOM(Document Object Model),SAX(Simple API for XML)和Pull Parser。DOM解析整个XML文档到内存,适合小型文件;SAX是事件驱动,逐行解析,节省内存,适合大文件...

    Android高级应用源码-Android解析服务端XML.zip

    可能涉及的步骤包括设置URL,发送GET或POST请求,处理响应,以及错误处理。 3. Volley库:为了简化网络请求和数据解析,Android开发者经常使用Volley库。Volley提供了高效的网络通信,并且内置了XML解析支持,能...

    xml解析以及流媒体播放

    在这个项目中,可能使用了iOS的NSXMLParser或Android的DefaultHandler来实现SAX解析,或者使用GDataXMLNode等库实现DOM解析。解析过程中,需要定义回调函数来处理开始元素、结束元素、字符数据等事件,将XML数据映射...

    Tocat中请求xml及解析,和hangler的机制与用法详解

    4. Android中异步处理XML数据,使用Handler-Looper更新UI。 5. Handler、Looper和Message的机制及它们在多线程通信中的作用。 理解并熟练掌握这些知识点,对于进行Web服务开发和Android应用的实现至关重要,尤其在...

    Android使用XML-RPC实现blog客户端源码

    开发者可以选择适合的方式解析XML响应,提取所需的数据。 6. **用户界面设计** 客户端应用的界面设计需要考虑到用户交互,如输入博客标题、内容、选择分类等功能。使用Android的布局管理器和控件,如EditText、...

    http网络请求与解析

    SAX解析器适用于大型XML文档,按事件驱动方式逐个处理元素;DOM解析器则将整个XML文档加载到内存中形成树形结构,方便查询;Pull Parser是轻量级的解析器,适用于内存有限的设备。 3. **Protocol Buffers** ...

    Android+webservice操作数据库,实现xml和Json两种模式接收

    - **XML处理**:Android提供了SAXParser和DocumentBuilderFactory等类来解析XML。SAX适用于大文件的流式解析,而DOM则一次性加载整个XML文档,适合小文件。解析完成后,将XML节点转化为Java对象,比如实体类。 - **...

    Android通过jsp后台连接Oracle数据库

    - 在Android端,可以使用SAX(Simple API for XML)解析器来解析XML数据,SAX是一种事件驱动的解析方式,适合处理大型XML文档,因为它只读取文档的一部分,内存占用较低。 5. **SAX解析**: - SAX解析器逐行读取...

    android get,post获取数据

    如果是XML,可以使用DOM或SAX解析器。 ### JSON处理 在Android中,Gson库非常方便地处理JSON数据。例如,你可以定义一个Java类,映射JSON结构,然后通过`Gson().fromJson()`方法将JSON字符串转化为对象。 ```java ...

    安卓网站交互JSONxmlWebserviceUPnP相关-Android解析服务端XML.zip

    Android提供了多种解析XML的方式,如DOM(文档对象模型)、SAX(简单API for XML)和Pull解析器。DOM一次性加载整个XML文档,适用于小文件;SAX是事件驱动,只处理需要的部分,适合大文件;Pull解析器则是一种轻量级...

    Android中通过网络通信发送XML数据给WEB应用案例

    以下是一个使用HttpURLConnection发送POST请求的例子: ```java URL url = new URL("http://your-web-server.com/endpoint"); HttpURLConnection conn = (HttpURLConnection) url.openConnection(); conn....

    Android通过webservice连接Sqlserver实例

    2. 数据解析:收到服务器返回的XML或JSON响应后,使用如DOM、SAX或Gson等解析库解析数据,将其转化为Java对象。 3. 显示数据:将解析后的数据绑定到UI元素,如ListView或RecyclerView上,显示给用户。 步骤四:异常...

    Android高级应用源码-自定义列表选择Dialog,适用网络请求数据.zip

    通常,JSON数据会使用Gson或Jackson库,XML数据可能使用PullParser或SAX解析器。解析后的数据将作为列表项显示。 3. 异步处理:网络请求应在后台线程中进行,以免阻塞主线程导致应用无响应。可以使用AsyncTask、...

    网络获取框架xml等包

    Android官方提供了一个XML Pull解析库,开发者可以通过调用next()方法,按需解析XML元素,控制权在开发者手中,适合流式处理XML数据。 在移动开发中,网络获取框架和XML解析工具的正确选择和使用,可以极大地提高...

    Android与Internet(获取资源,多线程断点下载,get/post发送,发送xml)

    服务器端通常会使用DOM、SAX或StaX解析接收到的XML数据。 在实际开发中,我们可能还会遇到权限问题,例如,从Android 6.0(API级别23)开始,应用需要在运行时请求访问网络的权限。另外,为了提升用户体验,我们...

    Android应用源码之(遍历Body).zip

    通过研究“Android应用源码之(遍历Body)”的源码,开发者可以更好地理解Android应用如何处理网络请求,特别是在解析响应体时涉及的关键技术和最佳实践。这将有助于在实际项目中实现更高效、更安全的网络通信。

    android解析服务端XML

    - **网络请求**:使用HttpURLConnection或OkHttp等库向服务器发起GET或POST请求,获取XML数据。 - **XML解析**:Android提供了两种主要的XML解析方式: - DOM解析:一次性加载整个XML文档到内存中,适合小型XML...

Global site tag (gtag.js) - Google Analytics