2017-04-12 2 views
0

사용자 정보를 설정할 때 사용자가 아바타 (원하는 경우 프로필 사진)를 만들 수 있도록하고 싶습니다. 저는 사용자에게 사진을 찍으라고하는 단일 클릭/터치 방법과 사용자가 갤러리에서 사진을 선택하도록 요청하는 긴 클릭에 대한 방법을 만들었습니다. 아래android app에 아바타 설정

public void onLaunchCamera(View v) { 

    avatarButton.setOnClickListener(new View.OnClickListener() { 
     public void onClick(View v) { 
      String strAvatarPrompt = "Take your picture to store as your avatar!"; 
      Intent pictureIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); 
      startActivityForResult(Intent.createChooser(pictureIntent, strAvatarPrompt), TAKE_AVATAR_CAMERA_REQUEST); 
     } 
    }); 

    avatarButton.setOnLongClickListener(new View.OnLongClickListener() { 
     public boolean onLongClick(View v) { 
      String strAvatarPrompt = "Choose a picture to use as your avatar!"; 
      Intent pickPhoto = new Intent(Intent.ACTION_PICK); 
      pickPhoto.setType("image/*"); 
      startActivityForResult(Intent.createChooser(pickPhoto, strAvatarPrompt), TAKE_AVATAR_GALLERY_REQUEST); 
      return true; 
     } 
    }); 
    } 

그리고하여 ImageButton과 관련된 XML된다 : 나는하여 ImageButton 및 I에

<ImageButton 
      android:id="@+id/ImageButton_Avatar" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:adjustViewBounds="true" 
      android:maxHeight="@dimen/avatar_size" 
      android:minHeight="@dimen/avatar_size" 
      android:onClick="onLaunchCamera" 
      android:scaleType="fitXY" 
      android:src="@drawable/avatar"></ImageButton> 

는 않는 모든 충돌입니다 클릭

아래는 클래스 파일에서 내 방법은 이유를 모르겠다. 어떤 아이디어?

감사

편집 :. 당신이 avatarButton 정의하지 않을 수 있습니다처럼

[ 04-12 18:32:50.989 5901: 5901 D/   ] 
HostConnection::get() New  Host Connection established 0xb8a44530, tid 5901 
04-12 18:32:51.039 5901-5901/cct.mad.lab D/OpenGLRenderer: Enabling debug mode 0 
04-12 18:32:55.739 5901-5901/cct.mad.lab V/RenderScript: 0xb8c53300  Launching thread(s), CPUs 2 
04-12 18:32:57.389 5901-5901/cct.mad.lab D/AndroidRuntime: Shutting down VM 
04-12 18:32:57.389 5901-5901/cct.mad.lab W/dalvikvm: threadid=1: thread exiting with uncaught exception (group=0xb0d2db20) 
04-12 18:32:57.399 5901-5901/cct.mad.lab E/AndroidRuntime: FATAL EXCEPTION: main 
Process: cct.mad.lab,  PID: 5901              java.lang.IllegalStateException: Could not execute method of the activity 
at android.view.View$1.onClick(View.java:3823) 
                  at android.view.View.performClick(View.java:4438) 
                  at android.view.View$PerformClick.run(View.java:18422) 
                  at a android.os.Handler.handleCallback(Handler.java:733) 
                  at android.os.Handler.dispatchMessage(Handler.java:95) 
                  at android.os.Looper.loop(Looper.java:136) 
                  at android.app.ActivityThread.main(ActivityThread.java:5017) 
                  at java.lang.reflect.Method.invokeNative(Native Method) 
                  at java.lang.reflect.Method.invoke(Method.java:515) 
                  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779) 
                  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595) 
                  at dalvik.system.NativeStart.main(Native Method) 
                 Caused by: java.lang.reflect.InvocationTargetException 
                  at java.lang.reflect.Method.invokeNative(Native Method) 
                  at java.lang.reflect.Method.invoke(Method.java:515) 
                  at android.view.View$1.onClick(View.java:3818) 
                  at android.view.View.performClick(View.java:4438)  
                  at android.view.View$PerformClick.run(View.java:18422)  
                  at android.os.Handler.handleCallback(Handler.java:733)  
                  at android.os.Handler.dispatchMessage(Handler.java:95)  
                  at android.os.Looper.loop(Looper.java:136)  
                  at android.app.ActivityThread.main(ActivityThread.java:5017)  
                  at java.lang.reflect.Method.invokeNative(Native Method)  
                  at java.lang.reflect.Method.invoke(Method.java:515)  
                  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)  
                  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)  
                  at dalvik.system.NativeStart.main(Native Method)  
                 Caused by: java.lang.NullPointerException 
                  at cct.mad.lab.SettingsActivity.onLaunchCamera(SettingsActivity.java:201) 
                  at java.lang.reflect.Method.invokeNative(Native Method)  
                  at java.lang.reflect.Method.invoke(Method.java:515)  
                  at android.view.View$1.onClick(View.java:3818)  
                  at android.view.View.performClick(View.java:4438)  
                  at android.view.View$PerformClick.run(View.java:18422)  
                  at android.os.Handler.handleCallback(Handler.java:733)  
                  at android.os.Handler.dispatchMessage(Handler.java:95)  
                  at android.os.Looper.loop(Looper.java:136)  
                  at android.app.ActivityThread.main(ActivityThread.java:5017)  
                  at java.lang.reflect.Method.invokeNative(Native Method)  
                  at java.lang.reflect.Method.invoke(Method.java:515)  
                  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)  
                  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)  
                  at dalvik.system.NativeStart.main(Native Method)  
+0

logcat은 * 왜 충돌이되는지 * 알려주세요. –

+0

3 월 31 일 이후로 아무 것도 변경되지 않았다는 점에서 logcat에 문제가 있습니다. 디버그 모드로 실행 중이지만 logcat에서 아무것도 얻지 못합니다. –

+0

logcat이 있습니다. 나는 그것을 위에 추가 할 것이다 –

답변

1

것 같습니다 : 형식에 대한 아래의 로그 캣 추가 (죄송합니다 모두 제대로 분류하는 방법을 알아 작동 할 수 없습니다 LogCat의 Caused By 경로를 따라 가면 아래쪽에 NullPointerException이 표시됩니다.

라인 번호를 볼 수 없으므로 201 번 라인에서 문제가 발생합니다. 귀하의 코드에서 avatarButton입니다.

당신이하고 싶은 것을 기반으로, 당신은 이것에 대해 약간 다르게 가고 싶을 것입니다.

android : onClick = "onLaunchCamera"을 XML에서 제거하십시오. 당신의에서 onCreate에서

는 콘텐츠 뷰가 다음을 추가 설정() 후 : 이것은 당신이 클릭 더 많은 제어와 longClick 리스너를 모두 설정할 수 있습니다

View avatarButton = findViewById(R.id.ImageButton_Avatar); 

avatarButton.setOnClickListener(new View.OnClickListener() { 
    public void onClick(View v) { 
     String strAvatarPrompt = "Take your picture to store as your avatar!"; 
     Intent pictureIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); 
     startActivityForResult(Intent.createChooser(pictureIntent, strAvatarPrompt), TAKE_AVATAR_CAMERA_REQUEST); 
    } 
}); 

avatarButton.setOnLongClickListener(new View.OnLongClickListener() { 
    public boolean onLongClick(View v) { 
     String strAvatarPrompt = "Choose a picture to use as your avatar!"; 
     Intent pickPhoto = new Intent(Intent.ACTION_PICK); 
     pickPhoto.setType("image/*"); 
     startActivityForResult(Intent.createChooser(pickPhoto, strAvatarPrompt), TAKE_AVATAR_GALLERY_REQUEST); 
     return true; 
    } 
}); 

. 처음부터 클릭하기 전까지는 onClick 또는 onLongClick을 정의하지 않았습니다.

+0

이것을위한 감사합니다. 네가 어디에서 왔는지 알 수있어. 그러나 View avatarButton 등을 입력 할 때 ... "변수 'avatarButton'이 이미 범위에 정의되어 있습니다." –

+0

방금 ​​avatarButton이 initAvatar 메서드에서이 줄의 ImageButton으로 정의됨을 깨달았습니다 () : ImageButton avatarButton = (ImageButton) findViewById (R.id.ImageButton_Avatar); –

+0

나는 실제로 그것을 스스로 해결했다. 실제로는 'onLaunchCamera'와 함께 XML의 onClick과 연결되어 \t 의 줄과 결합되었습니다. View avatarButton = findViewById (R.id.ImageButton_Avatar); –