2012-01-04 42 views
3

我有下面的代碼,我從Android java教程中使用該代碼。將代碼從onCreate方法移出並放入其自己的類文件中

該代碼都在應用程序的主要java文件onCreate方法,我想將XML處理部分移動到一個單獨的類。

我嘗試了幾種不同的方法,但所有這些方法都失敗了,並且變得更加笨重,因此值得。

所以我的問題是,有沒有一種很好的/標準的方式將代碼從主要的java文件中移出來並轉換爲一個單獨的類?

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    TextView myXmlContent = (TextView)findViewById(R.id.my_xml); 
    String stringXmlContent; 

    try { 
      stringXmlContent = getEventsFromAnXML(this); 
      myXmlContent.setText(stringXmlContent); 
     } catch (XmlPullParserException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
    } 

    private String getEventsFromAnXML(Activity activity) 
      throws XmlPullParserException, IOException 
    { 
     StringBuffer stringBuffer = new StringBuffer(); 
     Resources res = activity.getResources(); 
     XmlResourceParser xpp = res.getXml(R.xml.myxml); 
     String elType = "mt"; 
     int counter = 1; 
     int mainTopics = 0; 
     int subTopics = 0; 
     xpp.next(); 

     int eventType = xpp.getEventType(); 
     while (eventType != XmlPullParser.END_DOCUMENT) 
     { 
      if(eventType == XmlPullParser.START_DOCUMENT) 
      { 
       stringBuffer.append("News Categories"); 
      } 
      else if(eventType == XmlPullParser.START_TAG) 
      { 
       if(xpp.getName().equalsIgnoreCase("subTopic")) { 
        elType = "st"; 
        subTopics += 1; 
       } else if(xpp.getName().equalsIgnoreCase("mainTopic")) { 
        elType = "mt"; 
        mainTopics += 1; 
       } else { 
        elType = ""; 
       } 
       //stringBuffer.append("\nSTART_TAG: "+xpp.getName()); 
      } 
      else if(eventType == XmlPullParser.END_TAG) 
      { 
       //stringBuffer.append("\nEND_TAG: "+xpp.getName()); 
      } 
      else if(eventType == XmlPullParser.TEXT) 
      { 
       if(elType.equalsIgnoreCase("st")) { 
        stringBuffer.append("\n   *"+xpp.getText()); 
       } else { 
        stringBuffer.append("\n " + counter + ") " + xpp.getText()); 
        counter+= 1;  
       } 
      } 
       eventType = xpp.next(); 
     } 
     //stringBuffer.append("\n--- End XML ---"); 
     stringBuffer.append("\n Total Topics: " + mainTopics + " Total SubTopics: " + subTopics); 
     return stringBuffer.toString(); 
    } 

我得到這個工作:將其移動到名爲ReadXML的一次像這樣的類:

 readXML processXml = new readXML(); 

    try { 
      stringXmlContent = processXml.getEventsFromAnXML(this); 
      myXmlContent.setText(stringXmlContent); 
     } catch (XmlPullParserException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
    } 

我剛剛結束的方法「私有String getEventsFromAnXML」的新類

這樣:

public class readXML { 

private String getEventsFromAnXML(Activity activity) 
     ....process XML... 
} 
+1

這不是很清楚,你是否試圖用'getEventsFromAnXML'方法將代碼移動到單獨的類中? – 2012-01-04 16:42:45

+1

究竟是什麼意思?移出代碼?你能改述你的問題嗎? – akkilis 2012-01-04 16:46:34

+0

對不起...我得到它的工作。我編輯了上面的原文。我的意思是,我想將方法​​「getEventsFromAnXML」移到它自己的類中。 – SkyeBoniwell 2012-01-04 16:51:16

回答

1

您應該使用抽象背景類來做到這一點:

更改參數類型的XML解析器的方法:

private String getEventsFromAnXML(Context ctx) 
{ 

    .... 
    Resources res = ctx.getResources(); 
    .... 

} 

從你的活動這樣稱呼它:

public void onCreate(Bundle savedInstanceState) 
{ 

    ..... 
    ctx = this.getApplicationContext(); 
    stringXmlContent = getEventsFromAnXML(ctx); 
    ..... 

} 

希望這個作品!

1

通常,您選擇的IDE允許執行「重構」,它允許您將方法移動到其他類中,然後您可以使用它。

是的,將方法提取到其他類中很常見。

相關問題