我正在尝试编写一个迭代文本文件的类,它看起来像这样(它是〜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;
}
}
答案 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