B4A Library [Library] B4aGridView v3.80

Shahid Saeed

Active Member
Licensed User
Longtime User
After updated to the new Library I am getting the following error:

B4X:
** Activity (main) Create, isFirst = true **


** Activity (main) Resume **


** Service (httputils2service) Create **


** Service (httputils2service) Start **





** Activity (main) Pause, UserClosed = false **


** Activity (multimedia) Create, isFirst = true **


** Activity (multimedia) Resume **


** Activity (multimedia) Pause, UserClosed = false **


** Activity (picturealbums) Create, isFirst = true **


java.lang.StackOverflowError


    at java.util.ArrayList.<init>(ArrayList.java:81)
    at java.lang.Throwable.<init>(Throwable.java:66)
    at java.lang.Throwable.<init>(Throwable.java:94)
    at java.lang.Exception.<init>(Exception.java:47)
    at java.io.IOException.<init>(IOException.java:44)
    at java.io.FileNotFoundException.<init>(FileNotFoundException.java:42)
    at android.content.res.AssetManager.openAsset(Native Method)
    at android.content.res.AssetManager.open(AssetManager.java:315)
    at android.content.res.AssetManager.open(AssetManager.java:289)
    at it.giuseppe.salvi.library.photo.grid.view.adapter.PhotoGridBaseAdapter.getBitmapFromAssets(PhotoGridBaseAdapter.java:246)
    at it.giuseppe.salvi.library.photo.grid.view.adapter.PhotoGridBaseAdapter.getBitmapFromAssets(PhotoGridBaseAdapter.java:248)
    at it.giuseppe.salvi.library.photo.grid.view.adapter.PhotoGridBaseAdapter.getBitmapFromAssets(PhotoGridBaseAdapter.java:248)
    at it.giuseppe.salvi.library.photo.grid.view.adapter.PhotoGridBaseAdapter.getBitmapFromAssets(PhotoGridBaseAdapter.java:248)


    at it.giuseppe.salvi.library.photo.grid.view.adapter.PhotoGridBaseAdapter.getBitmapFromAssets(PhotoGridBaseAdapter.java:248)
    at it.giuseppe.salvi.library.photo.grid.view.adapter.PhotoGridBaseAdapter.getBitmapFromAssets(PhotoGridBaseAdapter.java:248)
    at it.giuseppe.salvi.library.photo.grid.view.adapter.PhotoGridBaseAdapter.getBitmapFromAssets(PhotoGridBaseAdapter.java:248)
    at it.giuseppe.salvi.library.photo.grid.view.adapter.PhotoGridBaseAdapter.getBitmapFromAssets(PhotoGridBaseAdapter.java:248)
    at it.giuseppe.salvi.library.photo.grid.view.adapter.PhotoGridBaseAdapter.getBitmapFromAssets(PhotoGridBaseAdapter.java:248)
    at it.giuseppe.salvi.library.photo.grid.view.adapter.PhotoGridBaseAdapter.getBitmapFromAssets(PhotoGridBaseAdapter.java:248)
    at it.giuseppe.salvi.library.photo.grid.view.adapter.PhotoGridBaseAdapter.getBitmapFromAssets(PhotoGridBaseAdapter.java:248)
    at it.giuseppe.salvi.library.photo.grid.view.adapter.PhotoGridBaseAdapter.getBitmapFromAssets(PhotoGridBaseAdapter.java:248)
    at it.giuseppe.salvi.library.photo.grid.view.adapter.PhotoGridBaseAdapter.getBitmapFromAssets(PhotoGridBaseAdapter.java:248)
    at it.giuseppe.salvi.library.photo.grid.view.adapter.PhotoGridBaseAdapter.getBitmapFromAssets(PhotoGridBaseAdapter.java:248)
    at it.giuseppe.salvi.library.photo.grid.view.adapter.PhotoGridBaseAdapter.getBitmapFromAssets(PhotoGridBaseAdapter.java:248)
    at it.giuseppe.salvi.library.photo.grid.view.adapter.PhotoGridBaseAdapter.getBitmapFromAssets(PhotoGridBaseAdapter.java:248)
    at it.giuseppe.salvi.library.photo.grid.view.adapter.PhotoGridBaseAdapter.getBitmapFromAssets(PhotoGridBaseAdapter.java:248)
    at it.giuseppe.salvi.library.photo.grid.view.adapter.PhotoGridBaseAdapter.getBitmapFromAssets(PhotoGridBaseAdapter.java:248)
    at it.giuseppe.salvi.library.photo.grid.view.adapter.PhotoGridBaseAdapter.getBitmapFromAssets(PhotoGridBaseAdapter.java:248)
    at it.giuseppe.salvi.library.photo.grid.view.adapter.PhotoGridBaseAdapter.getBitmapFromAssets(PhotoGridBaseAdapter.java:248)
    at it.giuseppe.salvi.library.photo.grid.view.adapter.PhotoGridBaseAdapter.getBitmapFromAssets(PhotoGridBaseAdapter.java:248)
    at it.giuseppe.salvi.library.photo.grid.view.adapter.PhotoGridBaseAdapter.getBitmapFromAssets(PhotoGridBaseAdapter.java:248)
    at it.giuseppe.salvi.library.photo.grid.view.adapter.PhotoGridBaseAdapter.getBitmapFromAssets(PhotoGridBaseAdapter.java:248)
    at it.giuseppe.salvi.library.photo.grid.view.adapter.PhotoGridBaseAdapter.getBitmapFromAssets(PhotoGridBaseAdapter.java:248)
    at it.giuseppe.salvi.library.photo.grid.view.adapter.PhotoGridBaseAdapter.getBitmapFromAssets(PhotoGridBaseAdapter.java:248)
    at it.giuseppe.salvi.library.photo.grid.view.adapter.PhotoGridBaseAdapter.getBitmapFromAssets(PhotoGridBaseAdapter.java:248)
    at it.giuseppe.salvi.library.photo.grid.view.adapter.PhotoGridBaseAdapter.getBitmapFromAssets(PhotoGridBaseAdapter.java:248)
    at it.giuseppe.salvi.library.photo.grid.view.adapter.PhotoGridBaseAdapter.getBitmapFromAssets(PhotoGridBaseAdapter.java:24
Message longer than Log limit (4000). Message was truncated.
 

Shahid Saeed

Active Member
Licensed User
Longtime User
OK Got it working, I had to copy the image files from the Asset folder of your example to my APP. Testing it now, looks good. I hope if you can add ability to add picture title.
 

Shahid Saeed

Active Member
Licensed User
Longtime User
Yes, So far It is working great. Thanks for the good work. I am still testing it if there will be anything I will let you know. Please also consider picture titles.
 

Shahid Saeed

Active Member
Licensed User
Longtime User
@lonleystar so far with the new update the GridView is much faster now. I am using it with page view; but page view is still a bit slow and takes time to move between pictures, need to wait for some time before we do zoomin. is it possible to show a progress bar as dialogue when we click on an picture from GridView to be Displayed on PageView?
 

Shahid Saeed

Active Member
Licensed User
Longtime User
I have attached 1 screen shot from your example and other from my APP. You can notice last pictures in bottom are not full also pictures in right column in my app are not complete. I have also notice there are still some pictures which it had not loaded. I am using GridView in a Panel.

B4X:
GridView.initialize("GridView")
PGV.AddView(GridView,0dip,0dip,100%x,100%y)

If fnc.GetDevicePhysicalSize > 6 Then
    '7'' or 10'' tablet
        GridView.ItemWidth= ( GridView.Width / 3) 
        GridView.ItemHeight=GridView.ItemWidth
        GridView.HorizontalSpacing= 4dip   
        GridView.VerticalSpacing= 4dip
        GridView.NumColumns= 3       
    Else
    'phone
        GridView.ItemWidth= GridView.Width / 2
        GridView.ItemHeight= GridView.ItemWidth
        GridView.HorizontalSpacing=4dip   
        GridView.VerticalSpacing=4dip
        GridView.NumColumns= 2   
    End If       
   
    'GridView.ColumnWidth=GridView.ItemWidth
    'GridView.StretchMode=GridView.STRETCH_COLUMN_WIDTH
    GridView.Gravity=Gravity.CENTER
    GridView.ScaleType = GridView.ScaleType.Fit_XY
   
    GridView.SetNoEffect = False
    GridView.FadeInTime = 300
    GridView.RoundedBitmap = False
    GridView.SetBorderColor = Colors.RGB(133,22,30)
    'GridView.SetCornerRadius = 20
    GridView.SetBorderWidth =1
   
    'GridView.DelayBeforeLoading = 300
    GridView.ProgressBarIndeterminate = False
    GridView.ProgressBarVisible = True


Dim parser As JSONParser
    parser.Initialize(json)
   
    Dim root As Map = parser.NextObject
    Dim albums As List = root.Get("albums")
   
    For Each col_albums As Map In albums
        'Dim album_id As String = col_albums.Get("album_id")
        Dim album_image As String = col_albums.Get("album_image")
        'Dim album_title As String = col_albums.Get("album_title")
       
    GridView.AddImageFromWeb(album_image)
    's = Array As String(album_image)   
    Next

 

Ferdari

Active Member
Licensed User
Longtime User
Hi Lonleystar, Thanks for the update..

but im getting an error using the ShowFromWeb
B4X:
java.lang.StackOverflowError
    at java.util.ArrayList.<init>(ArrayList.java:81)
    at java.lang.Throwable.<init>(Throwable.java:66)
    at java.lang.Throwable.<init>(Throwable.java:94)
    at java.lang.Exception.<init>(Exception.java:47)
    at java.io.IOException.<init>(IOException.java:44)
    at java.io.FileNotFoundException.<init>(FileNotFoundException.java:42)
    at android.content.res.AssetManager.openAsset(Native Method)
    at android.content.res.AssetManager.open(AssetManager.java:315)
    at android.content.res.AssetManager.open(AssetManager.java:289)
    at it.giuseppe.salvi.library.photo.grid.view.adapter.PhotoGridBaseAdapter.getBitmapFromAssets(PhotoGridBaseAdapter.java:246)
    at it.giuseppe.salvi.library.photo.grid.view.adapter.PhotoGridBaseAdapter.getBitmapFromAssets(PhotoGridBaseAdapter.java:248)
    at it.giuseppe.salvi.library.photo.grid.view.adapter.PhotoGridBaseAdapter.getBitmapFromAssets(PhotoGridBaseAdapter.java:248)
    at it.giuseppe.salvi.library.photo.grid.view.adapter.PhotoGridBaseAdapter.getBitmapFromAssets(PhotoGridBaseAdapter.java:248)...

My website returns me a list of comma separated images , then it parses every , and creates an array

B4X:
'Returned comma separated images from my server then:

Dim res As String = Job.GetString
Dim s() As String = Regex.Split(",", res)
Log(s.Length)
For Each n As String In s
  Log(n)
Next
            
'Populate Grid
GridView.ShowFromWeb(s, False)

My question is how do i need to parse the contents from my web, it isn't working anymore (it works on your previous lib version),
as i see in example all images from array starts with _ "imageUrl", _ "imageUrl",
B4X:
    fromWeb = Array As String( _
    "https://lh4.googleusercontent.com/-Z4zGiC5nWdc/URqvBdEwivI/AAAAAAAAAbs/ZRZR1VJ84QA/s1024/Sin%252520Lights.jpg", _
            "https://lh4.googleusercontent.com/-_0cYiWW8ccY/URqvBz3iM4I/AAAAAAAAAbs/9N_Wq8MhLTY/s1024/Starry%252520Lake.jpg", _
            "https://lh3.googleusercontent.com/-A9LMoRyuQUA/URqvCYx_JoI/AAAAAAAAAbs/s7sde1Bz9cI/s1024/Starry%252520Night.jpg")

I'dont know how to handle this kind of array from my server :S

Please help
 

Shahid Saeed

Active Member
Licensed User
Longtime User
Copy the image files from library example assets folder to your assets folder.

Try this:

B4X:
GridView.AddImageFromWeb(your images)
 

Ferdari

Active Member
Licensed User
Longtime User
Copy the image files from library example assets folder to your assets folder.

Try this:

B4X:
GridView.AddImageFromWeb(your images)

Thanks Shahid,
i replaced GridView.ShowFromWeb with this:

B4X:
Dim res As String = Job.GetString
Dim s() As String = Regex.Split(",", res)
Log(s.Length)
For Each n As String In s
    GridView.AddImageFromWeb(n) 'Your suggestion works good here
    Log(n)
Next

Works good thanks again
 

Ferdari

Active Member
Licensed User
Longtime User
Hi Ferdari, i install your app GoodPaper from google play doesnt work it say cargando imagenes... and after The connection has timed out.

My server is up and running, but in some countries may be a delay or high latency causing it.
http://www.downforeveryoneorjustme.com/programadosparaganar.com
http://www.pingmyurl.com/ ----> ping programadosparaganar.com


But by the way, in about 20min will be available the new version 1.4, check again soon, it works better and faster, thank to you
 

Shahid Saeed

Active Member
Licensed User
Longtime User
Hi Shahid, can u send to me just the routine with full address to get image from your server so i can check it maybe i need fix the lib for that.
Here you go, it is json code consisting on albums and pictures in each album. In my app first I'm just loading the albums and when you select an album it shows pictures in that album.

B4X:
http://www.prcamels.ae/json/pictures.json.id.php
 

Shahid Saeed

Active Member
Licensed User
Longtime User
Did you parse JSON when you parse it will look like as below:- (www.jsonlint.com) check my json URL on this website with the output. when you parse it in B4A just get the URL with LOG and see the output.

B4X:
{
    "albums": [
        {
            "album_id": "11",
            "album_title": "مركز الإنتاج",
            "album_image": "http://www.prcamels.ae/images/album/thumb08076968.jpg",
            "pictures": [
                {
                    "picture_id": "72",
                    "picture_date": "الأحد ، ٢٣ فبراير  ٢٠١٤",
                    "picture_title": "مركز الإنتاج",
                    "picture_image": "http://www.prcamels.ae/images/picture/pic38871941.jpg"
                },
                {
                    "picture_id": "71",
                    "picture_date": "الأحد ، ٢٣ فبراير  ٢٠١٤",
                    "picture_title": "مركز الإنتاج",
                    "picture_image": "http://www.prcamels.ae/images/picture/pic42709518.jpg"
                },

parse in B4A

B4X:
Sub Process_Globals    
    PictureUrl = "http://www.prcamels.ae/json/pictures.json.id.php"
    Dim PictureJson As String    
End Sub

Sub Globals    
    Dim GridView As PhotoGridView
    Dim PGV As Panel    
End Sub

Sub Activity_Create(FirstTime As Boolean)    
    Activity.LoadLayout("picturealbums")    
    GridView.initialize("GridView")
    PGV.AddView(GridView,0dip,0dip,100%x,100%y)
    'GridView.ClearCache
    'GridView.Animation=True
    If fnc.GetDevicePhysicalSize > 6 Then
    '7'' or 10'' tablet
        GridView.ItemWidth= ( GridView.Width / 3) 
        GridView.ItemHeight=GridView.ItemWidth
        GridView.HorizontalSpacing= 4dip   
        GridView.VerticalSpacing= 4dip
        GridView.NumColumns= 3       
    Else
    'phone
        GridView.ItemWidth= GridView.Width / 2
        GridView.ItemHeight= GridView.ItemWidth
        GridView.HorizontalSpacing=4dip   
        GridView.VerticalSpacing=4dip
        GridView.NumColumns= 2   
    End If       
   
    'GridView.ColumnWidth=GridView.ItemWidth
    'GridView.StretchMode=GridView.STRETCH_COLUMN_WIDTH
    GridView.Gravity=Gravity.CENTER
    GridView.ScaleType = GridView.ScaleType.Fit_XY
   
    GridView.SetNoEffect = False
    GridView.FadeInTime = 300
    GridView.RoundedBitmap = False
    GridView.SetBorderColor = Colors.RGB(133,22,30)
    'GridView.SetCornerRadius = 20
    GridView.SetBorderWidth =1
   
    'GridView.DelayBeforeLoading = 300
    GridView.ProgressBarIndeterminate = False
    GridView.ProgressBarVisible = True
       
    Dim GetPage As HttpJob
    GetPage.Initialize("GetPageJob", Me)
    GetPage.Download(PictureUrl)
   
End Sub

Sub ParseJSON(json As String)
    Dim parser As JSONParser
    parser.Initialize(json)
   
    Dim root As Map = parser.NextObject
    Dim albums As List = root.Get("albums")
   
    For Each col_albums As Map In albums
        'Dim album_id As String = col_albums.Get("album_id")
        Dim album_image As String = col_albums.Get("album_image")
        'Dim album_title As String = col_albums.Get("album_title")
       
    GridView.AddImageFromWeb(album_image)    
    Next                       
        Log(album_image)
   
End Sub

Sub JobDone(job As HttpJob)
    If job.Success = True Then
        PictureJson = job.GetString
        ParseJSON(PictureJson)
        'ProgressDialogHide
    Else
        Log("Error: " & job.ErrorMessage)
    End If       
End Sub

Sub Activity_Resume    
    GridView.ResumeEngine
End Sub

Sub Activity_Pause (UserClosed As Boolean)
    GridView.StopEngine
End Sub

Sub GridView_ItemClick(Position As Int, Value As Object)  
      Pictures.AlbumID = Position
     'Pictures.AlbumTitle = AlbumTitle
     Log(Position)
     Activity.Finish
     StartActivity(Pictures)
End Sub
 
Last edited:

lonleystar

Well-Known Member
Licensed User
Longtime User
Hi, check this to me work.




B4X:
Sub ParseJSON(json As String)
'  Dim parser As JSONParser
'  parser.Initialize(json)
'  Dim root As Map = parser.NextObject
'  Dim albums As List = root.Get("albums")

'  For Each col_albums As Map In albums
        'Dim album_id As String = col_albums.Get("album_id")
'      Dim album_image As String = col_albums.Get("album_image")
        'Dim album_title As String = col_albums.Get("album_title")
   
'  GridView.AddImageFromWeb(album_image) 
'  Next                   
'      Log(album_image)

    Dim parser As JSONParser
     
    ' parser.Initialize(File.ReadString(File.DirAssets, "1.txt"))
     parser.Initialize(json)
     Dim root As Map = parser.NextObject
     
     Dim albums As List = root.Get("albums")
     
   For Each colalbums As Map In albums
   
     Dim album_id As String = colalbums.Get("album_id")
     
     Dim pictures As List = colalbums.Get("pictures")
     
   For Each colpictures As Map In pictures
   
       Dim picture_image As String = colpictures.Get("picture_image")
     
       Dim picture_title As String = colpictures.Get("picture_title")
     
       Dim picture_date As String = colpictures.Get("picture_date")
     
       Dim picture_id As String = colpictures.Get("picture_id")
     GridView.AddImageFromWeb(picture_image)
   Next
   
     Dim album_image As String = colalbums.Get("album_image")
     
     Dim album_title As String = colalbums.Get("album_title")
     
   Next

End Sub
 

Attachments

  • 1.txt
    19.4 KB · Views: 183
Last edited:
Cookies are required to use this site. You must accept them to continue using the site. Learn more…