在 Android 中,我如何从我的应用程序将 http 图像作为推文分享到推特
In Android how can i share an http image to twitter as a tweet from my application
我看了很多文章。但不知何故我无法实现我想要实现的目标。我的应用程序中有一个 http 图像 link,我想将其作为来自 Twitter 应用程序的图像附件进行共享。我试过跟随。但它似乎无法正常工作,因为 Twitter 期望它是本地的 url.
TweetComposer.Builder builder = new TweetComposer.Builder(context)
.text(text)
.image(Uri.parse("https://dummyimage.com/300/09f/fff.png"));
builder.show();
现在我知道它需要本地路径,我尝试使用 Picasso 将图像下载到 phone,如下所示。
Picasso.get().load(CONSTANT.IAMGE_URI + list.get(position).getEvent_model().getPhoto_link())
.placeholder(R.drawable.placeholder)
.error(R.drawable.placeholder)
.into(getTarget(list.get(position).getEvent_model().getPhoto_link()));
File myImageFile = new File(getFileFullPath(list.get(position).getEvent_model().getPhoto_link()));
Picasso.get().load(myImageFile).into(holder.iv_album_image);
这是获取目标的代码。
private static Target getTarget(final String fileName) {
Target target = new Target() {
//This method in target is called by picasso when image downloaded
@Override
public void onBitmapLoaded(final Bitmap bitmap, Picasso.LoadedFrom from) {
new Thread(new Runnable() {
@Override
public void run() {
try {
File file = new File(getFilename(fileName));
if (file.exists()) {
file.delete();
}
file.createNewFile();
FileOutputStream fileoutputstream = new FileOutputStream(file);
ByteArrayOutputStream bytearrayoutputstream = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.PNG, 60, bytearrayoutputstream);
fileoutputstream.write(bytearrayoutputstream.toByteArray());
fileoutputstream.close();
} catch (IOException e) {
Log.e("IOException", e.getLocalizedMessage());
}
}
}).start();
}
@Override
public void onBitmapFailed(Exception e, Drawable errorDrawable) {
}
@Override
public void onPrepareLoad(Drawable placeHolderDrawable) {
}
};
return target;
}
public static String getFilename(String fileName) {
File file = new File(Environment.getExternalStorageDirectory().getPath(), "Images");
if (!file.exists()) {
file.mkdirs();
}
return (file.getAbsolutePath() + "/" + fileName);
}
在这种情况下,照片没有加载到 imageview 中,也没有下载到本地。
您需要将图片下载到您的 phone,并使用本地路径。
最终 image:
Uri 应该是本地文件的文件 Uri
Uri.fromFile(someExternalStorageFile)
您能否更改您的 getFilename 以匹配如下:
public static String getFilename(String fileName, Context context) {
int code = context.getPackageManager().checkPermission(
android.Manifest.permission.WRITE_EXTERNAL_STORAGE,
context.getPackageName());
if (code == PackageManager.PERMISSION_GRANTED) {
File file = new File(Environment.getExternalStorageDirectory().getPath(), "Images");
if (!file.exists()) {
file.mkdirs();
}
return (file.getAbsolutePath() + "/" + fileName);
}
return "";
}
并在每个return处设置一个断点。我的假设是你 returning "";
我看了很多文章。但不知何故我无法实现我想要实现的目标。我的应用程序中有一个 http 图像 link,我想将其作为来自 Twitter 应用程序的图像附件进行共享。我试过跟随。但它似乎无法正常工作,因为 Twitter 期望它是本地的 url.
TweetComposer.Builder builder = new TweetComposer.Builder(context)
.text(text)
.image(Uri.parse("https://dummyimage.com/300/09f/fff.png"));
builder.show();
现在我知道它需要本地路径,我尝试使用 Picasso 将图像下载到 phone,如下所示。
Picasso.get().load(CONSTANT.IAMGE_URI + list.get(position).getEvent_model().getPhoto_link())
.placeholder(R.drawable.placeholder)
.error(R.drawable.placeholder)
.into(getTarget(list.get(position).getEvent_model().getPhoto_link()));
File myImageFile = new File(getFileFullPath(list.get(position).getEvent_model().getPhoto_link()));
Picasso.get().load(myImageFile).into(holder.iv_album_image);
这是获取目标的代码。
private static Target getTarget(final String fileName) {
Target target = new Target() {
//This method in target is called by picasso when image downloaded
@Override
public void onBitmapLoaded(final Bitmap bitmap, Picasso.LoadedFrom from) {
new Thread(new Runnable() {
@Override
public void run() {
try {
File file = new File(getFilename(fileName));
if (file.exists()) {
file.delete();
}
file.createNewFile();
FileOutputStream fileoutputstream = new FileOutputStream(file);
ByteArrayOutputStream bytearrayoutputstream = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.PNG, 60, bytearrayoutputstream);
fileoutputstream.write(bytearrayoutputstream.toByteArray());
fileoutputstream.close();
} catch (IOException e) {
Log.e("IOException", e.getLocalizedMessage());
}
}
}).start();
}
@Override
public void onBitmapFailed(Exception e, Drawable errorDrawable) {
}
@Override
public void onPrepareLoad(Drawable placeHolderDrawable) {
}
};
return target;
}
public static String getFilename(String fileName) {
File file = new File(Environment.getExternalStorageDirectory().getPath(), "Images");
if (!file.exists()) {
file.mkdirs();
}
return (file.getAbsolutePath() + "/" + fileName);
}
在这种情况下,照片没有加载到 imageview 中,也没有下载到本地。
您需要将图片下载到您的 phone,并使用本地路径。
最终 image: Uri 应该是本地文件的文件 Uri
Uri.fromFile(someExternalStorageFile)
您能否更改您的 getFilename 以匹配如下:
public static String getFilename(String fileName, Context context) {
int code = context.getPackageManager().checkPermission(
android.Manifest.permission.WRITE_EXTERNAL_STORAGE,
context.getPackageName());
if (code == PackageManager.PERMISSION_GRANTED) {
File file = new File(Environment.getExternalStorageDirectory().getPath(), "Images");
if (!file.exists()) {
file.mkdirs();
}
return (file.getAbsolutePath() + "/" + fileName);
}
return "";
}
并在每个return处设置一个断点。我的假设是你 returning "";