我在最新的Android记事本教程link中找到了此代码段,该教程使用的是contentprovider并实现了PipeDataWriter。
接口的方法是writeDataToPipe,它们实现如下:
@Override
public void writeDataToPipe(ParcelFileDescriptor output, Uri uri, String mimeType, Bundle opts, Cursor c) {
// We currently only support conversion-to-text from a single note entry,
// so no need for cursor data type checking here.
FileOutputStream fout = new FileOutputStream(output.getFileDescriptor());
PrintWriter pw = null;
try {
pw = new PrintWriter(new OutputStreamWriter(fout, "UTF-8"));
pw.println(c.getString(READ_NOTE_TITLE_INDEX));
pw.println("");
pw.println(c.getString(READ_NOTE_NOTE_INDEX));
} catch (UnsupportedEncodingException e) {
Log.w(TAG, "Ooops", e);
} finally {
c.close();
if (pw != null) {
pw.flush();
}
try {
fout.close();
} catch (IOException e) {
}
}
}
我怀疑他们为什么特别使用PipeDataWriter?
这是某种设计模式吗?
我发现没有使用它的其他来源。为什么这样?
答案 0 :(得分:3)
为什么他们特意使用PipeDataWriter?
他们在openPipeHelper()
的实施中使用openTypedAssetFile()
。 openPipeHelper()
将PipeDataWriter
作为参数。在他们的情况下,他们在PipeDataWriter
本身上实施了NotePadProvider
,因此需要实施openPipeHelper()
来履行PipeDataWriter
界面所需的合同。
PipeDataWriter
和openPipeHelper()
是API级别11的新手。以前,您必须使用自己的解决方案来分支线程以返回文件内容。