2011-08-03 9 views
-1

私はアンドロイドプログラミングで簡単な疑いがあります。私はJavaのcoding.soに精通していないので、それは簡単な問題かもしれません。Javaでオブジェクトを作成する

最初の2行では、別のアクティビティからこのアクティビティに渡された配列を取得しています...次に、配列リストを作成しています。私は4行目にオブジェクトを作成しています。今問題が来る... 私は、私はBaseFeedParserクラスでそれを渡す必要があるURLの値を取得するためのforループを実行する必要があります。しかし、私は4行目を使用することはできません。つまり、ループ内でオブジェクトを作成するのは、毎回新しいオブジェクトを作成するためです。発生しないはずです...どうすればこの問題を修正できますか?事前に

    Intent myintent = getIntent(); 
     String[] ActiveURL = myintent.getStringArrayExtra("URL"); 

     List<String> titles = new ArrayList<String>(); 
     BaseFeedParser parser = new BaseFeedParser(url); 

     // fetching all active URLs 
     for (int i = 0; i < ActiveURL.length + 1; i++) { 
      url = ActiveURL[i]; 
      messages.addAll(parser.parse()); 
     } 

     // now getting the titles out of the messages for display 
     for (Message msg : messages) { 
      titles.add(msg.getTitle()); 
     } 

おかげで...

+0

BasefeedParseオブジェクトを毎回作成したくない場合は、BasefeedParserでコンストラクタを削除してから、そのURLをXMLParserクラスのparser.parser(URL)メソッドに渡す必要があります。ベースフィードパーサーURLの値を割り当てる別のメソッドを作成して、何らかの方法でBasefeedParserを実行します。これもエラーにつながる可能性があります。 –

+0

変数には小文字から始まるJavaの規約があります。 ActiveUrlをアクティブなURLに変更します。実際に私はあなたのコードを理解していない...私はインターネットで見つけたBaseFeedParserは、抽象クラスです。なぜ新しいObjectを作成できないのですか? – gregory561

+0

Java(そして、Androidもそうだと思いますが)オブジェクトの作成には基本的な問題はありません。 BaseFeedParserを作成するのが非常に高価な場合にのみ問題が発生しますが、なぜこのような状況になるのかわかりません。 (私はAPIを知らない) –

答えて

3

Javaコードでいくつかの問題があります

Intent myintent = getIntent(); 
    //variables are named in camel case, starting with a lower case letter 
    String[] activeURL = myintent.getStringArrayExtra("URL"); 

    List<String> titles = new ArrayList<String>(); 
    //we will use parser later, see below 
    //BaseFeedParser parser = new BaseFeedParser(url); 

    // fetching all active URLs 
    //it's very easy to loop through a table in java/C/C++ 
    //learn the pattern, it's the simplest, you got confused with the final index 
    for (int i = 0; i < activeURL.length ; i++) { 
     //here you don't change the former object url was referencing, 
     //you are saying that you give the name url to another object in the array 
     //it doesn't create any new item, change giving them a name to use them 
     url = activeURL[i]; 
     //create a new parser for each url, except if they can be recycled 
     //i.e they have a property setUrl 
     messages.addAll(new BaseFeedParser(url).parse()); 
    } 

    // now getting the titles out of the messages for display 
    for (Message msg : messages) { 
     titles.add(msg.getTitle()); 
    } 

は確かに、あなたも

Intent myintent = getIntent(); 
    String[] activeURL = myintent.getStringArrayExtra("URL"); 
    List<String> titles = new ArrayList<String>(); 

    // fetching all active URLs 
    //use a for each loop 
    for (String url : activeURL) { 
     //loop through messages parsed from feed to add titles 
     for (Message msg : new BaseFeedParser(url).parse()) { 
      titles.add(msg.getTitle()); 
     } 
    } 

によって全体を短縮することができメッセージの一覧が必要ない場合は、メッセージを呼び出しました。

+1

+1よく説明されている –

+0

ありがとうStéphane..ありがとうたくさんの – ps00131

+0

+1素晴らしいコードですが、これはハングしてANRダイアログを表示しますforループがUIスレッド自体のネットワーク操作にアクセスするため、@ ps00131にAsyncTaskまたはThreadingまたはServiceの内部でこのコードを使用することをお勧めします。 –

関連する問題