我应该从哪个上下文中读取另一个java类的资源?

时间:2014-05-28 17:41:04

标签: android

我有2个Java文件(CreateMyDb.java,ReadfromAssets.java)。 在ReadfromAssets.java中,我有以下代码。

如果我想从CreateMyDb.java调用ReadFileFromAssets方法,我应该如何调用,我应该传递的上下文参数是什么?我正在尝试使它工作但是徒劳无功。 感谢

public class ReadFromAssets extends Activity {
private static final String splitBy = ",";
private static int ID_Count = 6;
private static final String ObjName =  "Question";
private static String NewObjName = "";

    public void ReadFileFromAssets(Context myContext) {

        //read from assets
        myContext.getAssets();
        AssetManager assetManager = myContext.getAssets();
        InputStreamReader is = null;
        try {
            is = new InputStreamReader(assetManager.open("questions.csv"));
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

           BufferedReader reader = new BufferedReader(is);
           try {
            reader.readLine();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
           String line;
           try {
            while ((line = reader.readLine()) != null) {
                NewObjName = ObjName+ID_Count;
                String[] QDetails = line.split(splitBy);
                Question NewObjName=new Question(QDetails[0],QDetails[1],QDetails[2],QDetails[3],QDetails[4],QDetails[5], QDetails[6]);
                CreateMyDb db=new CreateMyDb (this);    
                db.AddToDB(NewObjName);
                ID_Count = ID_Count+1;
                   }
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        //use assets however
    }
    }

在CreateMyDb.java文件中,我调用的方法与

相同
   private void addQuestions(){ 
    ReadFromAssets ReadCsv = new ReadFromAssets(); 
    ReadCsv.ReadFileFromAssets();//what should I pass as context here?
}

2 个答案:

答案 0 :(得分:0)

最中级的解决方案是将您的活动的上下文传递给此类。这可能吗?

如果您不想传递参数,可以创建一个Application类,以便随时随地获取应用程序的上下文。

public class ApplicationClass extends Application
{
     private static ApplicationClass myAppClass;

     @Override
     public void onCreate()
     {
          super.onCreate();

          myAppClass = this;
     }

     public static ApplicationClass getMyAppClass()
     {
          return myAppClass;
     }
}

然后,您必须在标签

下的ManifestFile中添加下一行
android:name="com.yourapp.ApplicationClass"

现在,您可以在不传递任何上下文的情况下调用方法 ApplicationClass.getMyAppCLass()。getAssets()

我必须说在这种情况下,Application类没有以正确的方式使用。这个类类型用于保持应用程序状态,但这是我能想到的唯一方法,可以在不传递任何参数的情况下做你想做的事。

答案 1 :(得分:0)

传递您正在访问此类方法的该类的上下文 ReadCsv.ReadFileFromAssets(CreateMyDb.this);  如果CreateMyDb类从activity或fragementactivity扩展,它显然也有该活动的上下文,所以传递你正在访问的类的上下文谢谢你可以帮助你