app 和 uri 的内部存储

internal storage for app and uri

所以我正在使用推特 api 并且我想用我使用的图片发推文:

    TweetUri = Uri.fromFile(saveIT);
    TweetComposer.Builder builder = new TweetComposer.Builder(this)
            .text("")
            .image(TweetUri);
    builder.show();

原图是位图,所以我做的(不确定这样是否最优)是保存在内部存储中:

    private File saveToInternalStorage(Bitmap bitmapImage){
    ContextWrapper cw = new ContextWrapper(getApplicationContext());
    // path to /data/data/yourapp/app_data/imageDir
    File directory = cw.getDir("imageDir", Context.MODE_PRIVATE);
    // Create imageDir
    String timeStamp = new SimpleDateFormat("ddMMyyyy_HHmmss").format(new Date());
    String mImageName="MI_"+ timeStamp +".jpg";
    File mypath=new File(directory,mImageName);

    FileOutputStream fos = null;
    try {
        fos = new FileOutputStream(mypath);
        // Use the compress method on the BitMap object to write image to the OutputStream
        bitmapImage.compress(Bitmap.CompressFormat.PNG, 100, fos);
    } catch (Exception e) {
        e.printStackTrace();
    } finally {
        try
        {
            fos.close();
        }
        catch(Exception e)
        {
            e.printStackTrace();
        }
    }
    return mypath;
}

执行 fromfile 方法时,returns 文件将是 TweetUri 中的 "saveIT"。当然,这会使存储过载,所以我打算做的是在应用程序停止时擦除其内部存储(除了我为推文保存的临时图像外,内部存储中没有其他数据保存):

@Override
protected void onStop() {
    super.onStop();
    File MSD = this.getApplicationContext().getFilesDir();
    File [] lisFiles = MSD.listFiles();
    for(int i=0;i<lisFiles.length;i++)
    {
        boolean deleted = lisFiles[i].delete();
    }
}

None 这件作品...当我保存图像以验证是否正在删除时,我似乎找不到任何图像。此外,当用户单击推文时,也不会向推文添加任何图像。不知道我在这里做错了什么......实际上我不想将图像保存在内部存储中但我这样做是因为推文 api 使用 URI 来推文而不是位图。

我将其切换为写入外部存储并且工作正常。我也将它切换为在 onDestroy 中删除。这更好,因为当我调用 Twitter API 时,它会切换活动,因此会调用 onstop,这会过早删除临时图片。现在还为时过早,因为如果用户在推特 api 上单击取消,返回到我的 api,然后再次调用推特 api,则 uri 将指向任何内容,因为图片已被删除.这就是所有人 :)