2016-06-07 2 views
16

내가 N 값을 얻기 위해클래스 java.util.Map가 제네릭 형식 매개 변수가 대신

Map<String, String> map = dataSnapshot.getValue(Map.class);

을 사용하여 데이터베이스에서 데이터를 검색 할 수 중포 기지를 사용하고 GenericTypeIndicator를 사용하지만, 그것은 오류를

E/AndroidRuntime: FATAL EXCEPTION: main 
                   Process: com.rana.sahaj.myyu, PID: 13179 
                   com.google.firebase.database.DatabaseException: Class java.util.Map has generic type parameters, please use GenericTypeIndicator instead 
                    at com.google.android.gms.internal.zzaix.zzb(Unknown Source) 
                    at com.google.android.gms.internal.zzaix.zza(Unknown Source) 
                    at com.google.firebase.database.DataSnapshot.getValue(Unknown Source) 
                    at com.rana.sahaj.myyu.profile.Profile$2.onDataChange(Profile.java:158) 
                    at com.google.android.gms.internal.zzafp.zza(Unknown Source) 
                    at com.google.android.gms.internal.zzagp.zzSu(Unknown Source) 
                    at com.google.android.gms.internal.zzags$1.run(Unknown Source) 
                    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:5052) 
                    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:793) 
                    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:609) 
                    at dalvik.system.NativeStart.main(Native Method) 
을 보여주십시오

여기에 코드를입니다

DatabaseReference profileRef=mFirebaseRef.child(EEmail); 
    profileRef.addValueEventListener(new ValueEventListener() { 
     @Override 
     public void onDataChange(DataSnapshot dataSnapshot) { 

    -->  Map<String, String> map = (Map<String,String>)dataSnapshot.getValue(Map.class); 

      name = (TextView)findViewById(R.id.UserInActivity); 
      EmailView= (TextView)findViewById(R.id.emailUser); 

      PhotoUrl = map.get("picurl"); 
      emmaill=map.get("userEmail"); 

      UserNam = map.get("userNAME"); 

      name.setText(UserNam); 
      EmailView.setText(emmaill); 


     } 

     @Override 
     public void onCancelled(DatabaseError firebaseError) { 

     } 
    }); 

N 더 프로가 없다 데이터베이스에서 key n 값으로 문제를 해결하십시오. 이 솔루션하지만 오류가 올바르게 지적

답변

28

을 작동하지를 사용 어디로 잘못 가고있다

Map<String, String> map = dataSnapshot.getValue(Map.class); 

지도 클래스는 에 매개 변수를 키의 유형을 정의하고 당신이 그들을 포기하지 않는 곳 객체 사용 단순히 실패한 Map.class을 사용하십시오. 에

Map<String, String> map = dataSnapshot.getValue(Map.class); 

:이 라인을 변경할 수

Map<String, Object> map = (Map<String, Object>) dataSnapshot.getValue(); 
+1

여전히 동일한 오류가 표시됩니다. –

+0

질문을 새 코드로 업데이트 할 수 있습니까? – Shubhank

+0

여전히 getValue (Map.class)를 실행하고있는'getValue()'를 사용하고 있습니다. – Shubhank

21

GenericTypeIndicator을 소개하는 키는 항상 문자열이기 때문에 우리는 그들을 위해 객체의 모든 유형을 가질 수 있습니다 -

은 아래 코드를 사용해보십시오 까지 :

GenericTypeIndicator<Map<String, String>> genericTypeIndicator = new GenericTypeIndicator<Map<String, String>>() {}; 
Map<String, String> map = dataSnapshot.getValue(genericTypeIndicator); 

귀하의 경우에 잘 작동합니다. 시도해보고 알려주세요.

+0

여전히 동일한 오류를 표시하지 않습니다. –

+1

'Map map = (Map ) dataSnapshot.getValue();가 효과가 있었음에 틀림 없다. 그러나 어떤 경우이든, GenericTypeIndicator를 사용하는 방법을 보여줄 수있는 답변을 업데이트했습니다.이 것을 시도해 볼 수 있습니다. – ishmaelMakitla

+1

@ishmaelMakitla 좋은 대답입니다. –

6

나는 똑같은 문제가 있었고, 대신 Firebase에 캐스팅하려고하는 대신 Object를 처리하여 해결했습니다.

Map <String, String> map = (Map)dataSnapshot.getValue(); 

나를 위해 해줬습니다.

+0

나를 위해 일했습니다. 좋은 해결책! –

+0

고맙습니다! 나를 위해 일했다. –

관련 문제