Autore Topic: Salvare path su sharedpreferences o passare l'intera immagine?  (Letto 768 volte)

Offline gabric

  • Utente senior
  • ****
  • Post: 615
  • Respect: +18
    • Google+
    • Mostra profilo
    • Brancato's site
  • Dispositivo Android:
    Nexus 5 / Tablet mediacom s4
  • Play Store ID:
    Brancato's+app
  • Sistema operativo:
    window7. ubuntu
Salvare path su sharedpreferences o passare l'intera immagine?
« il: 30 Maggio 2013, 12:00:32 CEST »
0
Salve, dalle impostazioni, il mio utente deve poter scegliere un immagine profilo. questa viene presa dalla galleria, attraverso un metodo che mi resituisce il path completo del file (/mnt/.../foto.jpg)
ho pensato che bastasse salvare questa stringa tramite le sharedpreferences per poterci accedere in altre situazioni, ma mi viene restituito "File not found" idee?
è il modo più corretto di agire?

Offline GabMarioPower

  • Moderatore globale
  • Utente senior
  • *****
  • Post: 606
  • Respect: +153
    • Github
    • Google+
    • gabrielemariotti
    • GabMarioPower
    • Mostra profilo
  • Play Store ID:
    GAB+MARIO+DEV
  • Sistema operativo:
    Ubuntu 14.04 , Win 10
Re:Salvare path su sharedpreferences o passare l'intera immagine?
« Risposta #1 il: 30 Maggio 2013, 12:49:30 CEST »
0
Innanzitutto le sharedpreferences sono un file xml, quindi non puoi passarci una immagine dentro.
Il tuo problema è come hai scritto la path e come poi la utilizzi per riprendere l'immagine.

Posta il codice per favore (e il logcat.)

Offline gabric

  • Utente senior
  • ****
  • Post: 615
  • Respect: +18
    • Google+
    • Mostra profilo
    • Brancato's site
  • Dispositivo Android:
    Nexus 5 / Tablet mediacom s4
  • Play Store ID:
    Brancato's+app
  • Sistema operativo:
    window7. ubuntu
Re:Salvare path su sharedpreferences o passare l'intera immagine?
« Risposta #2 il: 30 Maggio 2013, 12:51:43 CEST »
0
nel logcat c'è quasi nulla (solo un eccezione pointertonull quando passo alla bitmap il patch per fare il decoder dell'immagine)


questa è la pagina impostazioni (con no, lascia un immagine di default)
Codice (Java): [Seleziona]
package com.example.provajson2;




import java.io.IOException;


import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import android.provider.MediaStore;
import android.annotation.TargetApi;
import android.app.ActionBar;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.SharedPreferences;
import android.database.Cursor;
import android.graphics.Bitmap;
import android.graphics.Bitmap.Config;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.Path;
import android.graphics.Path.Direction;
import android.graphics.PorterDuff.Mode;
import android.graphics.PorterDuffXfermode;
import android.graphics.Rect;
import android.graphics.RectF;
import android.graphics.drawable.Drawable;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageButton;
import android.widget.ImageView;
import android.widget.Switch;
import android.widget.Toast;


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
               
                             
             
              SharedPreferences prefs = getSharedPreferences("Preferenze", Context.MODE_PRIVATE);
              SharedPreferences.Editor editor = prefs.edit();
             // EditText outputView = (EditText) findViewById(R.id.inputData);
              CharSequence textData = picturePath; //.getAbsolutePath()
             
              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();
        }
       
       
        }
       
       
}