2

我在使用 contentprovider 并实现 PipeDataWriter的最新 Android 记事本教程链接中找到了此代码片段。

该接口有其方法 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?

这是某种设计模式吗?

我没有找到其他使用过它的来源。为什么这样?

4

1 回答 1

3

为什么他们特别使用 PipeDataWriter?

他们openPipeHelper()在他们的实现中使用openTypedAssetFile(). openPipeHelper()将 aPipeDataWriter作为参数。在他们的情况下,他们PipeDataWriterNotePadProvider自身上实现,因此需要实现openPipeHelper()以履行接口所需的合同PipeDataWriter

PipeDataWriter并且openPipeHelper()是 API 级别 11 的新手。以前,您必须推出自己的解决方案来分叉线程以返回文件的内容。

于 2012-12-05T12:22:28.063 回答