B4A Library ICOSWorldForecast 3.50

View attachment 14755 View attachment 14754 View attachment 16846 Hi guys, ICOSWorldForecast is here.


It's a pleasure to introduce the new library of weather forecast.

The zip include:

The library, and the demo

INSTALLATION:

Copy the Library in your Basic For Android Library.

Copy the folder weathericon is located in files in the demo. In your one.


RENAME:
ICOSWorldForecast2.71.part1.zip and ICOSWorldForecast2.71.part2.zip

TO:
ICOSWorldForecast2.71.part1.rar and ICOSWorldForecast2.71.part1.rar

In this version I add WeatherUrl and 2 more days forecast.

You can use your own icons, instead of my icons.

For this new version 2.71 you need the new key.

You must register to obtain the new key, otherwise you will get error.

Use the address below to register.

World Weather Online - Welcome to the World Weather Online Developer Network!

don't forget to replace the ApiKey="XXXXXXXXXXXXXX" with your private key

This demos, I made with my galaxy tab 7 600x1024

any question or bugs please report to me.

big Thx to warwound for is fantastic auto-generated reference.


ICOSWorldForecast
Author:
Giuseppe Salvi
Version: 2.81
  • ICOSWorldForecast
    Methods:
    • FCDate (index As Int) As String
      Return Date for which the weather is forecasted
      example:
      Dim a As ICOSWorldForecast
      Label1.Text=a.FCDate(0)
    • FCIcon (index As Int) As Bitmap
      Return Weather symbol image
      example:
      Dim a As ICOSWorldForecast
      Image1.SetBackgroundImage=a.FCWeatherIcon(0)
    • FCIconUrl (index As Int) As String
      Return URLIcon For Forecast Condition
      example:
      Dim a As ICOSWorldForecast
      Label1.Text=a.FCIconUrl(0)
    • FCPrecipitationMM (index As Int) As String
      Return Precipitation amount in millimeter
      example:
      Dim a As ICOSWorldForecast
      Label1.Text=a.FCPrecipitationMM(0)
    • FCTempMaxCelsius (index As Int) As String
      Return Day and night max temperature in Celcius
      example:
      Dim a As ICOSWorldForecast
      Label1.Text=a.FCTempMaxCelsius(0)
    • FCTempMaxFahrenheit (index As Int) As String
      Return Day and night max temperature in Fahrenheit
      example:
      Dim a As ICOSWorldForecast
      Label1.Text=a.FCTempMaxFahrenheit(0)
    • FCTempMinCelsius (index As Int) As String
      Return Day and night min temperature in Celcius
      example:
      Dim a As ICOSWorldForecast
      Label1.Text=a.FCTempMinCelsius(0)
    • FCTempMinFahrenheit (index As Int) As String
      Return Day and night max temperature in Fahrenheit
      example:
      Dim a As ICOSWorldForecast
      Label1.Text=a.FCTempMinFahrenheit(0)
    • FCWeatherCode (index As Int) As String
      Return Weather Code
      example:
      Dim a As ICOSWorldForecast
      Label1.Text=a.FCWeatherCode(0)
    • FCWeatherDesc (index As Int) As String
      Return Weather description
      example:
      Dim a As ICOSWorldForecast
      Label1.Text=a.FCWeatherDesc(0)
    • FCWinddir16Point (index As Int) As String
      Return 16-Point compass wind direction
      example:
      Dim a As ICOSWorldForecast
      Label1.Text=a.FCWinddir16Point(0)
    • FCWinddirDegree (index As Int) As String
      Return Wind direction in degree
      example:
      Dim a As ICOSWorldForecast
      Label1.Text=a.FCWinddirDegree(0)
    • FCWinddirection (index As Int) As String
      Return Compass Wind direction
      example:
      Dim a As ICOSWorldForecast
      Label1.Text=a.FCWinddirection(0)
    • FCWindspeedKmph (index As Int) As String
      Return Wind speed in kilometer per hour
      example:
      Dim a As ICOSWorldForecast
      Label1.Text=a.FCWindspeedKmph(0)
    • FCWindspeedMiles (index As Int) As String
      Return Wind speed in Miles per hour
      example:
      Dim a As ICOSWorldForecast
      Label1.Text=a.FCWindspeedMiles(0)
    • FindLatAndLong As String
      Retrieve accurate latitude and longitude from GPS or network services
    • FindLocation As String
      Retrieve accurate location from GPS or network services
    • Full7DayName (day As Int) As String
      Return Full name of the day ( Monday )
      example:
      Dim a As ICOSWorldForecast
      Label1.Text=a.Full7DayName(0) ' 0 = today - 1 = tomorrow etc etc
    • GetList (mCity As String) As ArrayList
      Set the City Name you wish to get the weather
      example:
      Dim a As ICOSWorldForecast
      Dim l As List
      Dim lv1 As ListView
      l = a.GetList("Los Angeles")
      For n = 0 To l.Size-1
      lv1.AddSingleLine(l.Get(n))
      Next
      Sub lv1_ItemClick (Position As Int, Value As Object)ics.CityName = lv1.GetItem(Position)
      lv1.Clear
      End Sub
    • Initialize (EventName As String)
      Initilize the object
    • Short7DayName (day As Int) As String
      Return Short name of the day ( Mon )
      example:
      Dim a As ICOSWorldForecast
      Label1.Text=a.Short7DayName(0) ' 0 = today - 1 = tomorrow etc etc
    • StringFormat (format As String, object As Object, object1 As Object) As String
      Return Formatted String
      example:
      Label1.Text=StringFormat("Lat: %1$s - Long: %2$s ",Latitude,Longitude)
    • isWiFiConnected As Boolean
      Check if WiFi is Connected
    Permissions:
    • android.permission.ACCESS_ASSISTED_GPS
    • android.permission.ACCESS_COARSE_LOCATION
    • android.permission.ACCESS_FINE_LOCATION
    • android.permission.ACCESS_GPS
    • android.permission.ACCESS_LOCATION_EXTRA_COMMANDS
    • android.permission.ACCESS_NETWORK_STATE
    • android.permission.ACCESS_WIFI_STATE
    • android.permission.CONTROL_LOCATION_UPDATES
    • android.permission.INTERNET
    Properties:
    • ApiKey As String [write only]
      Set your personal ApiKey
      example:
      Dim a As ICOSWorldForecast
      a.ApiKey="XXXXXXXXXXXXXXXXXXXXXXXXXXXX"
    • AreaName As String [read only]
      Return Name of the city
      example:
      Dim a As ICOSWorldForecast
      Label1.Text=a.AreaName
    • CCCloudCover As String [read only]
      Return Cloud Cover in %
      example:
      Dim a As ICOSWorldForecast
      Label1.Text=a.CCCloudCover
    • CCHumidity As String [read only]
      Return Humidity in %
      example:
      Dim a As ICOSWorldForecast
      Label1.Text=a.CCHumidity
    • CCIcon As Bitmap [read only]
      Return Weather symbol image
      example:
      Dim a As ICOSWorldForecast
      Image1.SetBackgroundImage=a.CCWeatherIcon
    • CCIconUrl As String [read only]
      Return URLIcon For Current Condition
      example:
      Dim a As ICOSWorldForecast
      Label1.Text=a.CCIconUrl
    • CCLocalObsDateTime As String [read only]
      Return Local Observation date and time
      example:
      Dim a As ICOSWorldForecast
      Label1.Text=a.CCLocalObsDateTime
    • CCObservationTime As String [read only]
      Return Observation time (UTC)
      example:
      Dim a As ICOSWorldForecast
      Label1.Text=a.CCObservationTime
    • CCPrecipitationMM As String [read only]
      Return Precipitation Amount in Millimeter
      example:
      Dim a As ICOSWorldForecast
      Label1.Text=a.PrecipitationMM
    • CCPressure As String [read only]
      Return Atmospheric pressure in Milibars
      example:
      Dim a As ICOSWorldForecast
      Label1.Text=a.CCPressure
    • CCTempCelsius As String [read only]
      Return Temperature in Celsius
      example:
      Dim a As ICOSWorldForecast
      Label1.Text=a.CCTempCelsius
    • CCTempFahrenheit As String [read only]
      Return Temperature in Fahrenheit
      example:
      Dim a As ICOSWorldForecast
      Label1.Text=a.CCTempFahrenheit
    • CCVisibility As String [read only]
      Return Visibility kilometers per hour
      example:
      Dim a As ICOSWorldForecast
      Label1.Text=a.CCVisibility
    • CCWeatherCode As String [read only]
      Return Weather Code
      example:
      Dim a As ICOSWorldForecast
      Label1.Text=a.CCWeatherCode
    • CCWeatherDescription As String [read only]
      Return Weather Description
      example:
      Dim a As ICOSWorldForecast
      Label1.Text=a.CCWeatherDescription
    • CCWinddir16Point As String [read only]
      Return 16-Point wind direction compass
      example:
      Dim a As ICOSWorldForecast
      Label1.Text=a.CCWinddir16Point
    • CCWinddirDegree As String [read only]
      Return Wind direction in degree
      example:
      Dim a As ICOSWorldForecast
      Label1.Text=a.CCWinddirDegree
    • CCWindspeedKmph As String [read only]
      Return Wind speed in kilometer per hour
      example:
      Dim a As ICOSWorldForecast
      Label1.Text=a.CCWindspeedKmph
    • CCWindspeedMiles As String [read only]
      Return Wind speed in Miles per hour
      example:
      Dim a As ICOSWorldForecast
      Label1.Text=a.CCWindspeedMiles
    • CityName As String [write only]
      Set City you wish to get the weather
      example:
      Dim a As ICOSWorldForecast
      a.CityName="New York"
    • Country As String [read only]
      Return Name of the Country
      example:
      Dim a As ICOSWorldForecast
      Label1.Text=a.Country
    • CurrentDate As String [read only]
      Return Current Day,Month,Year ( Friday, 28 September, 2012 )
      example:
      Dim a As ICOSWorldForecast
      Label1.Text=a.CurrentDate
    • CurrentTime As String [read only]
      Return Current time ( 02.09 PM )
      example:
      Dim a As ICOSWorldForecast
      Label1.Text=a.CurrentTime
    • DstOffset As String [read only]
      Return DstOffset = ( GMT +2 )
      example:
      Dim a As ICOSWorldForecast
      Label1.Text=a.DstOffset
    • GmtOffset As String [read only]
      Return GmtOffset = ( GMT +1 )
      example:
      Dim a As ICOSWorldForecast
      Label1.Text=a.GmtOffset
    • LatAndLong As String [write only]
      Set Lat and Long you wish to get the weather
      example:
      Dim a As ICOSWorldForecast
      a.LatAndLong="40.714,-74.006"
    • Latitude As Object [read only]
      Return Latitude of the city
      example:
      Dim a As ICOSWorldForecast
      Label1.Text=a.Latitude
    • Longitude As Object [read only]
      Return Longitude of the city
      example:
      Dim a As ICOSWorldForecast
      Label1.Text=a.Longitude
    • Population As String [read only]
      Return Population of the city
      example:
      Dim a As ICOSWorldForecast
      Label1.Text=a.Population
    • Region As String [read only]
      Return Name of the Region
      example:
      Dim a As ICOSWorldForecast
      Label1.Text=a.Region
    • Sunrise As String [read only]
      Return Sunrise = 06:04
      example:
      Dim a As ICOSWorldForecast
      Label1.Text=a.Sunrise
    • Sunset As String [read only]
      Return Sunset = 19:36
      example:
      Dim a As ICOSWorldForecast
      Label1.Text=a.Sunset
    • TimeZoneID As String [read only]
      Return TimeZoneID = Europe/Rome
      example:
      Dim a As ICOSWorldForecast
      Label1.Text=a.TimeZoneID
    • Version As Double [read only]
      Return the version of this library
    • WeatherUrl As String [read only]
      Return url of the city [ http://www.worldweatheronline.com/London-weather/City-of-London-Greater-London/GB.aspx ]
      example:
      Dim Webview1 As Webview
      Webview1.LoadUrl(a.WeatherUrl)
 

Attachments

  • ICOSWorldForecast_DEMO.part1.zip
    293 KB · Views: 884
  • ICOSWorldForecast_DEMO.part2.zip
    167.1 KB · Views: 698
  • Main.png
    Main.png
    86.8 KB · Views: 845
  • Widget.jpg
    Widget.jpg
    81.8 KB · Views: 838
  • ICOSWorldForecast.png
    ICOSWorldForecast.png
    156.3 KB · Views: 903
  • ICOSWorldForecastFree_v3.50_lib_fix.zip
    53.9 KB · Views: 448
Last edited:

mkvidyashankar

Active Member
Licensed User
Longtime User
error

Hi salvi

In the demo, it throws an outofboundexception array

Error in this line
bb2.Text="LocalObsDateTime : "&a.CCLocalObsDateTime
 

mkvidyashankar

Active Member
Licensed User
Longtime User
Yes , my wi-fi is on
In the previous version it was working with the data of many countries except UK. Now I am getting error in all the countries.
 

lonleystar

Well-Known Member
Licensed User
Longtime User
Yes , my wi-fi is on
In the previous version it was working with the data of many countries except UK. Now I am getting error in all the countries.
Hi Vidyashankar, I'm testing it every hour and works fine and just now i test it again and i dont get error.

if some one else get error please report.
 

mkvidyashankar

Active Member
Licensed User
Longtime User
Hi Vidyashankar, I'm testing it every hour and works fine and just now i test it again and i dont get error.

if some one else get error please report.


Here i am attaching the screenshot.
 

Attachments

  • SC20130106-170240.png
    SC20130106-170240.png
    69.1 KB · Views: 150

sdb

Member
Licensed User
Longtime User
First of all, this library is a great help and will definitely shorten development time.

I am having difficulty with the current condition icons in that they do not seem to recognize the time zone correctly. Sometimes I will get a night time icon for day and vice versa. The local time is correct but I can get a day time icon for 4am local time. I can't identify a pattern because half the time they are correct.

Also, is it possible to use another icon set instead of those returned by Iccon? I don't see how to access a code that I can use.

Thanks,
 

lonleystar

Well-Known Member
Licensed User
Longtime User
First of all, this library is a great help and will definitely shorten development time.

I am having difficulty with the current condition icons in that they do not seem to recognize the time zone correctly. Sometimes I will get a night time icon for day and vice versa. The local time is correct but I can get a day time icon for 4am local time. I can't identify a pattern because half the time they are correct.

Also, is it possible to use another icon set instead of those returned by Iccon? I don't see how to access a code that I can use.

Thanks,
Hi sdb, last night I tried it and everything ok. for Time zone i really dont know What happened but i´ll give a loock tonight. for the own icons ood idea i´ll implement the routine to choose own icons.
 

sdb

Member
Licensed User
Longtime User
Here is an example of what I am seeing for Tokyo Japan:

Current time (I am US-Eastern time) - 11:30 AM
CCObservationTime - 4:30 PM (UTC)
CCLocalObsDateTime - 1:30 AM (correct for Tokyo)

The icon displayed is a daytime icon not night. It shows clouds over the sun (not moon).

I used the example in 2.62 for this data and my application shows the same.

Hope this helps.

Would it be possible to include the unique weather code from World Weather Online so other icons could be accessed?

Thanks again.
 

sdb

Member
Licensed User
Longtime User
Well, I think I am starting to see some pattern. Whenever the forecast is 'partly cloudy' or 'overcast', and there may be more, and the local time is at night, then the daytime icon is displayed. It shows clouds covering 3/4 of the sun.

Other night icons are correct.
 

lonleystar

Well-Known Member
Licensed User
Longtime User
Well, I think I am starting to see some pattern. Whenever the forecast is 'partly cloudy' or 'overcast', and there may be more, and the local time is at night, then the daytime icon is displayed. It shows clouds covering 3/4 of the sun.

Other night icons are correct.
Hi sdb, this is not a mistake of the library is the mistake from the provider but anyway im fixing that, thanks for having it reported.
 

sdb

Member
Licensed User
Longtime User
I found two more night conditions to add to the list, 'mist' and 'fog'.

Thanks,
 

mkvidyashankar

Active Member
Licensed User
Longtime User
Hi

I tried 2.62 version and getting same error
while selecting some place

log file is here



** Activity (main) Create, isFirst = true **
** Activity (main) Resume **
** Activity (main) Pause, UserClosed = false **
** Activity (main) Create, isFirst = false **
** Activity (main) Resume **
** Activity (main) Pause, UserClosed = false **
** Activity (forecast2) Create, isFirst = true **
forecast2_weather (java line: 420)
java.lang.StringIndexOutOfBoundsException
at java.lang.String.substring(String.java:1651)
at it.giuseppe.salvi.icos.library.weather.ICOSWorldForecastWrapper.getCCLocalObsDateTime(ICOSWorldForecastWrapper.java:745)
at giuseppe.salvi.icosworldforecast2.forecast2._weather(forecast2.java:420)
at giuseppe.salvi.icosworldforecast2.forecast2._activity_create(forecast2.java:300)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:507)
at anywheresoftware.b4a.BA.raiseEvent2(BA.java:167)
at giuseppe.salvi.icosworldforecast2.forecast2.afterFirstLayout(forecast2.java:89)
at giuseppe.salvi.icosworldforecast2.forecast2.access$100(forecast2.java:16)
at giuseppe.salvi.icosworldforecast2.forecast2$WaitForLayout.run(forecast2.java:74)
at android.os.Handler.handleCallback(Handler.java:587)
at android.os.Handler.dispatchMessage(Handler.java:92)
at android.os.Looper.loop(Looper.java:130)
at android.app.ActivityThread.main(ActivityThread.java:3687)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:507)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:867)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:625)
at dalvik.system.NativeStart.main(Native Method)
java.lang.StringIndexOutOfBoundsException
** Activity (forecast2) Pause, UserClosed = false **
** Activity (forecast2) Create, isFirst = false **
forecast2_weather (java line: 420)
java.lang.StringIndexOutOfBoundsException
at java.lang.String.substring(String.java:1651)
at it.giuseppe.salvi.icos.library.weather.ICOSWorldForecastWrapper.getCCLocalObsDateTime(ICOSWorldForecastWrapper.java:745)
at giuseppe.salvi.icosworldforecast2.forecast2._weather(forecast2.java:420)
at giuseppe.salvi.icosworldforecast2.forecast2._activity_create(forecast2.java:300)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:507)
at anywheresoftware.b4a.BA.raiseEvent2(BA.java:167)
at giuseppe.salvi.icosworldforecast2.forecast2.afterFirstLayout(forecast2.java:89)
at giuseppe.salvi.icosworldforecast2.forecast2.access$100(forecast2.java:16)
at giuseppe.salvi.icosworldforecast2.forecast2$WaitForLayout.run(forecast2.java:74)
at android.os.Handler.handleCallback(Handler.java:587)
at android.os.Handler.dispatchMessage(Handler.java:92)
at android.os.Looper.loop(Looper.java:130)
at android.app.ActivityThread.main(ActivityThread.java:3687)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:507)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:867)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:625)
at dalvik.system.NativeStart.main(Native Method)
java.lang.StringIndexOutOfBoundsException
 

lonleystar

Well-Known Member
Licensed User
Longtime User
I found two more night conditions to add to the list, 'mist' and 'fog'.

Thanks,

Hi sdb, I changed these icons, instead of the other.

Don't forget to rename the library from .zip to .rar
 

Attachments

  • black_low_cloud.png
    black_low_cloud.png
    12 KB · Views: 133
  • fog.png
    fog.png
    19.3 KB · Views: 125
  • mist.png
    mist.png
    19.3 KB · Views: 130

lonleystar

Well-Known Member
Licensed User
Longtime User
Hi

I tried 2.62 version and getting same error
while selecting some place

log file is here



** Activity (main) Create, isFirst = true **
** Activity (main) Resume **
** Activity (main) Pause, UserClosed = false **
** Activity (main) Create, isFirst = false **
** Activity (main) Resume **
** Activity (main) Pause, UserClosed = false **
** Activity (forecast2) Create, isFirst = true **
forecast2_weather (java line: 420)
java.lang.StringIndexOutOfBoundsException
at java.lang.String.substring(String.java:1651)
at it.giuseppe.salvi.icos.library.weather.ICOSWorldForecastWrapper.getCCLocalObsDateTime(ICOSWorldForecastWrapper.java:745)
at giuseppe.salvi.icosworldforecast2.forecast2._weather(forecast2.java:420)
at giuseppe.salvi.icosworldforecast2.forecast2._activity_create(forecast2.java:300)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:507)
at anywheresoftware.b4a.BA.raiseEvent2(BA.java:167)
at giuseppe.salvi.icosworldforecast2.forecast2.afterFirstLayout(forecast2.java:89)
at giuseppe.salvi.icosworldforecast2.forecast2.access$100(forecast2.java:16)
at giuseppe.salvi.icosworldforecast2.forecast2$WaitForLayout.run(forecast2.java:74)
at android.os.Handler.handleCallback(Handler.java:587)
at android.os.Handler.dispatchMessage(Handler.java:92)
at android.os.Looper.loop(Looper.java:130)
at android.app.ActivityThread.main(ActivityThread.java:3687)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:507)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:867)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:625)
at dalvik.system.NativeStart.main(Native Method)
java.lang.StringIndexOutOfBoundsException
** Activity (forecast2) Pause, UserClosed = false **
** Activity (forecast2) Create, isFirst = false **
forecast2_weather (java line: 420)
java.lang.StringIndexOutOfBoundsException
at java.lang.String.substring(String.java:1651)
at it.giuseppe.salvi.icos.library.weather.ICOSWorldForecastWrapper.getCCLocalObsDateTime(ICOSWorldForecastWrapper.java:745)
at giuseppe.salvi.icosworldforecast2.forecast2._weather(forecast2.java:420)
at giuseppe.salvi.icosworldforecast2.forecast2._activity_create(forecast2.java:300)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:507)
at anywheresoftware.b4a.BA.raiseEvent2(BA.java:167)
at giuseppe.salvi.icosworldforecast2.forecast2.afterFirstLayout(forecast2.java:89)
at giuseppe.salvi.icosworldforecast2.forecast2.access$100(forecast2.java:16)
at giuseppe.salvi.icosworldforecast2.forecast2$WaitForLayout.run(forecast2.java:74)
at android.os.Handler.handleCallback(Handler.java:587)
at android.os.Handler.dispatchMessage(Handler.java:92)
at android.os.Looper.loop(Looper.java:130)
at android.app.ActivityThread.main(ActivityThread.java:3687)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:507)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:867)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:625)
at dalvik.system.NativeStart.main(Native Method)
java.lang.StringIndexOutOfBoundsException
Hi Vidyashankar, for this error i really don´t understand until now i´ve got no error.

Try to find the location u´ve got the error By ( Get Weather By GetList ).

Please let me know about.
 

mkvidyashankar

Active Member
Licensed User
Longtime User
hi selvi thanks for reply

I tried
London
Mysore
Bengaluru

in the listview.
 

lonleystar

Well-Known Member
Licensed User
Longtime User
hi selvi thanks for reply

I tried
London
Mysore
Bengaluru

in the listview.
Hi Vidyashankar, Which London u mean of england ? if yes there isn't any error,

Mysore and Bengaluru they are in india? if yes there isn't any error. If not please send the map addresses to me so i can check. Wait for your notice.
 

mkvidyashankar

Active Member
Licensed User
Longtime User
Hi Salvi

Problem solved
there was a problem in api key and listview

Thanks for the support
 
Top