2012-01-04 10 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(); 
     } 
    } 

私はちょうどこのように新しいクラスに

の方法「プライベート文字列getEventsFromAnXMLを」ラップ:

public class readXML { 

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

'getEventsFromAnXML'メソッドを使って別のクラスにコードを移動しようとしていますか? –

+1

それはどういう意味ですか?コードをどこに移動しますか?あなたはあなたの質問を言い換えることができますか? – akkilis

+0

申し訳ありません...私はそれが働くようになった。私は上記の元の投稿を編集しました。私が意味していたのは、メソッド "getEventsFromAnXML"を独自のクラスに移動することでした。 – SkyeBoniwell

答えて

1

あなたがこれを行うに抽象コンテキストクラスを使用する必要があります。

変更するには、XMLパーサーメソッドのパラメータの型:

private String getEventsFromAnXML(Context ctx) 
{ 

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

} 

をそして、このようなあなたの活動からそれを呼び出す:

public void onCreate(Bundle savedInstanceState) 
{ 

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

} 

これがうまくいきますように!

1

通常、あなたが選んだIDEは「リファクタリング」を行うことができます。これにより、メソッドを他のクラスに移動して使用することができます。

はい、他のクラスにメソッドを抽出するのはかなり一般的です。

関連する問題