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 将指向任何内容,因为图片已被删除.这就是所有人 :)
所以我正在使用推特 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 将指向任何内容,因为图片已被删除.这就是所有人 :)