2013-04-03 71 views
0

我得到的URL字符串在下面循環獲取NULL值,而在Android的

referrer = intent.getStringExtra("referrer"); 

繼解析URL字符串登錄

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」

我試過下面的代碼,但得到的值爲空

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); 

可能是什麼問題?

+0

URI應根據RFC2396,請嘗試Uri.parse( 「HTTP:// localhost」 的引薦+);通過結合模式和域名 – Amit

回答

4

您可以使用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); 
.... 
+0

謝謝努努,你的意思是我不需要解析?我可以直接使用「拆分」嗎? – user1223035

+0

感謝它的工作。 – user1223035

1

你可以做的,而不是分析這樣的事情,那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; 
    } 
} 
0

或用番石榴:

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));