2015-08-13 70 views
0

当我尝试在静态类中获取非静态字符串时出现错误。从静态方法获取非静态字符串

这是警告消息

我想DOWNLOAD_URL字符串值就摆在VIDEO_URL,但VIDEO_URL“非静态字段不能从静态上下文中引用 ”刚刚得到空值,如何我应该这样做吗?

这是我的代码:

package com.sa.asd.ax 

public class VideoProvider { 

    String DOWNLOAD_URL; 
    public static List<MediaInfo> buildMedia(String url) throws JSONException { 

     if (null != mediaList) { 
      return mediaList; 
     } 
     Map<String, String> urlPrefixMap = new HashMap<>(); 
     mediaList = new ArrayList<MediaInfo>(); 
     String VIDEO_URL = null; 
     String mimeType = null; 
     for (int k = 0; k < videoSpecs.length(); k++) { 
      JSONObject videoSpec = videoSpecs.getJSONObject(k); 
       if(TARGET_FORMAT.equals(videoSpec.getString(TAG_VIDEO_TYPE))){ 
        String youtubeLink = urlPrefixMap.get(TARGET_FORMAT) + videoSpec.getString(TAG_VIDEO_URL); 
        YouTubeUriExtractor ytEx = new YouTubeUriExtractor(null{ 
        @Override 
        public void onUrisAvailable(String videoId, String videoTitle, SparseArray<YtFile> ytFiles) { 
        if(ytFiles!=null){ 
         int itag = 22; // a YouTube format identifier 
         DOWNLOAD_URL = ytFiles.get(itag).getUrl(); 
            } 
       } 
     }; 

    ytEx.execute(youtubeLink); 
    VIDEO_URL = DOWNLOAD_URL; 
    mimeType = videoSpec.getString(TAG_VIDEO_MIME); 
    mediaList.add(buildMediaInfo(VIDEO_URL, mimeType));   
          } 
         } 

     return mediaList; 
    } 


} 
+0

Make DOWNLOAD_URL static:static String DOWNLOAD_URL; – Jens

回答

0

buildMedia()是一个静态(类)方法 - 它并不需要的VideoProvider一个实例被调用。

但是,字符串DOWNLOAD_URL不是静态的(它是一个实例变量),并且绑定到特定的实例,因此它将失败。如果你这样做

会发生什么:

VideoProvider.buildMedia(someString); 

您将在方法本身使用哪种DOWNLOAD_URL

您可以使方法变得非常稳定,或者使对象静态(类变量,而不是实例变量)来解决它。