Android と Java は初めてですが、Objective C と iPhone プログラミングの経験はある程度あります。すでに iPhone 用に設計したアプリを再作成しようとしていますが、単純なコンセプトであるべきものに行き詰まっています。
私の ParserHandler クラスでは、サーバーからの XML を解析し、データを 3 つの個別の ArrayList に入れています。解析はうまくいっているようです。ParserHandler.java クラス内の ArrayList をログに記録して反復すると、すべて正常に動作します。(List1.java クラスにはいくつかの文字列変数があり、ParserHandler でそのように宣言しましたprivate List1 theList = new List1();
:)
for(int i = 0; i<dogArray.size(); i++){
theList = dogArray.get(i);
Log.i(TAG, "looping " + i + " " + theList.Name);
Log.i(TAG, "looping " + i + " " + theList.PhotoUrl);
Log.i(TAG, "looping " + i + " " + theList.Type);
}//this loops fine and has all the data
dogArray は次のように宣言されます:public ArrayList<List1> dogArray = new ArrayList<List1>();
今、クラス DogListView.java から dogArray にアクセスしたいので、onCreate メソッドで次のことを試みます:
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.dog_list_view);
ParserHandler ph = new ParserHandler();
int d = ph.getNumberofDogs();
int m = ph.dogArray.size();
Log.i(TAG, "dog size is:" + d + "and:" + m);}
2 つの異なる方法を試しましたが、どちらも常にログに「0」を返します。ただし、正しいサイズが常にログに記録され、ログが ParserHandler.java クラスから取得された場合はすべてのデータが存在します。
これは、ParserHandler.java のアクセサー メソッドです。
public int getNumberofDogs(){
return dogArray.size();
}
私はアクセサメソッドを介してdogArrayにアクセスしたいと思います(これは私が収集したものからのベストプラクティスのようです)が、私はすべての提案を受け入れています。
前もって感謝します!!
編集 8/23/12
を宣言することで問題を解決することになりましたArrayLists Static
。私はこれ(およびpublic
)アプローチがOOPにとって理想的ではないことを知っていますが、私はそれを採用しています。私の ParserHandler.java で宣言しました
public static ArrayList<List1> dogArray = null;
public static ArrayList<List1> otherArray = null;
public static ArrayList<List1> catArray = null;
次に、SAX パーサーを開始します。
@Override
public void startElement(String uri, String localName, String qName,
Attributes attributes) throws SAXException {
// TODO Auto-generated method stub
super.startElement(uri, localName, qName, attributes);
if (qName.equalsIgnoreCase("ArrayOfDataFeedAnimal")){
catArray = new ArrayList<List1>();
dogArray = new ArrayList<List1>();
otherArray = new ArrayList<List1>();
}else if(qName.equalsIgnoreCase("DataFeedAnimal")){
theList = new List1();
}
その後、残りの SAX 構文解析が行われます。最後に、配列にアクセスしたいクラスから、配列ParserHandler.dogArray.size()
のサイズを取得するために静的な方法でそれを行うだけです。配列を取得する必要があるクラスから適切と思われる方法で配列を操作できるようになりました。
単純なint[]
.
うまくいけば、これは将来誰かを助けることができます。
フィードバックをお寄せいただきありがとうございます。
乾杯!