SharedPreferences.Editor类型中的方法putString(String,String)不适用于参数(String,InputStream)

时间:2014-01-08 22:02:10

标签: java android attachment email-attachments fileoutputstream

我正在尝试找出一种方法来保存InputStream中的数据并在另一个活动中使用它。到目前为止,我已尝试以下面的方式使用sharedPreferences - 但我收到一个错误说明:

"The method putString(String, String) in the type SharedPreferences.Editor is not applicable for the arguments (String, InputStream)"

就行:

editor.putString("fileName", attachment);

如何避免这种情况?

来源:

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    // get the attachment's filename
    Intent theIntent = getIntent();
    String attachmentFileName = "No file name found";
    if (theIntent != null && theIntent.getData() != null) {
        Cursor c = getContentResolver().query(theIntent.getData(), null,
                null, null, null);
        c.moveToFirst();
        final int fileNameColumnId = c
                .getColumnIndex(MediaStore.MediaColumns.DISPLAY_NAME);
        if (fileNameColumnId >= 0)
            attachmentFileName = c.getString(fileNameColumnId);

        try {

            InputStream attachment = getContentResolver().openInputStream(
                    getIntent().getData());
            SharedPreferences preferences = PreferenceManager
                    .getDefaultSharedPreferences(this);
            SharedPreferences.Editor editor = preferences.edit();
            editor.putString("fileName", attachment);
            editor.commit();
        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    }

3 个答案:

答案 0 :(得分:0)

共享首选项是一个XML文件,用于存储小块信息。您正在尝试将附件文件保存到它。这并不是共享优先设计的目的。您应该将文件保存在外部或内部存储上。查看更多here

至于您的具体错误,putString()方法的第二个参数是String。您必须将InputStream读入一个字节数组,然后将其转换为字符串(基础64?记住附件可以是二进制),这可以保存到共享首选项中。但正如我上面所说,我不相信这是你应该做的。

答案 1 :(得分:0)

您无法将InputStream存储在SharedPreferences中,因为只能保存原始数据(intbooleanString等)办法。

您应该做的是阅读数据,将其保存到String,然后您可以存储字符串(see here)

BufferedReader reader = new BufferedReader(new InputStreamReader(attachment));
StringBuilder out = new StringBuilder();
String line;
while ((line = reader.readLine()) != null) {
    out.append(line);
}

然后你可以做

editor.putString("fileName", out.toString());

如果确实想要将实际的InputStream发送到另一个活动(这是奇怪的,但我要判断谁),你可以使用{{1}来做}。

答案 2 :(得分:0)

就像其他人说的那样,共享偏好是不可能的,保持简单:

SharedPreferences.Editor editor = preferences.edit();
editor.putString("fileName", attachmentFileName);
editor.commit();