2013-11-26 3 views
0

webservice를 사용하여 하나의 XML 파일을 만들고 하나의 ASYNC를 만들어 SAXXMLParser를 사용하여이 파일을 다운로드 한 다음 구문 분석했습니다. 그러나이 작업을 수행하는 데 너무 오래 걸립니다. 현재 2500 행과 10 열의 데이터가 있습니다. 약 5 분이 소요됩니다. 이는 용납 될 수없는 일이다. 가 여기 내 코드SAX XML 파서가 너무 느린 이유

 public class AsyncStock extends AsyncTask<Void, Void, Void> { 
List<Stock> mystocks = null; 
Context mcontext; 
ProgressDialog pd; 
int x=0; 
public AsyncStock(Context context) { 
    super(); 
    this.mcontext = context; 
} 
@Override 
protected Void doInBackground(Void... arg0) { 
    // TODO Auto-generated method stub 

    try{ 
     URLConnection conn = new URL("http://192.168.1.2/mob2server.asmx/GetStock").openConnection(); 

     mystocks = SAXXMLParser.parse(conn.getInputStream()); 

    DatabaseHandlerStock dbc; 
    dbc=new DatabaseHandlerStock(mcontext); 
    String category, make, model, productcode, productname, smallimages, largeimages, description, mrp, unit, pkg; 
    for(Stock in :mystocks) 

     { 
     x++; 
      category=in.getCategory(); 
      make=in.getMake(); 
      model=in.getModel(); 
      productcode=in.getProductcode(); 
      productname=in.getProductname(); 
      smallimages=in.getSmallimages(); 
      largeimages=in.getLargeimages(); 
      description=in.getDescription(); 
      mrp=in.getMrp(); 
      unit=in.getUnit(); 
      pkg=in.getPkg(); 

      dbc.addContact(new Catalogue(category.replace("$","&"), make.replace("$","&"), model.replace("$","&"), productcode, productname.replace("$","&"), smallimages, largeimages, description.replace("$","&"), mrp, unit, pkg)); 
     } 
    dbc.close(); 
     } 
     catch (Exception e) 
     { 
      System.out.println(e.getMessage()); 
     } 
    return null; 
} 
@Override 
protected void onPostExecute(Void result) { 
    pd.cancel(); 
    Toast.makeText(mcontext, "Total " + x + " Models Imported!", Toast.LENGTH_LONG).show(); 
    super.onPostExecute(result); 


} 

@Override 
protected void onPreExecute() { 
    pd=new ProgressDialog(mcontext); 
    pd.setMessage("Please Wait. We are Downloading the New Catalogue..."); 
    pd.show(); 
    pd.setCancelable(false); 
    pd.setCanceledOnTouchOutside(false); 
    super.onPreExecute(); 
} 

}

입니다 여기에 파서 클래스

public class StockParse extends DefaultHandler { 

private List<Stock> stocks; 
private String tempVal; 
private Stock tempstock; 

public StockParse() { 
    stocks = new ArrayList<Stock>(); 
} 

public List<Stock> getStocks() { 
    return stocks; 
} 

// Event Handlers 
public void startElement(String uri, String localName, String qName, 
     Attributes attributes) throws SAXException { 
    // reset 
    tempVal = ""; 
    if (qName.equalsIgnoreCase("Table")) { 
     // create a new instance of employee 
     tempstock = new Stock(); 
    } 
} 

public void characters(char[] ch, int start, int length) 
     throws SAXException { 
// tempVal = new String(ch, start, length); 
    if(tempVal == null) 
     tempVal = new String(ch, start, length); 
     else 
      tempVal += new String(ch, start, length); 
} 

public void endElement(String uri, String localName, String qName) 
     throws SAXException { 
    if (qName.equalsIgnoreCase("Table")) 
    { 
     // add it to the list 
     stocks.add(tempstock); 
    } 
    else if (qName.equalsIgnoreCase("NAVIN")) 
    { 
     //tempstock.setCategory(tempVal); 
    } 
    else if (qName.equalsIgnoreCase("NKCATEGORY")) 
    { 
     tempstock.setCategory(tempVal); 
    } 
    else if (qName.equalsIgnoreCase("NKMAKE")) 
    { 
     tempstock.setMake(tempVal); 
    } 
    else if (qName.equalsIgnoreCase("NKMODEL")) 
    { 
     tempstock.setModel(tempVal); 
    } 
    else if (qName.equalsIgnoreCase("NKPRODUCTCODE")) 
    { 
     tempstock.setProductcode(tempVal); 
    } 
    else if (qName.equalsIgnoreCase("NKPRODUCTNAME")) 
    { 
     tempstock.setProductname(tempVal); 
    } 
    else if (qName.equalsIgnoreCase("NKSMALLIMAGES")) 
    { 
     tempstock.setSmallimages(tempVal); 
    } 
    else if (qName.equalsIgnoreCase("NKLARGEIMAGES")) 
    { 
     tempstock.setLargeimages(tempVal); 
    } 
    else if (qName.equalsIgnoreCase("NKDESCRIPTION")) 
    { 
     tempstock.setDescription(tempVal); 
    } 
    else if (qName.equalsIgnoreCase("NKMRP")) 
    { 
     tempstock.setMrp(tempVal); 
    } 
    else if (qName.equalsIgnoreCase("NKUNIT")) 
    { 
     tempstock.setUnit(tempVal); 
    } 
    else if (qName.equalsIgnoreCase("NKPKG")) 
    { 
     tempstock.setPkg(tempVal); 
    } 
} 

}

 class Stock 
     { 
    private String category, make, model, productcode, productname, smallimages, largeimages, description, mrp, unit, pkg; 

    public String getCategory() { 
    return category; 
} 


public void setCategory(String category) { 
    this.category = category; 
} 


public String getMake() { 
    return make; 
} 

public void setMake(String make) { 
    this.make = make; 
} 

public String getModel() { 
    return model; 
} 


public void setModel(String model) { 
    this.model = model; 
} 


public String getProductcode() { 
    return productcode; 
} 

public void setProductcode(String productcode) { 
    this.productcode = productcode; 
} 

public String getProductname() { 
    return productname; 
} 

public void setProductname(String productname) { 
    this.productname = productname; 
} 


public String getSmallimages() { 
    return smallimages; 
} 


public void setSmallimages(String smallimages) { 
    this.smallimages = smallimages; 
} 

public String getLargeimages() { 
    return largeimages; 
} 


public void setLargeimages(String largeimages) { 
    this.largeimages = largeimages; 
} 

public String getDescription() { 
    return description; 
} 


public void setDescription(String description) { 
    this.description = description; 
} 

public String getMrp() { 
    return mrp; 
} 

public void setMrp(String mrp) { 
    this.mrp = mrp; 
} 

public String getUnit() { 
    return unit; 
} 

public void setUnit(String unit) { 
    this.unit = unit; 
} 

public String getPkg() { 
    return pkg; 
} 

public void setPkg(String pkg) { 
    this.pkg = pkg; 
} 

친절하게 내 분석을 가속화하는 데 도움이됩니다. 내가이 말을 처음 접했을 때.

+0

파서의 오류는 확실합니까? – Henry

+0

예. Assets의 xml 파일을 사용하여이 코드를 사용했기 때문에 여전히 수행 속도가 매우 느립니다. –

답변

0

Json은 XML보다 매우 약합니다. 일단 비교해 보면 Json 파일이 xml 파일보다 두 번 연못에있는 것을 보았습니다.

관련 문제