Thank you so much for this reading and the writing tutorials. I've built an App to read in a student class list and name the buttons on the app with their names. Then when I see a student distracted, I press their name button and pick a distraction from a list picker and then write out the record to a separate spreadsheet. Great for communicating with parents. Best wishes, Gord
Thank you Obsidian for the tutorial. The reason why I think the variable is local and not global is 2 fold: 1. Scope We would want the variable to be active only in the context of pulling data from gsheet. Unless the variable is used in multiple instances there's no reason for it to be global. 2. Memory The variable being local means it's only "alive" at that part of the code. Global variables are always alive. When I started appinventor I had many global variables declared at the start. It can get confusing/cumbersome to have so many variables declared globally. I ended up asking myself, "what was this for again?" after I hadn't seen the blocks after some time. Thoughts?
Instead of the join in the Web's gotText event, use Listview's createelement block. You can provide an empty text block instead of image name. Make sure that you have changed listview's properties in the designer view. Set the ListViewLayout property to MainText,Detailed Text (Horizontal) option. If this doesn't make sense, check out this link for correct usage of createelement block: community.appinventor.mit.edu/t/listview-createelement-method-use/40968/6
It is because it is a temporary list that we need to reconstruct every time we load data. if we use a global variable instead, we will have to empty it manually every time before constructing it with sheet data otherwise it will contain double entries.
Excellent, you are a person who really understands the essence of programming. I have an idea. I would like to hire you to teach my son online. Is there any way to contact you ?, thank you.
Hello Madam, I'm trying to create a call directory app for a community using MIT App Inventor. After watching your video, I found it very helpful and appreciate your effort. I would like to know how to retrieve only the values at index 3. In my case, index 2 contains names and index 3 contains phone numbers. When I click on a particular name in the list view, I want to navigate to my phone dial-up screen with the phone number associated with that name from index 3. Could you please explain how to implement this feature?
Is it necessary to have all the data in Google Sheets? If yes, then you will have to explore web apps for private Google sheets: ai2.metricrat.co.uk/guides/query-any-google-sheet-with-a-web-app and if the Google sheet is public then you can get specific data from it using this approach: developers.google.com/chart/interactive/docs/querylanguage?hl=en#setting-the-query-in-the-data-source-url You will need to use Activity Starter to open up the dial-up screen once you get the phone number. You have an interesting problem about getting specific data from Google Sheets so I have added it to my list of prospective tutorials and will try to publish a video soon. Good luck with your app!
I am preparing a school application. I prepared a screen to record student data (ID, Matricule, First and last name, Date of birth, Useful info, Photo). I want to call this info using "RecyclerView" (Photo and First & Last Name) and when I click on a student's photo it shows me all of their already saved data. Thank you for your cooperation and help. N.B: I used Cloudinary to save the photos.@@ObsidianSoftEducation
You can have a menu screen with two buttons for sending and receiving. Pressing those buttons will further open up their own screens. And you can follow both my tutorials for sending and receiving. Another idea is to toggle between two screens without having a separate menu screen. I have done something like this in my alarm clock + timer tutorial. You can check that one out for guidance.
Both are block-based programming languages for making apps. MIT App Inventor is. supported by MIT. The apps made through MIT App Inventor can also work on iPhones through a companion app although, at the moment, they can't be installed on iPhones as standalone apps. MIT App Inventor is 100% free. Kodular is built on MIT App Inventor and is more powerful than MIT App Inventor as you can make more complex apps in it but last I checked, the apps can't be tested on iPhones (the situation might have changed now). Also, recently Kodular has started charging a monthly fee for making apps bigger than 5 MB.
Remember that making a file explorer function in App Inventor is very difficult now due to storage access constraints of the latest Android versions. Hence, the document to be uploaded should already be inside your media. Then, I think it should be possible. Will try to make a tutorial soon.
@@ObsidianSoftEducation thanks let me try. Im working on an app that distinguishes listview items that have been clicked and those not. I had tried to change text color after click but that changed color for ALL elements in the listview
Multiple selection isn't possible in Listview. However, you can explore extensions (community.appinventor.mit.edu/t/multiple-selection-via-listview-possible/120584/4). Without an extension, the text color can't be changed for the selected item but you can change the selection color in designer view. So, your selected item will be highlighted with the selection color. But once you tap on another item, the previous item will be deselected and will lose the selection color.
Thank you for the tutorial! I'm trying to download your app for mental math, but it's showing that it's not available for my device as it was made for an older anroid versions. Can you please update it as your mental math content is really helping my kids
@@Lydia-kf2wj Should be available now: play.google.com/store/apps/details?id=com.obsidiansoft.android.mentalmaths Do tell me how it performs on Android 13
Hey, How would I delete an entry? I have it all showing in a list, my plan is to delete the items in the selected row from the google sheets with a button in ai2. I used to have a script with webscript but it no longer works and I hope you have an easy way. Thanks!
you need a web script for this kind of editing in google sheet. check out this link community.appinventor.mit.edu/t/simple-crud-with-google-sheets-and-apps-script-fixes-hay-kel-flaws/65799 as this might help you. I will try to make a tutorial on it too.
Make sure that you have provided responseContent as input and that you are connected to the internet. Otherwise use a notifier to see in an alert what is being sent back as the responseContent.
Hello, am not sure why am getting the "Cannot parse text argument to "list from csv table" as a CSV-formatted table" error. Am grabbing data from two columns (Timestamp and another) of data from one gsheet and transferring same data to another. The weird part is that the transfer works as I want. Just getting the error message at the end
Have you edited the link correctly and added export?format=csv at the end. Are you getting the error when you get the data from google sheet or when you write to another google sheet?
The export?format=csv is in place for web component url. The error pops up after I write the data to the new gsheet. I've tried to setup the data output block similar to the input data block i.e initialized a local empty list then assigned the output data using 'select list item, list, index' 'get response'. Funny enough no error message but data not transferred to new gsheet😅
Do you want an auto refresh feature?...we can use a clock with timer to refresh data automatically so that when data is added in google sheet, it is shown to user too in app
not possible with this way as this is the easy way so it only reads from sheet #1. If you want more control then you will have to use a web app and use scripts.
Please compare the code of your Web1.GotText even with the code shown in the video or you can have a look at the written tutorial: obsidiansofteducation.blogspot.com/p/get-or-read-data-from-google-sheet-in.html
Hi and thank you very much for the tutorials. I created two applications one for the teacher and the other for the student. The two applications have the same database but each time I need specific columns. I encountered a problem (Runtime Error: Select list item: Attempt to get item number 19 of a list of length 18:...) I use Kodular. How to solve this problem ? Can I send you an email? Thanks
Sure. Send email at obsidiansoftc@gmail.com. This is a classic index out of bounds error. Make sure that you are accessing the correct index. Add error checks and alerts to see exactly where the problem is happening.
Thank you so much for this reading and the writing tutorials. I've built an App to read in a student class list and name the buttons on the app with their names. Then when I see a student distracted, I press their name button and pick a distraction from a list picker and then write out the record to a separate spreadsheet. Great for communicating with parents. Best wishes, Gord
Glad it was helpful!
App development programs are getting more interesting day by day with the help of your tutorials. Thank you!
With the help of your tutorials I have learned so much. I can only comment on how good your teaching skills are.
It seems so hard when one hear all these terms but ur video makes it easy to understand
Tremendous job! This video has all clear details in simplest way. Thanks for all the easy tutorials.
Thank you Obsidian for the tutorial.
The reason why I think the variable is local and not global is 2 fold:
1. Scope
We would want the variable to be active only in the context of pulling data from gsheet. Unless the variable is used in multiple instances there's no reason for it to be global.
2. Memory
The variable being local means it's only "alive" at that part of the code. Global variables are always alive. When I started appinventor I had many global variables declared at the start. It can get confusing/cumbersome to have so many variables declared globally. I ended up asking myself, "what was this for again?" after I hadn't seen the blocks after some time.
Thoughts?
Good answer 👍
Loving the consistency of your content... thank you for bringing amazing tutorial almost every week...
My pleasure!
Your explanation make it easy to understand. Keep up the good work
This is really sooo easy!!! Wonderful explanation as always
You are doing a great job of making this tutorial easy.
Wow, you make this so easy , before these things look so difficult for me but now Thanks to you 😊
You make it so easy to understand thanks for sharing
Amazing tutorial
You are master of your field
Thanks for bringing these amazing tutorials
Most welcome 😊
You have make it so easy to understand 👌
Amazing tutorial by amazing teacher
Tremendous job, thanks for teaching this, it seems so easy now.
You are welcome!
Another cool video! Explained really well
Glad you liked it!
Amazing job dear!thnks for sharing informative tutorials
My pleasure 😊
You're doing a great job
Great content thanks! How we can populate Detailed view section of the ListView item as well with this method?
Instead of the join in the Web's gotText event, use Listview's createelement block. You can provide an empty text block instead of image name. Make sure that you have changed listview's properties in the designer view. Set the ListViewLayout property to MainText,Detailed Text (Horizontal) option. If this doesn't make sense, check out this link for correct usage of createelement block: community.appinventor.mit.edu/t/listview-createelement-method-use/40968/6
Veryy helpful tutorial💫
Nicely explained. Could you please let us know why you used local variable in for each loop ?
It is because it is a temporary list that we need to reconstruct every time we load data. if we use a global variable instead, we will have to empty it manually every time before constructing it with sheet data otherwise it will contain double entries.
Excellent! Thank you!
Glad it was helpful!
Excellent, you are a person who really understands the essence of programming. I have an idea. I would like to hire you to teach my son online. Is there any way to contact you ?, thank you.
Amazing tutorial
Glad you think so!
Tremendous job
Thanks 😊
Hello Madam, I'm trying to create a call directory app for a community using MIT App Inventor. After watching your video, I found it very helpful and appreciate your effort. I would like to know how to retrieve only the values at index 3. In my case, index 2 contains names and index 3 contains phone numbers. When I click on a particular name in the list view, I want to navigate to my phone dial-up screen with the phone number associated with that name from index 3. Could you please explain how to implement this feature?
Is it necessary to have all the data in Google Sheets? If yes, then you will have to explore web apps for private Google sheets: ai2.metricrat.co.uk/guides/query-any-google-sheet-with-a-web-app
and if the Google sheet is public then you can get specific data from it using this approach: developers.google.com/chart/interactive/docs/querylanguage?hl=en#setting-the-query-in-the-data-source-url
You will need to use Activity Starter to open up the dial-up screen once you get the phone number.
You have an interesting problem about getting specific data from Google Sheets so I have added it to my list of prospective tutorials and will try to publish a video soon.
Good luck with your app!
Ok, thank you
Most welcome 😊
Thanks! The tutorial is helpful to my project!! May I know how should I export and analyze the data from the spreadsheet in graph form?
Most welcome 😊 I will publish tutorial for graphs soon but if you are in a hurry , try exploring the chart component.
Really it's easy
Thanks ❤❤❤
You're welcome 😊
❤❤ Great job.
Please how to read image and date from googlesheet. Thanks
Will do soon.. I am assuming that there will be image url with the image too for example a google drive link
I am preparing a school application. I prepared a screen to record student data (ID, Matricule, First and last name, Date of birth, Useful info, Photo).
I want to call this info using "RecyclerView" (Photo and First & Last Name) and when I click on a student's photo it shows me all of their already saved data.
Thank you for your cooperation and help.
N.B: I used Cloudinary to save the photos.@@ObsidianSoftEducation
How to make send and recive in different screens in same app for send and recive
You can have a menu screen with two buttons for sending and receiving. Pressing those buttons will further open up their own screens. And you can follow both my tutorials for sending and receiving. Another idea is to toggle between two screens without having a separate menu screen. I have done something like this in my alarm clock + timer tutorial. You can check that one out for guidance.
Send Data tutorial: ruclips.net/video/JQzDKuzyUoQ/видео.html
Alarm clock + timer tutorial: ruclips.net/video/txrjTCUbFmI/видео.html
What is defferent between MIT app & kodular.
Please! I am newbie.
Both are block-based programming languages for making apps. MIT App Inventor is. supported by MIT. The apps made through MIT App Inventor can also work on iPhones through a companion app although, at the moment, they can't be installed on iPhones as standalone apps. MIT App Inventor is 100% free. Kodular is built on MIT App Inventor and is more powerful than MIT App Inventor as you can make more complex apps in it but last I checked, the apps can't be tested on iPhones (the situation might have changed now). Also, recently Kodular has started charging a monthly fee for making apps bigger than 5 MB.
Great job. Hi, is there a method to upload a document (word, pdf, image...) to Google Drive with kodular?
THANKS.
Remember that making a file explorer function in App Inventor is very difficult now due to storage access constraints of the latest Android versions. Hence, the document to be uploaded should already be inside your media. Then, I think it should be possible. Will try to make a tutorial soon.
@@ObsidianSoftEducation Thanks a lot..
Helpful this video
How to create update and delete Google sheet in this method ,?
Thank you. You need to use a Web app and scripting for finer control.
@@ObsidianSoftEducation thank you
Question: How do I hide a row from being shown in the app (listview) after a click event?
For hiding /deleting from listview, call listview.removeitematindex(listview.selectionindex).
@@ObsidianSoftEducation thanks let me try.
Im working on an app that distinguishes listview items that have been clicked and those not. I had tried to change text color after click but that changed color for ALL elements in the listview
Multiple selection isn't possible in Listview. However, you can explore extensions (community.appinventor.mit.edu/t/multiple-selection-via-listview-possible/120584/4). Without an extension, the text color can't be changed for the selected item but you can change the selection color in designer view. So, your selected item will be highlighted with the selection color. But once you tap on another item, the previous item will be deselected and will lose the selection color.
@@ObsidianSoftEducation This works! Thank You
@@mfalme254 most welcome :)
Thank you for the tutorial!
I'm trying to download your app for mental math, but it's showing that it's not available for my device as it was made for an older anroid versions. Can you please update it as your mental math content is really helping my kids
Most welcome 😊. Kindly tell me the Android version of your device so that I make sure that the mental maths app is correctly updated.
@ObsidianSoftEducation my anroid version is 13
@@Lydia-kf2wj working on it :)
@ObsidianSoftEducation Thank youu!!!
@@Lydia-kf2wj Should be available now: play.google.com/store/apps/details?id=com.obsidiansoft.android.mentalmaths Do tell me how it performs on Android 13
Hey, How would I delete an entry? I have it all showing in a list, my plan is to delete the items in the selected row from the google sheets with a button in ai2. I used to have a script with webscript but it no longer works and I hope you have an easy way. Thanks!
you need a web script for this kind of editing in google sheet. check out this link community.appinventor.mit.edu/t/simple-crud-with-google-sheets-and-apps-script-fixes-hay-kel-flaws/65799 as this might help you. I will try to make a tutorial on it too.
@@ObsidianSoftEducation thank you for your reply. I will look into it, thank you!!!
can not parse text argument to "list from csv table" as csv-formatted table
Make sure that you have provided responseContent as input and that you are connected to the internet. Otherwise use a notifier to see in an alert what is being sent back as the responseContent.
Hello, am not sure why am getting the "Cannot parse text argument to "list from csv table" as a CSV-formatted table" error. Am grabbing data from two columns (Timestamp and another) of data from one gsheet and transferring same data to another. The weird part is that the transfer works as I want. Just getting the error message at the end
Have you edited the link correctly and added export?format=csv at the end. Are you getting the error when you get the data from google sheet or when you write to another google sheet?
The export?format=csv is in place for web component url. The error pops up after I write the data to the new gsheet.
I've tried to setup the data output block similar to the input data block i.e initialized a local empty list then assigned the output data using 'select list item, list, index' 'get response'. Funny enough no error message but data not transferred to new gsheet😅
Are you on app inventor community? I could send you my blocks and gsheet
Aren't you writing to the Google sheet using my send data to Google sheet tutorial? I have used google forms there.
If the button click more than one time the data will again load.. how to refresh the data again..?
Yes...it will refresh when button is clicked.
Do you want an auto refresh feature?...we can use a clock with timer to refresh data automatically so that when data is added in google sheet, it is shown to user too in app
@@ObsidianSoftEducation please make html view in webview video tutorial
@@LEARNANDEARN2003 sure :)
Make html view in mit app inventor
sir, how if we want to get data from difference sheet number, ist still posible?
not possible with this way as this is the easy way so it only reads from sheet #1. If you want more control then you will have to use a web app and use scripts.
@@ObsidianSoftEducation thank you sir, do you have link video tutorial about that (web app and use scirpts)
Thank you so much.
Most welcome 😊
it says "list index too large".. what do i dooo
Please compare the code of your Web1.GotText even with the code shown in the video or you can have a look at the written tutorial: obsidiansofteducation.blogspot.com/p/get-or-read-data-from-google-sheet-in.html
is this doable with firebase ?
Do you mean reading data from firebase DB?
Hi and thank you very much for the tutorials.
I created two applications one for the teacher and the other for the student. The two applications have the same database but each time I need specific columns.
I encountered a problem (Runtime Error: Select list item: Attempt to get item number 19 of a list of length 18:...)
I use Kodular.
How to solve this problem ?
Can I send you an email?
Thanks
Sure. Send email at obsidiansoftc@gmail.com. This is a classic index out of bounds error. Make sure that you are accessing the correct index. Add error checks and alerts to see exactly where the problem is happening.
God bless you@@ObsidianSoftEducation