2010-11-06 84 views
0

你好, 我目前在Android中有我的主要活動。這就是所謂的開始活動。 我的programm被設計成可以從網上加載一個XML文件並解析它。在一個類中打開文件

現在在將來我還想添加程序加載XML文件的能力,而不是在每次運行時解析它,它都會從SQLLite數據庫加載數據。

但是,我需要編寫一個封裝不同功能的接口。

如果需要使用XML,我寫了一個小類,它應該覆蓋XML加載 - 但我不能使用openFileInput(...)...因爲該類不是一個活動(是否需要成爲一個??)。

package com.android.mensa.handledata; 

import java.io.File; 
import java.io.FileInputStream; 
import java.io.FileNotFoundException; 
import java.io.IOException; 
import java.util.ArrayList; 
import java.util.TreeMap; 

import javax.xml.parsers.ParserConfigurationException; 

import org.xml.sax.SAXException; 

import android.app.Activity; 

import com.android.mensa.datastructure.LunchPlace; 
import com.android.mensa.getData.XMLHandler; 
import com.android.mensa.interfaces.Data; 

/** 
* This class implements the interface Data 
* and gathers the necessary informations out of the XML File on the actual device. 
*/ 
public class XMLData implements Data{ 

    @Override 
    public void getMenuforDay() { 
     // TODO Auto-generated method stub 

    } 

    public TreeMap<String, LunchPlace> open() 
    { 
     File test = new File("lunchfile"); 
     FileInputStream fis; 
     TreeMap<String, LunchPlace> places = new TreeMap<String, LunchPlace>(); 
     try { 
      fis = openFileInput("lunchfile"); 
      XMLHandler xmlhandler = new XMLHandler(); 
      places = xmlhandler.parse(fis);    
     } catch (FileNotFoundException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
     catch (SAXException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } catch (ParserConfigurationException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 

     return places; 
    } 
} 

我想我的問題很簡單:請問XMLhandler輔助類(這應該返回一個TreeMap)必須是一個活動或者我還能怎麼實現我的功能?

回答

1

我的頭頂,我能想到的兩種方式來給它:

第一種是隻使用:

FileInputStream fis = new FileInputStream("lunchfile"); 

這將然而,讀取來自文件「lunchfile」 SD卡的根,我並不確定這是否是你想要的,但如果你這樣做,我建議改變它「/ yourapplication/lunchfile」。

另一種是將活動傳遞給讀者類。

public TreeMap<String, LunchPlace> open(Context activity) 
{ 
     [...] 
     fis = activity.openFileInput("lunchfile"); 
     [...] 
} 

希望它能幫助:)

+0

'新的FileInputStream( 「lunchfile」)'不應該從SD卡的根目錄讀取。請在'Activity'或其他上下文中使用'Environment.getExternalStorageDirectory()'作爲外部存儲器的根目錄(通常是SD卡)和'getFilesDir()'以獲取板載應用程序本地文件的位置閃。 – CommonsWare 2010-11-06 12:39:34

+0

我存儲的文件直接存儲在移動設備上。這只是一個小小的XML文件。我剛剛買了你的書......希望我能從他們身上學到很多東西。 – theXs 2010-11-06 13:06:31

+0

@CommonsWare:對不起,當我發佈我沒有訪問任何代碼,所以它只是從我的頭頂,我只是檢查自己的代碼,並在那裏我使用Environment.getExternalStorageDirectory(),(和getExternalStorageState() )。 – Anton 2010-11-06 15:23:20