college/Summer-2024/CS-3443/Slides/txt/18_Android App Development - Rowdy Quiz File IO.txt

288 lines
4.7 KiB
Plaintext
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

Application
Programming
Hend Alkittawi
Android Development
Building An Application That
Utilizes Data
ROWDY QUIZ APP
-
We created the Rowdy Quiz app, with hard-coded questions
-
Now, it is time to load the questions from a data file
-
We will also add a logo to our screen
WORKING WITH DATA
Reader
Writer
InputStream
OutputStream
InputStreamReader
PrintWriter
FileInputStream
FileOutputStream
FileReader
OutputStreamWriter
ObjectInputStream
ObjectOutputStream
FileWriter
PrintStream
WORKING WITH DATA
-
Classes utilized for reading and writing data in Android
-
Activity
-
AssetManager
-
InputStream
-
OutputStream
READING DATA FROM A FILE
-
To read data from a file:
-
place the file in the Assets folder
- app > New > Folder > Assets Folder (do not change the folder
location)
READING DATA FROM A FILE
-
Under the model package, modify QuizBank.java
-
Modify the loadQuestions() method to create the questions from a data
(*.csv) file
-
the method uses the Activity, AssetManger and InputStream classes to read
the data from the file
public void loadQuestions(MainActivity activity){
AssetManager manager = activity.getAssets();
Scanner scan = null;
String filename = "test.csv";
try {
InputStream file = manager.open(filename);
scan = new Scanner(file);
// do something with the file data
}
catch (IOException e) { // handle exception }
}
READING DATA FROM A FILE
-
For the controller, modify MainActivity.java
-
onCreate() calls the createQuizBank() method to load the questions
in the quiz bank
-
createQuizBank() calls the loadQuestions() method which requires
an AssetManager to load the data from the *.csv file in the
Assets folder
-
Get an AssetManager object from MainActivity using
activity.getAssets()
private void createQuizBank(){
quizBank = new QuizBank();
quizBank.loadQuestions(this);
}
READING DATA FROM A FILE
-
In QuizBank.java
public void loadQuestions(MainActivity activity){
AssetManager manager = activity.getAssets();
Scanner scan = null;
try {
InputStream file = manager.open("test.csv");
scan = new Scanner(file);
// do something with the file data
}
catch (IOException e) {
// handle exception
}
}
-
In MainActivity.java
private void createQuizBank(){
quizBank = new QuizBank();
quizBank.loadQuestions(this);
}
ROWDY QUIZ APP UML
WRITING DATA TO A FILE
-
The Assets folder is read-only, we cannot write data to the
files in the Assets folder
-
To write data to a file, create a file in the AVD memory.
-
Once created, the file can be located in the AVD memory by
navigating to View > Tool Windows > Device Explorer then data
> user > 0 > edu.utsa.cs3443.projectName > files
WRITING DATA TO A FILE
-
Under the model package, modify QuizBank.java
-
add the saveData() method to save data to a (*.txt) file
-
the method uses the Activity and OutputStream classes to read the data
from the file
public void saveData(MainActivity activity){
try {
OutputStream out = activity.openFileOutput(filename, Context.MODE_PRIVATE );
out.write("test writing to a file".getBytes(StandardCharsets.UTF_8));
out.close();
} catch (IOException e) {
System.out.println("Failed to write data");
}
}
WRITING DATA TO A FILE
-
For the controller, modify MainActivity.java
-
onCreate() calls the createQuizBank() method to load the questions
in the quiz bank
-
saveData() method requires an Activity to access the AVD
memory
quizBank.loadQuestions(this);
quizBank.saveData(this); // call it wherever your code needs to save data
READING DATA FROM A FILE
-
In QuizBank.java
public void saveData(MainActivity activity){
try {
OutputStream out = activity.openFileOutput(filename, Context.MODE_PRIVATE );
out.write("test writing to a file".getBytes(StandardCharsets.UTF_8));
out.close();
} catch (IOException e) {
System.out.println("Failed to write data");
}
}
-
In MainActivity.java
quizBank.saveData(this);
WORKING WITH DATA
-
What if we would like to update data in a file from the Assets
folder?
-
The Assets folder is read-only, we cannot write data to the
files in the Assets folder
-
A work around this is to create a copy of the file from the
Assets to the AVD memory, then use the “copy file” for reading
and writing data.
ADDING IMAGEVIEWS TO THE LAYOUT
-
Use an ImageView in the layout file to display an
image on the screen
-
ImageViews can display images from the drawable
folder
-
-
Place the image file under res > drawable
The ImageViews src attribute specifies the image
that the ImageView will display
<ImageView
android:layout_width ="wrap_content"
android:layout_height ="wrap_content"
android:src="@drawable/rowdylogo"/>
CODE DEMO
-
Walk through the
Android App in Android
Studio
DO YOU HAVE ANY
QUESTIONS?
THANK
YOU!
@
hend.alkittawi@utsa.edu
By Appointment
Online