【问题标题】:Getting NULL values while parsing URL string in Android在 Android 中解析 URL 字符串时获取 NULL 值
【发布时间】:2013-04-03 07:50:53
【问题描述】:

我在下面的循环中获取 URL 字符串

  referrer = intent.getStringExtra("referrer"); 

下面是日志

action: 'com.android.vending.INSTALL_REFERRER' referrer string: 'utm_source=tooyoou&utm_medium=banner&utm_term=foursquare&utm_content=foursquare-tooyoou&utm_campaign=foursquare'

我想解析这个 URL 字符串并得到下面的字符串 “utm_source” “utm_medium” “utm_term” “utm_content” “utm_campaign”

我尝试了下面的代码,但得到的值为 null

Uri referrerUri = Uri.parse(referrer);
String utmsource= referrerUri.getQueryParameter("utm_source");
String utmmedium= referrerUri.getQueryParameter("utm_medium");
String utmterm= referrerUri.getQueryParameter("utm_term");
String utmcontent= referrerUri.getQueryParameter("utm_content");
String utmcampaign= referrerUri.getQueryParameter("utm_campaign");


Log.d("utmsource===" , utmsource);
Log.d("utmmedium===" , utmmedium);
Log.d("utmterm===" , utmterm);
Log.d("utmcontent===" , utmcontent);
Log.d("utmcampaign===" , utmcampaign);

可能是什么问题?

【问题讨论】:

  • URI 应符合 rfc2396,请尝试 Uri.parse("localhost?" + referrer);通过连接架构和域名

标签: android string parsing url referrer


【解决方案1】:

你可以使用split..

String[] referrerList = referrer.split('&');
String utmsource= referrerList[0].substring(referrerList[0].indexOf("=") + 1);
String utmmedium= referrerList[1].substring(referrerList[1].indexOf("=") + 1);
String utmterm= referrerList[2].substring(referrerList[2].indexOf("=") + 1);
....

【讨论】:

  • 谢谢努努,你的意思是我不需要解析?我可以使用直接“拆分”吗?
【解决方案2】:

您可以这样做,而不是将 String 解析为 URI

String[] uriTokens = referrer.split("&");
for(int i=0;i<uriTokens.length;i++){
    String[] valTokens = uriTokens[i].split("=");
    switch(valTokens[0]){
    case "utm_source":
        utmsource = valTokens[1];
        break;
    case "utm_medium":
        utmmedium = valTokens[1];
        break;
    case "utm_term":
        utmterm = valTokens[1];
        break;
    case "utm_content":
        utmcontent = valTokens[1];
        break;
    case "utm_campaign":
        utmcampaign = valTokens[1];
        break;
    }
}

【讨论】:

    【解决方案3】:

    或与番石榴:

    private static final String REFERRER = "referrer";
    private static final String EQUALS = "%3D";
    private static final String AMPERSAND = "%26";
    
    Map<String, String> map = Splitter.on(AMPERSAND).withKeyValueSeparator(EQUALS)
                .split(intent.getStringExtra(REFERRER));
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多