Нужен простой учебник для работы Android / WebService? - PullRequest
0 голосов
/ 22 сентября 2011

Я действительно новичок в работе с Android, поэтому меня смущает многое. Я посмотрел на то, что кажется 100 учебниками и примерами того, как получить информацию из веб-сервиса на Android, но мне нужно что-то для парня, который не имеет понятия. Вот несколько вещей, которые я не получаю:

  • Я не знаю, что делать с файлами XML ... то есть, когда я работаю с Java, это все, что нужно сделать? или что-то нужно изменить в файлах XML?
  • Похоже, я должен создать новый класс для некоторых из этих руководств, но я не уверен, и если да, то я не уверен, что делать после того, как я сделал класс
  • Я хочу получить информацию в формате JSON. На данный момент, пока я могу получать только ту информацию, которая в порядке, я могу научиться работать с JSON позже.
  • Кажется, kSoap2 - лучший способ сделать это. У меня есть файл jar, который необходим для работы с ним
  • Я немного углубился в телефонный разрыв, поэтому, если есть ответ, который использует это, тогда я могу работать с этим

Мой веб-сервис работает должным образом и, по сути, совпадает с тем, что я видел в ряде учебных пособий, поэтому проблем здесь нет.

Если кто-то может указать мне учебник, который поможет мне выучить ВСЕ, что мне нужно знать, для создания примера приложения, которое получает информацию от моего веб-сервиса, или если кто-то захочет провести меня через него, я бы очень ценю это!

Заранее спасибо!

1 Ответ

3 голосов
/ 23 сентября 2011

Изначально вам нужно установить 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();
                 }
                }

Ну, вот и все.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...