2017-12-27 1 views
0

In meiner App möchte ich eine Profilseite mit Standard-Image-Profil und erlauben es dem Benutzer, es zu ändern, indem Sie ein Bild von der Kamera oder wählen Sie ein Bild aus der Galerie, das habe ich erfolgreich und hier ist mein Code :gemeinsame Vorlieben Profilbild speichern

public class MainActivity extends AppCompatActivity { 
    private static final int pick = 1, capture = 2; 
    Uri imgeUri, touri; 
    ImageView imp; 
    SharedPreferences sh; 
    SharedPreferences.Editor editor; 
    String S; 
    boolean d=false; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     Log.d("eee","in resume"); 

     setContentView(R.layout.activity_main); 
     sh = getSharedPreferences("my" ,Context.MODE_PRIVATE); 
     editor=sh.edit(); 
     imp = (ImageView) findViewById(R.id.profile_image); 

     if(d==false) { 
      imp.setImageResource(R.drawable.photo); 
     } 
     else{ 
      imp.setImageURI(Uri.parse(sh.getString("link", null))); 
     } 


} 


public void changepic(View V) { 
    final String[] items = {"Take picture", "Choose Picture", 
    "cancle"}; 

    AlertDialog.Builder build = new AlertDialog.Builder(this); 
    build.setTitle("Add Photo"); 
    build.setItems(items, new DialogInterface.OnClickListener() { 
     @Override 
     public void onClick(DialogInterface dialog, int which) { 
      if (items[which].equals("Choose Picture")) { 
       Log.d("test","bh"); 

       Intent i = new Intent(Intent.ACTION_PICK); 
       i.setType("image/*"); 
       startActivityForResult(i, pick); 

      } else if (items[which].equals("Take picture")) { 

       Intent i = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
       startActivityForResult(i, capture); 
      } 
     } 
    }).create().show(); 

}  


@Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     super.onActivityResult(requestCode, resultCode, data); 
     if (requestCode == pick && resultCode == RESULT_OK) { 

      imgeUri = data.getData(); 
      Log.d("test","pick"); 

      imp.setImageURI(imgeUri); 

      editor.putString("link",String.valueOf(imgeUri)); 
      //Log.d("test",f); 
      editor.commit(); 
      d=true; 

     } else if (requestCode == capture && resultCode == RESULT_OK) { 
      Bundle extras = data.getExtras(); 
      Bitmap imageBitmap = (Bitmap) extras.get("data"); 
      imp.setImageBitmap(imageBitmap); 
     } 
    }  

Aber das Problem ist, wenn die Auswahl eines Bildes ich es in gemeinsamer Vorliebe das Bild ganz gut erscheint sparen, wenn in Tätigkeit ich bin, wenn zu einem anderen gehen und kehren diese wieder verschwinden und die Aktivität um das Standardbild zeigen, Ich kenne den Grund dafür, denn jedes Mal, wenn ich zur Profilaktivität zurückkehre, wurde dies erneut erstellt und die boolsche Variable d war wieder falsch. Wie kann ich das beheben, wenn ich die Get Preference aufrufen muss?

Antwort

0

Speichern Sie in der Methode "onActivityResult()" den erhaltenen imageUri (oder imagePath) in sharedPreferences.

SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(mContext); 
SharedPreferences.Editor edit = preferences.edit(); 
edit.putString(key, value); 
edit.apply(); 

Statt boolean verwenden, prüfen Sie, ob sharedPreference Wert kein Null string.If der sharedPreference Wert ist kein Null-String, aktualisieren Sie die Imageview mit imageUri (oder imagePath) von sharedPreference.

Zum Laden von Bildern in imageView empfehle ich Ihnen, Bibliotheken zum Laden von Fotos wie Picasso oder Glide zu verwenden.

Verwandte Themen