2017-12-27 19 views
0

내 앱에서 기본 이미지 프로필을 사용하여 프로필 페이지를 만들고 카메라에서 사진을 찍거나 갤러리에서 이미지를 선택하여 이미지 페이지를 변경하려면 해당 코드를 사용하십시오. :프로필 이미지 저장을위한 공유 환경 설정

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); 
     } 
    }  

하지만 I'am 활동에 때 다른 가서 돌아 다시이 사라지고 활동이 기본 이미지를 표시 할 때 이미지가 잘 나타납니다 공유 환경 설정에 저장 이미지를 선택할 때 문제가, 나는 프로파일 활동으로 돌아올 때마다 이것이 다시 만들어졌고 부울 변수 d가 다시 거짓 이었기 때문에 그 이유를 알고 있습니다. get 환경 설정을 호출해야하는 경우 어떻게 수정해야합니까?

답변

0

"onActivityResult()"메서드에서 얻은 imageUri (또는 imagePath)를 sharedPreferences에 저장합니다. 대신 부울을 사용

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

, sharedPreference 값이 sharedPreference 값 string.If 널이 아닌지 확인은 sharedPreference에서 imageUri (또는 IMAGEPATH)와 이미지 뷰를 갱신 널 문자열 아니다.

imageView에서 이미지를로드하려면 Picasso 또는 Glide과 같은 사진로드 라이브러리를 사용하는 것이 좋습니다.