Utilizza constructor URI in Android o crea URL con variables

Sto sviluppando un'applicazione Android. Ho bisogno di creare un URI per la mia app per fare una richiesta API. A less che non esista un altro modo per inserire una variabile in un URI, questo è il modo più semplice che ho trovato. Ho scoperto che wherete usare Uri.Builder , ma non sono abbastanza sicuro come. Il mio url è:

 http://lapi.transitchicago.com/api/1.0/ttarrivals.aspx?key=[redacted]&mapid=value 

Il mio schema è http, l'autorità è lapi.transitchicago.com , il path è /api/1.0 , il segmento di path è ttarrivals.aspx e la string di query è key=[redacted]&mapid=value .

  • Icona di applicazione e icona di avvio differente?
  • Come get i dati da ciascun EditText creato in modo dinamico in Android?
  • L'animatore Android non si ricrea dopo l'avvio di startActivityForResult
  • fanno lo stesso spazio tra il button in linearlayout
  • Imansible risolvere: com.google.firebase: firebase-core: 11.2.0
  • Comandi ADB nel codice
  • Il mio codice è qui sotto:

     Intent intent = getIntent(); String value = intent.getExtras().getString("value"); Uri.Builder builder = new Uri.Builder(); builder.scheme("http") .authority("www.lapi.transitchicago.com") .appendPath("api") .appendPath("1.0") .appendPath("ttarrivals.aspx") .appendQueryParameter("key", "[redacted]") .appendQueryParameter("mapid", value); 

    Capisco che posso fare URI.add , ma come posso integrarla nel Uri.Builder ? Devo aggiungere tutto come URI.add(scheme) , URI.add(authority) e così via? O non è il modo per farlo? Inoltre, esiste un altro modo più semplice per aggiungere una variabile a un URL / URI?

  • Utilizzando ADT e SDK manager, albind il codice sorgente android per eclissare
  • Android: Ottenere un file da http e memorizzare in SDCard
  • Trasferimento di file su bluetooth come in esempio Android Chat Bluetooth
  • Esegui insieme Pocketsphinx e Google TTS
  • Angolo tra due geolocazioni androidiche conosciute
  • Ordinamento di un Recyclerview
  • 5 Solutions collect form web for “Utilizza constructor URI in Android o crea URL con variables”

    Diciamo che voglio creare il seguente URL:

     https://www.myawesomesite.com/turtles/types?type=1&sort=relevance#section-name 

    Per build questo con Uri.Builder vorrei fare quanto segue.

     Uri.Builder builder = new Uri.Builder(); builder.scheme("https") .authority("www.myawesomesite.com") .appendPath("turtles") .appendPath("types") .appendQueryParameter("type", "1") .appendQueryParameter("sort", "relevance") .fragment("section-name"); String myUrl = builder.build().toString(); 

    C'è un altro modo di utilizzare Uri e possiamo raggiungere lo stesso objective

     http://api.example.org/data/2.5/forecast/daily?q=94043&mode=json&units=metric&cnt=7 

    Per build l'Uri è ansible utilizzare questo

     final String FORECAST_BASE_URL = "http://api.example.org/data/2.5/forecast/daily?"; final String QUERY_PARAM = "q"; final String FORMAT_PARAM = "mode"; final String UNITS_PARAM = "units"; final String DAYS_PARAM = "cnt"; 

    Puoi dichiarare tutto questo come sopra o anche all'interno Uri.parse() e appendQueryParameter()

     Uri builtUri = Uri.parse(FORECAST_BASE_URL) .buildUpon() .appendQueryParameter(QUERY_PARAM, params[0]) .appendQueryParameter(FORMAT_PARAM, "json") .appendQueryParameter(UNITS_PARAM, "metric") .appendQueryParameter(DAYS_PARAM, Integer.toString(7)) .build(); 

    Alla fine

     URL url = new URL(builtUri.toString()); 
    • Fonte: Udacity Android / app Sunshine

    La risposta eccellente dall'alto diventa un metodo di utilità semplice.

     private Uri buildURI(String url, Map<String, String> params) { // build url with parameters. Uri.Builder builder = Uri.parse(url).buildUpon(); for (Map.Entry<String, String> entry : params.entrySet()) { builder.appendQueryParameter(entry.getKey(), entry.getValue()); } return builder.build(); } 

    per l'esempio nella second Answer ho usato questa tecnica per lo stesso URL

    http://api.example.org/data/2.5/forecast/daily?q=94043&mode=json&units=metric&cnt=7

     Uri.Builder builder = new Uri.Builder(); builder.scheme("https") .authority("api.openweathermap.org") .appendPath("data") .appendPath("2.5") .appendPath("forecast") .appendPath("daily") .appendQueryParameter("q", params[0]) .appendQueryParameter("mode", "json") .appendQueryParameter("units", "metric") .appendQueryParameter("cnt", "7") .appendQueryParameter("APPID", BuildConfig.OPEN_WEATHER_MAP_API_KEY); 

    quindi dopo la costruzione finale lo ottiene come URL come questo

     URL url = new URL(builder.build().toString()); 

    e aprire una connessione

      HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection(); 

    e se il collegamento è simple come la posizione uri, per esempio

    geo:0,0?q=29203

     Uri geoLocation = Uri.parse("geo:0,0?").buildUpon() .appendQueryParameter("q",29203).build(); 

    L'utilizzo di appendEncodePath() potrebbe risparmiare più righe di appendPath() , il seguente frammento di codice crea questo URL: http://api.openweathermap.org/data/2.5/forecast/daily?zip=94043

     Uri.Builder urlBuilder = new Uri.Builder(); urlBuilder.scheme("http"); urlBuilder.authority("api.openweathermap.org"); urlBuilder.appendEncodedPath("data/2.5/forecast/daily"); urlBuilder.appendQueryParameter("zip", "94043,us"); URL url = new URL(urlBuilder.build().toString()); 
    L'Android è un fan Android di Google, tutto su telefoni Android, Android Wear, Android Dev e applicazioni Android Games e così via.