需要一个简单的android / webservice工作教程吗?

时间:2011-09-22 19:22:54

标签: android xml json web-services cordova

我真的很喜欢使用Android,因此有很多令我困惑的事情。我已经看过看起来像100个教程和如何从Android上的Web服务获取信息的示例,但我需要的是一个没有线索的人的东西。以下是我没有得到的几件事:

  • 我不知道如何处理XML文件..这意味着,一旦我完成Java工作,是否需要完成所有工作?或者是否需要在XML文件中更改任何内容?
  • 似乎也许我应该为其中的一些教程创建一个新类,但我不确定,如果是这样,我不确定一旦我上课后该怎么做
  • 我想以JSON格式检索信息。目前,只要我能得到那些没问题的信息,我就可以学习如何使用JSON。
  • 看起来kSoap2是最好的方法。我有需要使用的jar文件
  • 我已经深入研究了一下,所以如果有一个使用它的答案,那么我可以使用它

我的网络服务运行正常,与我在许多教程中看到的基本相同,所以没有问题。

如果有人能指点我的教程,这将帮助我学习所有我需要知道的东西来创建一个从我的网络服务获取信息的示例应用程序,或者如果有人愿意引导我完成它,我会非常感谢!

提前致谢!

1 个答案:

答案 0 :(得分:3)

最初您必须建立一个http连接,以便您可以从您的api获取响应,即xml响应或json响应。您可以使用以下代码。
让课程与活动分开。 : -

public class Response {

String get_url, response;
Activity activity;

public Response(String url){
    this.get_url = url;

}

public String getResponse(){
     InputStream in = null;        
      byte[] data = new byte[1000];
        try {
              URL url = new URL(get_url);   
              URLConnection conn = url.openConnection();
              conn.connect();
            /*  conn.*/
              in = conn.getInputStream();
              Log.d("Buffer Size +++++++++++++", ""+in.toString().length());
              BufferedReader rd = new BufferedReader(new InputStreamReader(in),in.toString().length());
              String line;
              StringBuilder sb =  new StringBuilder();
              while ((line = rd.readLine()) != null) {
                    sb.append(line);
              }
              rd.close();
              response = sb.toString();

             in.read(data);
          Log.d("INPUT STREAM PROFILE RESPONSE",response);
            in.close();
        } catch (IOException e1) {
            Log.d("CONNECTION  ERROR", "+++++++++++++++++++++++++++");
            // TODO Auto-generated catch block

            e1.printStackTrace();
        }
        return response;
}
}

您可以在此活动中致电该课程: -

Response res = new Response("your_url");
String getResponse = res.getResponse();

所以在这里你得到api的回复。

现在让我们做解析器

         //Extend the class with Default Handler

         public class XMLParser extends DefaultHandler {
              //You must have basic knowledge about Array List and setter/getter methods
              // This is where the data will be stored
       ArrayList<Item> itemsList;
          Item item;
           String data;
            String type;
           private String tempVal;

                 //Create the Constructor
           public XMLParser(String data){
        itemsList = new ArrayList<Item>();

        this.data = data;

    }

     public byte parse(){

            SAXParserFactory spf = null;
            SAXParser sp = null;
            InputStream inputStream = null;

            try {
                inputStream = new ByteArrayInputStream(data.getBytes());
                spf = SAXParserFactory.newInstance();
                if (spf != null) {
                    sp = spf.newSAXParser();
                    sp.parse(inputStream, this);
                }
            }
            /*
             * Exceptions need to be handled MalformedURLException
             * ParserConfigurationException IOException SAXException
             */

            catch (Exception e) {
                System.out.println("Exception: " + e);
                e.printStackTrace();
            } finally {
                try {
                    if (inputStream != null)
                        inputStream.close();
                } catch (Exception e) {
                }
            }

            if (itemsList != null && itemsList.size() > 0) {
            //  //Log.d("Array List Size",""+tipsList.get(4).getTitle());


                return 1;
            } else {
                return 0;
            }

        }

     public ArrayList<Item> getItemList(){
         return itemsList;
     }


              // Here you can check for the xml Tags
     @Override
    public void startElement(String uri, String localName, String qName,
            Attributes attributes) throws SAXException {


         if(localName.equalsIgnoreCase("item")){
             item = new Item();
             Log.d("Working", "+++++++++++++++++++++++");
         }


     }
         //tempVal is the variable which stores text temporarily and you
                 // may save the data in arraylists
     public void characters(char[] ch, int start, int length)
                throws SAXException {
            tempVal = new String(ch, start, length);
        }


     @Override
    public void endElement(String uri, String localName, String qName)
            throws SAXException {




         if(localName.equalsIgnoreCase("item")){
             itemsList.add(item);
             Log.d("Working in endelement", "+++++++++++++++++++++++");

            item.setTitle(tempVal);

        }
       }

结合所有这些: -

现在让我们看一下活动

         public void oncreate(){
               // Do something or mostly the basic code
               // Call the class to initate the connection and get the data
                 FetchList fl = new FetchList();
                  fl.execute();
                  }
          //Always better to use async task for these purposes
           public class FetchList extends asyncTask<Void,Void,Byte>{

                doinbackground{
                    // this was explained in first step
                     Response res = new Response("url");
                     String response = res.getResponse();
                     XmlParser xml = new XmlParser(response);
                      ArrayList<item> itemList = xml.getItemList();
                      xml.parse();
                 }
                }

这就是它的全部。