2017-10-30 4 views
-1

이 질문은 이전에 묻지 만이 문제를 해결할 방법이 없기 때문에 Firebase RecyclerView 아래에서 내 애플리케이션에 Youtube API를 사용할 때 이 오류가 있는데 "변수 'youtuber'는 내부 클래스에서 액세스 할 수 있으며 마지막으로 선언해야합니다." 및 최종 키워드를 사용하지 않으면 실 거예요. 이로 인해 내 데이터베이스에서 데이터를 가져올 수 없습니다. 값이 문자열로 바뀌면 "Final"을 사용하여 해결할 수 있습니다. 누구든지 이걸 사용하면 문자열을 사용하지 않고도 문자열을 사용할 수 있습니다.내부 클래스의 "Final"을 사용하여 나중에 Android에서 문자열 값을 변경하지 않는 방법

전 세계 변수을 사용해 보았습니다.하지만 여기에서도 작동하지 않습니다. 도움을 받으십시오.

Android Studio를 사용하고 있습니다.

유튜브 활동 코드 :

public class YoutubeVideos extends AppCompatActivity { 

    private RecyclerView YouRecycler; 
    private DatabaseReference YDatabaseReference; 
    public static String DEVELOPER_KEY = "AIzaSyAEK3iPoxfItaHJsiuJ_693tuuQjkdGfQk"; 


    @Override 
    protected void onCreate(@Nullable Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.youtube_videos); 
     YDatabaseReference = FirebaseDatabase.getInstance().getReference().child("you"); 
     YouRecycler = (RecyclerView)findViewById(R.id.Youtube_recycler); 
     YouRecycler.setHasFixedSize(true); 
     YouRecycler.setLayoutManager(new LinearLayoutManager(this)); 


    } 

    @Override 
    public void onStart() { 
     super.onStart(); 

     final FirebaseRecyclerAdapter<post2youtube, youtubeViewHolder> youFirebaseAdapter = new FirebaseRecyclerAdapter<post2youtube, youtubeViewHolder>(
       post2youtube.class, 
       R.layout.youtube_card_view, 
       youtubeViewHolder.class, 
       YDatabaseReference 
     ) { 
      @Override 
      protected void populateViewHolder(youtubeViewHolder yviewHolder, post2youtube ymodel, int position) { 
       yviewHolder.setYoutube(ymodel.getYoutube()); 

      } 
     }; 

     YouRecycler.setAdapter(youFirebaseAdapter); 
    } 

    public static class youtubeViewHolder extends RecyclerView.ViewHolder { 
     View youView; 

     public youtubeViewHolder(View itemView) { 
      super(itemView); 
      youView = itemView; 
     } 
     public void setYoutube(String youtuber){ 
     YouTubeThumbnailView youPlay = (YouTubeThumbnailView)youView.findViewById(R.id.youtubler); 
       youPlay.initialize(DEVELOPER_KEY, new YouTubeThumbnailView.OnInitializedListener() { 
        @Override 
        public void onInitializationSuccess(YouTubeThumbnailView youTubeThumbnailView, final YouTubeThumbnailLoader youTubeThumbnailLoader) { 
         youTubeThumbnailLoader.setVideo(youtuber); 
         youTubeThumbnailLoader.setOnThumbnailLoadedListener(new YouTubeThumbnailLoader.OnThumbnailLoadedListener() { 
          @Override 
          public void onThumbnailLoaded(YouTubeThumbnailView youTubeThumbnailView, String s) { 
           youTubeThumbnailLoader.release(); 
          } 

          @Override 
          public void onThumbnailError(YouTubeThumbnailView youTubeThumbnailView, YouTubeThumbnailLoader.ErrorReason errorReason) { 

          } 
         }); 
        } 

        @Override 
        public void onInitializationFailure(YouTubeThumbnailView youTubeThumbnailView, YouTubeInitializationResult youTubeInitializationResult) { 

        } 
       }); 

      } 


     } 
+3

[가능한 최종 복제본 익명의 클래스에서 액세스 할 수 있습니까?] (https://stackoverflow.com/questions/4732544/why-are-only-final-variables-accessible-in-anonymous-class) –

+0

@Pavneet_Singh 어떻게 그것이 중복입니까 !! , 나는 해결책을 찾으려고 노력하고있다 –

+0

정적 컨텍스트에서 정적 변수를 사용할 수 있기 때문에 전역 변수를 정적으로 만들거나, oncreate로 초기화하거나, 전역 변수에 어떤 문제가 있는지 알지 못한다면, 그리고 중복 링크는 귀하의 문제에 대한 최적의 솔루션의 대부분을 포함합니다. –

답변

0

을 string.xml에 DEVELOPER_KEY를 추가하고 어디서나 당신이 당신 된 .java 파일에서 strings.xml의

<string name="developer_key">AIzaSyAEK3iPoxfItaHJsiuJ_693tuuQjkdGfQk</string> 

에서 를 사용하여 원하는 얻을

String mystring = getResources().getString(R.string.DEVELOPER_KEY); 
+0

어디에 놓아야 할까? String mystring = getRes 내 코드에서 ource() 줄을 onCreate에? –

+0

클래스가 Developer Key의 가치를 원하면 어디에서나 사용할 수 있습니다. –

+0

이 에러가 발생했습니다. "정적이 아닌 메소드 getResources()는 정적 컨텍스트 인" –

관련 문제