This example shows how to read text and xml resource files. It has 3 activities, a main one that has two buttons, a second one that reads a text file into a TextView control and a third one that reads an XML file into a TableLayout. The app provides a brief overview of the Doctor Who show and a list of all the doctors.
I am not going to show all the code, but you can download a zip file of the whole project here.
The text file is stored in a new folder under res called "raw". For the xml file I added a new folder called "xml" also under res.
Here is a complete expanded view of the project directory
First we will look at the text file. The Activity consists of just a TextView nested in a ScrollView
<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:scrollbars="vertical">
<TextView
android:id="@+id/txtContent"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceMedium" />
</ScrollView>
Here is the Java code for the activity that reads the text file named overview.txt
package com.spconger.doctorwho;
import java.io.DataInputStream;
import java.io.IOException;
import java.io.InputStream;
import android.util.*;
import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;
public class OverViewActivity extends Activity{
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.overview);
fillOverView();
}
private void fillOverView(){
try{
//create an Input stream to read the file
InputStream overviewFile = getResources().openRawResource(R.raw.overview);
//assign it to a string the method is down below
String overviewData=inputStreamToString(overviewFile);
//get the TextView
TextView txtOverview=(TextView)findViewById(R.id.txtContent);
//set the text
txtOverview.setText(overviewData);
}
catch(IOException e)
{
Log.e("DEBUG","InputStreamToString failure");
}
}
private String inputStreamToString(InputStream is) throws IOException{
//create a buffer
StringBuffer sBuffer = new StringBuffer();
DataInputStream dataIO = new DataInputStream(is);
String strLine=null;
while((strLine=dataIO.readLine()) != null){
sBuffer.append(strLine + "\n");
}
dataIO.close();
is.close();
return sBuffer.toString();
}
}
The xml file is called "doctorlist.xml" and follows this pattern:
\<?xml version="1.0" encoding="UTF-8"?> <doctors> <doctor number="First" name="William Hartnell" tenure="1963-1966" /> ... </doctors>
The xml is read into a TableLayout. Here is the xml of the Activity
<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:scrollbars="vertical">
<TableLayout
android:id="@+id/tableLayout_doctors"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:stretchColumns="*" />
</ScrollView>
here is the java code for the activity that reads the xml
package com.spconger.doctorwho;
import android.app.Activity;
import android.os.Bundle;
import android.util.*;
import android.widget.TableLayout;
import android.widget.TableRow;
import android.widget.TextView;
import android.content.Intent;
import android.content.res.XmlResourceParser;
import org.xmlpull.v1.XmlPullParserException;
import java.io.*;
public class DoctorActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.doctors);
try
{
getDoctors();
}
catch(Exception e){
Log.e("DEBUG", "Failed to load Doctors",e);
}
}
private void getDoctors()throws XmlPullParserException, IOException{
TableLayout doctorTable=(TableLayout)findViewById(R.id.tableLayout_doctors);
XmlResourceParser doctorsXML=getResources().getXml(R.xml.doctorlist);
int eventType=-1;
while (eventType != XmlResourceParser.END_DOCUMENT){
if (eventType==XmlResourceParser.START_TAG){
String strName=doctorsXML.getName();
if (strName.equals("doctor")){
String doctorNumber=doctorsXML.getAttributeValue(null,"number");
String doctorName=doctorsXML.getAttributeValue(null,"name");
String doctorTenure=doctorsXML.getAttributeValue(null,"tenure");
insertDoctorRow(doctorTable, doctorNumber, doctorName, doctorTenure);
}
}
eventType=doctorsXML.next();
}
}
private void insertDoctorRow(final TableLayout doctorTable,
String doctorNumber, String doctorName, String doctorTenure){
final TableRow newRow=new TableRow(this);
addTextToRowWithValues(newRow, doctorNumber);
addTextToRowWithValues(newRow, doctorName);
addTextToRowWithValues(newRow, doctorTenure);
doctorTable.addView(newRow);
}
private void addTextToRowWithValues(final TableRow tableRow, String text){
TextView textView = new TextView(this);
textView.setText(text);
tableRow.addView(textView);
}
@Override
public void onStop(){
super.onStop();
}
}
Here are pictures of the activities when executed
No comments:
Post a Comment