Получение значений NULL при анализе строки URL в Android

Я получаю строку 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);

В чем может быть проблема ?


person user1223035    schedule 03.04.2013    source источник
comment
URI должен соответствовать rfc2396, попробуйте Uri.parse(localhost? + referrer); путем объединения схемы и доменного имени   -  person Amit    schedule 03.04.2013


Ответы (3)


Вы можете использовать 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);
....
person Nermeen    schedule 03.04.2013
comment
Спасибо, Нуну. Вы имеете в виду, что мне не нужно анализировать? Могу ли я использовать прямое разделение? - person user1223035; 03.04.2013

Вы можете сделать что-то подобное вместо того, чтобы анализировать этот 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;
    }
}
person RainMaker    schedule 03.04.2013

Или с гуавой:

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));
person pixel    schedule 28.07.2014