在我的代碼,用戶可以選擇一個「個人資料圖片」 用戶從圖庫中選擇圖片(確定工作)調整大小和裁剪(確定工作) 我有一個問題,分享因爲我必須在其他活動中看到該圖片 我需要在共享偏好設置上保存完整路徑,但我有一個「找不到文件」的錯誤,但該修補程序是正確的。保存共享首選項的圖片路徑
對不起,我英文 有完整的代碼:(當我再次打開這個活動,我有錯誤)
public class profilo extends Activity{
String nickname;
EditText nick;
ImageView prof;
ImageButton elisse;
AlertDialog.Builder builder;
private static int RESULT_LOAD_IMAGE = 1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.settings);
//codici relativi alla action bar
ActionBar ab = getActionBar();
ab.setHomeButtonEnabled(true);
ab.setDisplayHomeAsUpEnabled(true);
setTitle("Impostazioni utente");
getActionBar().setIcon(R.drawable.back);
//________________________________
updatePreferencesData();
ImageButton Foto = (ImageButton) findViewById(R.id.imageButton1);
Button salva = (Button) findViewById(R.id.buttonSalva);
Button password = (Button) findViewById(R.id.button1);
elisse= (ImageButton) findViewById(R.id.imageView1);
Switch facebook = (Switch) findViewById(R.id.switch1);
nick = (EditText) findViewById(R.id.editText1);
nickname = "temp";
prof= (ImageView) findViewById(R.id.imageView2);
View.OnClickListener gestore = new View.OnClickListener() {
public void onClick(View view) {
switch(view.getId()){
case R.id.imageButton1: //imposta foto profilo
Intent i = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
startActivityForResult(i, RESULT_LOAD_IMAGE);
break;
case R.id.buttonSalva: //salva il nickname e le altre impostazioni
nickname = nick.getText().toString();
Toast.makeText(getApplicationContext(), "Salvataggio non implementato", Toast.LENGTH_SHORT).show();
System.out.println("il nick name è " +nickname);
break;
case R.id.button1:
Intent intent = new Intent(getApplicationContext(), EditPassword.class);
startActivity(intent);
break;
case R.id.imageView1: //setto al click anche sulla foto del profilo, l'apertura della gallery (o lo zoom??)
Intent b = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
startActivityForResult(b, RESULT_LOAD_IMAGE);
break;
}
}
};
Foto.setOnClickListener(gestore);
salva.setOnClickListener(gestore);
password.setOnClickListener(gestore);
elisse.setOnClickListener(gestore);
}
//gestisco la grafica della barra
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// TODO Auto-generated method stub
MenuInflater mMenuInflater = getMenuInflater();
mMenuInflater.inflate(R.menu.barra_home, menu);
return true;
}
//gestisco i click sulla barra in alto
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
Intent intent = new Intent(this, MenuLoggato.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
return true;
/* case R.id.abForwardHoloLight:
Intent intent2 = new Intent(this, SearchActivity.class);
intent2.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent2);
return true; */
default:
return super.onOptionsItemSelected(item);
}
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == RESULT_LOAD_IMAGE && resultCode == RESULT_OK && null != data) {
Uri selectedImage = data.getData();
String[] filePathColumn = { MediaStore.Images.Media.DATA };
Cursor cursor = getContentResolver().query(selectedImage, filePathColumn, null, null, null);
cursor.moveToFirst();
int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
String picturePath = cursor.getString(columnIndex);
cursor.close();
// String picturePath contains the path of selected Image
//qui dovrei mandare l'immagine a saverio e poi ritagliarla
SharedPreferences prefs = getSharedPreferences("Preferenze", Context.MODE_PRIVATE);
SharedPreferences.Editor editor = prefs.edit();
// EditText outputView = (EditText) findViewById(R.id.inputData);
CharSequence textData = picturePath;
if (textData != null) {
editor.putString("path", ""+textData);
editor.commit();
}
//aggiorno le preferenze e prendo la foto
updatePreferencesData();
}
}
//metodo per tagliare l'immagine
public Bitmap getCroppedBitmap(Bitmap bitmap) {
int minore = 0;
//devo trovare il minore fra larghezza ed altezza e setto il raggio con quello
if(bitmap.getWidth()<=bitmap.getHeight()){
minore = bitmap.getWidth();
}else{
minore = bitmap.getHeight();
}
Bitmap output = Bitmap.createBitmap(minore, minore, Config.ARGB_8888);
Canvas canvas = new Canvas(output);
final int color = 0xff424242;
final Paint paint = new Paint();
//final Rect rect = new Rect(0, 0, bitmap.getWidth(), bitmap.getHeight());
final Rect rect = new Rect(0, 0, minore, minore);
paint.setAntiAlias(true);
canvas.drawARGB(0, 0, 0, 0);
paint.setColor(color);
// canvas.drawRoundRect(rectF, roundPx, roundPx, paint);
canvas.drawCircle(minore/2, minore/2, minore/2, paint);
paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN));
canvas.drawBitmap(bitmap, rect, rect, paint);
//Bitmap _bmp = Bitmap.createScaledBitmap(output, 60, 60, false);
//return _bmp;
return output;
}
private void updatePreferencesData(){
// Leggiamo le Preferences
SharedPreferences prefs = getSharedPreferences("Preferenze", Context.MODE_PRIVATE);
// Leggiamo l'informazione associata alla proprietà TEXT_DATA
String textData = prefs.getString("path", "NO");
System.out.println("path:" + textData);
if(textData.equalsIgnoreCase("NO")==false){
try{ Bitmap profilo = BitmapFactory.decodeFile(textData);
profilo = getCroppedBitmap(profilo);
prof.setImageBitmap(profilo);
}catch(Exception e){
System.out.println("errore " +e);
}
}
else{
Toast.makeText(getApplicationContext(), "Modifica la foto con un click", Toast.LENGTH_SHORT).show();
}
}
}
我不認爲我們在這裏需要完整的代碼。提取相關部分。 –
可否請你發送一個你的路徑或logcat錯誤的例子?謝謝。 – Jarvis