Страница 1 из 1

Подключение своих классов к основному

Добавлено: 23 июл 2013, 17:30
sanu0074
Можно ли в проэкте подключать свои классы, и использовать их в текущем классе данного activity? Как это делается?

Например есть класс который получает XML с сервера, как его разбить на части которые изменяются и которые нет. Нужно отделить загрузку xml из указанного адреса, и часть которая занимается разбором сообщения:

Код: Выделить всё

 class AsyncDownloader extends AsyncTask<Object, String, Integer>{ 
 
    	public String TAG="MyLog";
    	
        @Override 
        protected Integer doInBackground(Object... params) { 
             
            XmlPullParser recivedData = null; 
            try { 
                recivedData = tryDownloadingXmlData(); 
            } catch (IOException e) { e.printStackTrace();  } 
            int recordsFound = 0; 
            try { 
                recordsFound = tryParsingXmlData(recivedData); 
            } catch (XmlPullParserException e) {  e.printStackTrace(); } 
            catch (IOException e) { e.printStackTrace(); } 
            return recordsFound; 
        } 
          
        private XmlPullParser tryDownloadingXmlData() throws IOException {     
            try{ 
            URL xmlUrl = new URL("http://home-android.ru/android/main"); 
            XmlPullParser recivedData = XmlPullParserFactory.newInstance().newPullParser(); 
            recivedData.setInput(xmlUrl.openStream(),null); 
            
            return recivedData; 
            }  
            catch(XmlPullParserException e){ } 
            catch(IOException e) { } 
            return null; 
        } 
         
         
        private int tryParsingXmlData(XmlPullParser recivedData) throws XmlPullParserException, IOException { 
            if(recivedData != null) 
            { 
                processRecivedData(recivedData); 
            } 
            return 0; 
        } 
 
 
 
        private void processRecivedData(XmlPullParser xmlData) throws XmlPullParserException, IOException { 
            int eventType = -1; 
            int recordsFound = 0; 
             
            String tagName="";
            String imageLnk=""; 
            String name=""; 
            String id = "";
            String type = "";
            String des=""; 
            String cat=""; 
            String cd=""; 
            
            Log.d(TAG, "Старт парсинга XML");
             
            while(eventType!=XmlResourceParser.END_DOCUMENT) 
            { 
                switch(eventType)  
                { 
                	case XmlResourceParser.START_TAG: 
                	tagName=xmlData.getName(); 
                	Log.d(TAG, "START_TAG: name = " + xmlData.getName());     
                	break; 
                	
	                case XmlResourceParser.TEXT:
	                	Log.d(TAG, "Text_TAGNAME: <"+tagName+">"+xmlData.getText()+"</"+tagName+">");
	                    if(TextUtils.equals(tagName,"name")) {
	                        	  name = xmlData.getText();
	                       }
	                    if(TextUtils.equals(tagName,"imageLnk")) {
	                        	  imageLnk = xmlData.getText();
	                       }
	                    if(TextUtils.equals(tagName,"id")) {
	                    	id = xmlData.getText();
		                   }
	                    if(TextUtils.equals(tagName,"type")) {
		                	type = xmlData.getText();
		                   }
	                    if(TextUtils.equals(tagName,"des")) {
		                	des = xmlData.getText();
		                   }
	                    if(TextUtils.equals(tagName,"cat")) {
		                	cat = xmlData.getText();
		                   }
	                    if(TextUtils.equals(tagName,"cd")) {
		                	cd = xmlData.getText();
		                   }
			                 break;

	                 case XmlResourceParser.END_TAG:
	                      Log.d(TAG, "END_TAG: name = " + xmlData.getName());
	                      recordsFound++; 
	                      tagName = "";
	                      if ("item".equals(xmlData.getName())) {
	                              publishProgress(imageLnk, name, id, type,des,cat,cd);
	                      }
                     break;
                
                  default:  break;
                } 
                
                eventType=xmlData.next(); 
                 
                if(recordsFound==0){ 
                    publishProgress(); 
                } 
            } 
             
        } 
 
         
        @Override 
        protected void onPostExecute(Integer result) { 

        	 TextView w = (TextView) findViewById(R.id.wait);
             w.setText(null);
        } 
         
 
        @Override 
        protected void onProgressUpdate(String... values){ 
             
            if(values.length>1) 
            { 
                String imageLnk = values[0]; 
                String name = values[1];
                String id = values[2];
                String type = values[3];
                String des = values[4];
                String cat = values[5];
                String cd = values[6];
                 
                Main.this.rec(imageLnk,name,id,type,des,cat,cd); 
            }
             
            super.onProgressUpdate(values); 
        } 
         
         
    }     

tryDownloadingXmlData() должна уметь принимать адрес к скрипту

onProgressUpdate() - мы можем в основном классе изменять полностью, и processRecivedData() тоже может быть везде разная...

Т.е. я хочу максимально сократить в коде процесс парсинга XML, так как есть несколько разных активити которые будут подгружать XML с разных адресов и сообщения будут разные по структуре....
в итоге, в tryDownloadingXmlData() передаем адрес к XML, onProgressUpdate() и processRecivedData() строим в кадом активити индивидуальное, а остальное - остается общее для всех.....

Как это реализовать?

Re: Подключение своих классов к основному

Добавлено: 23 июл 2013, 19:08
KamiSempai
sanu0074 писал(а):Как это реализовать?
Сделать класс абстрактным. Метод onProgressUpdate не описывать, а processRecivedData сделать абстрактным. В качестве параметра в AsyncTask передавать строку с адресом, ну и в tryDownloadingXmlData передавать именно эту строку как параметр.
Потом можно создавать дочерний класс от класса AsyncDownloader описывая лишь методы onProgressUpdate и processRecivedData.