#java #android #caching #picasso #image-caching
#java #Android #кэширование #picasso #кэширование изображений
Вопрос:
Это содержимое этого метода LoadImage никогда не вызывается, хотя я вызываю этот метод в onActivityResult.
public void loadImage(Uri uri){
File file = new File(getApplicationContext().getExternalCacheDir().getAbsolutePath() "/" uid ".jpg");
Log.d("Check Bitmap", "file" file);
try {
Picasso picasso = Picasso.get();
Bitmap bitmap = picasso.load(uri).get();
Log.d("Check Bitmap", "bitmap working");
bitmap.compress(Bitmap.CompressFormat.JPEG, 100,new FileOutputStream(file));
} catch (Exception e) {
Log.d("Check Bitmap", "bitmap not working, cached");
e.printStackTrace();
}
Моя цель — извлечь изображение из файла.
Это мой результат onActivityResult
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(requestCode ==1000){
{
if(resultCode == Activity.RESULT_OK){
imageUri = data.getData();
Context context;
final ProgressDialog dialog = new ProgressDialog(myProfile.this);
dialog.setMessage("Uploading Image...");
dialog.show();
profilepic.setImageURI(imageUri);
ref.putFile(imageUri).addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
@Override
public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
ref.getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>() {
@Override
public void onSuccess(Uri uri) {
final Picasso picasso = Picasso.get();
picasso.setIndicatorsEnabled(true);
picasso.load(uri).into(profilepic);
downloadUri = uri;
dialog.dismiss();
Toast.makeText(getApplicationContext(), "Image Uploaded!", Toast.LENGTH_SHORT).show();
loadImage(uri); //Here I call
Комментарии:
1. какие журналы вы видите? можете ли вы опубликовать также свои
onCreate
методы? (куда вы звонитеloadImage
)2. На самом деле я вызываю метод в onActivityResult , я ранее писал onCreate для простоты. Хотя я надеюсь, что это ни на что не повлияет, так как тост работает нормально, и все остальные строки также выполняются нормально.
3. И мои журналы отображаются не так, как ожидалось по строке в методе LoadImage .
Ответ №1:
Вы не должны использовать разделенный пробелом ТЕГ для журналов. Попробуйте заменить ваше "Check Bitmap"
на что-то из одного слова (например. «Checkere»). Затем вы сможете просмотреть свой журнал в своем Logcat. Вам нужно поместить все в поток.
Вот полный блок кода для LoadImage
public void loadImage(final Uri uri){
Thread thread = new Thread() {
@Override
public void run() {
Log.d("Checkere", "stuck at file");
File file = new File(getCacheDir() File.separator uid ".jpg");
Log.d("Checkere", "file" file);
try {
Picasso picasso = Picasso.get();
Bitmap bitmap = picasso.load(uri).get();
Log.d("Checkere", "bitmap working");
FileOutputStream fOut = new FileOutputStream(file);
bitmap.compress(Bitmap.CompressFormat.PNG, 85, fOut);
fOut.flush();
fOut.close();
} catch (Exception e) {
Log.d("Checkere", e.getMessage());
e.printStackTrace();
}
}};
thread.start();
}
Обратите внимание, что я также добавил эти две строки в ваш код.
fOut.flush();
fOut.close();
Я надеюсь, что это поможет!