无法在AsyncTask中使用getAssets()打开文件

时间:2014-03-12 21:06:13

标签: android android-asynctask

我正在尝试编写一个迭代文本文件的类,它看起来像这样(它是〜5000行):

Postnr  Poststad    Bruksområde Kommunenummer   Lat Lon Merknad Nynorsk Bokmål  Engelsk 
0001    Oslo    Postboksar  301 59.91160    10.75450    Datakvalitet: 2. Koordinatar endra 28.09.2012. Oppdatert 04.12.2012 url1    url2    url3 

我的麻烦是:对于SearchTabTxt类型

,方法getassets未定义

我正在尝试从assets文件夹中读取文件,但我似乎无法找到解决方案。我试着写一个搜索类:

public class SearchTabTxt extends AsyncTask<String, Void, ArrayList<String[]>> {

    protected ArrayList<String[]> doInBackground(String... inputString) {
        ArrayList<String[]> list = new ArrayList<String[]>();
        try {
            InputStream is = getAssets().open("file.txt");
            if (is != null) {
                String search = inputString[0].toString();
                InputStreamReader inputreader = new InputStreamReader(is,
                        "UTF-8");
                BufferedReader buffreader = new BufferedReader(inputreader);
                int antallTreff = 0;

                while (buffreader.readLine() != null) {
                    ArrayList<String> placeInformation = new ArrayList<String>();
                    if (buffreader.readLine().contains(search)) {
                        antallTreff++;
                        System.out.println("Found: " + search);
                        placeInformation.clear();
                        for (String i : buffreader.readLine().split("\t")) {
                            placeInformation.add(i);
                        }
                        System.out.println(placeInformation.get(11));
                        // Sorry about the Norwegian will rewrite
                        if (antallTreff >= 3) {
                            System.out.println("Did I find something?");
                            break;
                        }
                        if (buffreader.readLine() == null) {
                            break;
                        }
                    }

                }

            }

        } catch (ParseException e) {
            Log.e("Error", e + "");

        } catch (ClientProtocolException e) {
            Log.e("Error", e + "");

        } catch (IOException e) {
            Log.e("Error", e + "");

        }
        return list;
    }
}

1 个答案:

答案 0 :(得分:1)

嗯,这很简单。 SearchTabTxt类中没有getAssets()方法。要获取资产,您需要一个上下文。为SearchTabTxt类创建一个公共构造函数,并传递一个Context。

private Context context;
public SearchTabTxt (Context myContext) {
    this.context = myContext;
}

现在在doINbackground方法中你可以这样做:

InputStream is = context.getAssets().open("file.txt");

现在,在您创建AsyncTask的Activity中,您可以像这样开始任务:new SearchTabTxt(this).execute(params);这是有效的,因为您的Activity(this)是Context的子类型。 更多相关信息:getAssets(); from another class