Android 在活动外使用 getAssets

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/11199900/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-20 06:17:47  来源:igfitidea点击:

Using getAssets outside an activity

android

提问by Laire

I try to parse a file in my DatabaseHandler class but Eclipse say:

我尝试解析 DatabaseHandler 类中的文件,但 Eclipse 说:

The method getAssets() is undefined for the type DatabaseHandler

方法 getAssets() 未定义为 DatabaseHandler 类型

This is the code:

这是代码:

 public class DatabaseHandler extends SQLiteOpenHelper {

    private static final int DATABASE_VERSION = 15;

    public DatabaseHandler(Context context) {
        super(context, "rettinfo", null, DATABASE_VERSION);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        Log.d("Create: ", "Creating antidotlist");
        String CREATE_ANTIDOT_TABLE = "CREATE TABLE antidots (id INTEGER PRIMARY KEY antidot TEXT, dos TEXT)";
        Log.d("Create: ", CREATE_ANTIDOT_TABLE);
        db.execSQL(CREATE_ANTIDOT_TABLE);

        InputStream antidots = getAssets().open("antidot/antidots");
        InputStreamReader input = new InputStreamReader(antidots);
        BufferedReader buffreader = new BufferedReader(input,2*1024);
        String line;
        while ((line = buffreader.readLine()) != null) {
            String[] point_t = line.split(",");
        }
        antidots.close();
    }

}

Update for Tim

蒂姆更新

This is how eclipse dont make any errors

这就是日食不会犯任何错误的方式

int i = 0;
InputStream antidots;
    try {
        antidots = mCtx.getAssets().open("antidot/antidots");
        InputStreamReader input = new InputStreamReader(antidots);
        BufferedReader buffreader = new BufferedReader(input,2*1024);
        String line;
        while ((line = buffreader.readLine()) != null) {
            i++;
            ContentValues values = new ContentValues();
            String[] antidot = line.split("#");
            int id = Integer.parseInt(antidot[0]);
            values.put("id", id);
            values.put("antidot", antidot[1]);
            values.put("dos", antidot[2]);  
            db.insert("antidots", null, values);                     
        }
        antidots.close();           
    } catch (IOException e) {
        e.printStackTrace();
    }

回答by FoamyGuy

Store a reference to the Contextthat you get from the constructor then call getAssets() on that reference.

存储对Context从构造函数获得的 的引用,然后对该引用调用 getAssets()。

public class DatabaseHandler extends SQLiteOpenHelper {

    private static final int DATABASE_VERSION = 15;
    private Context mCtx; //<-- declare a Context reference
    public DatabaseHandler(Context context) {
        super(context, "rettinfo", null, DATABASE_VERSION);
        mCtx = context; //<-- fill it with the Context you are passed
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        Log.d("Create: ", "Creating antidotlist");
        String CREATE_ANTIDOT_TABLE = "CREATE TABLE antidots (id INTEGER PRIMARY KEY antidot TEXT, dos TEXT)";
        Log.d("Create: ", CREATE_ANTIDOT_TABLE);
        db.execSQL(CREATE_ANTIDOT_TABLE);

        InputStream antidots = mCtx.getAssets().open("antidot/antidots"); //<-- call getAssets on your Context object.
        InputStreamReader input = new InputStreamReader(antidots);
        BufferedReader buffreader = new BufferedReader(input,2*1024);
        String line;
        while ((line = buffreader.readLine()) != null) {
            String[] point_t = line.split(",");
        }
        antidots.close();
    }

}