Download xml, Show ProgressDialog, Save data, change view

Tutorials with advanced 'difficulty' and more Lines of Code.

Download xml, Show ProgressDialog, Save data, change view

Postby achie1266 » Fri Nov 20, 2009 6:22 am

I have build an application to download xml data, save it into database , show progressDialog while this goes on and then change the view to show the list from xml.

My idea was to download the xml only one when the application was opened for the first time.

I have implemented this in this way
Syntax: [ Download ] [ Hide ]
Using java Syntax Highlighting
  1. public class Main extends Activity{
  2.        
  3.         static final int PROGRESS_DIALOG = 0;
  4.         Button button;
  5.         ProgressDialog progressDialog;
  6.     ProgressDialog myProgressDialog = null;
  7.         MyDbAdapter adapter;
  8.         final String employeeURL =  http://MY_EMPLOYEE_XML_URL;
  9.        
  10.     /** Called when the activity is first created. */
  11.     @Override
  12.     public void onCreate(Bundle savedInstanceState) {
  13.        
  14.         super.onCreate(savedInstanceState);
  15.         setContentView(R.layout.main);
  16.        
  17.         adapter = openDb();
  18.         adapter.createAchieTable();
  19.         boolean dbInitialized = adapter.initDatabase();
  20.         // checks if the database has been successfully initialized
  21.         if(dbInitialized){
  22.                 //database has been initialized
  23.                 int i = adapter.getFlag(ACHIE_STATE);
  24.                 if(i == 1){
  25.                         //ACHIE_STATE == 1; means that the database is already available.
  26.                         button = (Button)findViewById(R.id.show_employees);
  27.                         button.setOnClickListener(new OnClickListener(){
  28.                         public void onClick(View v){
  29.                             // Display an indeterminate Progress-Dialog
  30.                         myProgressDialog = ProgressDialog.show(Main.this, "Please wait", "Loading Data...", true);
  31.                         Intent intent = new Intent(Main.this, EmployeeList.class);
  32.                         adapter.close();
  33.                         myProgressDialog.dismiss();
  34.                         startActivity(intent);
  35.                         }
  36.                         });
  37.                 }else{
  38.                         // ACHIE_STATE < 1; means database hasn't been downloaded yet. Create tables and download data.
  39.                         Log.v(this.getClass().getName(), " download employees");
  40.                        
  41.                         adapter.createEmployeesTable();
  42.                         button = (Button)findViewById(R.id.show_employees);
  43.                         button.setOnClickListener(new OnClickListener(){
  44.                         public void onClick(View v){
  45.                             // Display an indeterminate Progress-Dialog
  46.                         myProgressDialog = ProgressDialog.show(Main.this, "Message", "Downloading Employee Data", true);
  47.                         if(adapter.getFlag(ACHIE_STATE) < 1){
  48.                                 new Thread() {
  49.                                      public void run() {
  50.                                           try{
  51.                                                   Log.v("Main: ", "Start database check");
  52.                                                   Thread.sleep(2000);
  53.                                                   downloadTables(employeeURL);
  54.                                                   Log.v("Main: ", "downloaded Employees");
  55.                                                   Thread.sleep(2000);
  56.                
  57.                                           } catch (Exception e) {  }
  58.                                           // Dismiss the Dialog
  59.                                               Intent i = new Intent(Main.this, EmployeeList.class);
  60.                                               myProgressDialog.dismiss();
  61.                                               startActivity(i);
  62.                                      }
  63.                                 }.start();
  64.  
  65.                         }else if (adapter.getFlag(EMPLOYEES_STATE) >= 1){
  66.                                 Intent i = new Intent(Main.this, EmployeeList.class);
  67.                                 myProgressDialog.dismiss();
  68.                                 startActivity(i);
  69.                         }
  70.                         }
  71.                 });
  72.                 }
  73.         }else{
  74.                 // database has not been initialized. Try to initialize it. App should not reach here in normal circumstances.
  75.                 Log.v(this.getClass().getName(), " Initialize database");
  76.         }
  77.        
  78.     }
  79.    
  80.     private MyDbAdapter openDb(){
  81.         adapter = new MyDbAdapter(this);
  82.         adapter.open();
  83.         return adapter;
  84.     }
  85.  
  86.     public int downloadTables(String xmlUrl){
  87.         int downloadStatus = 0;
  88.         try{
  89.                         URL url = new URL(xmlUrl);
  90.                         SAXParserFactory factory = SAXParserFactory.newInstance();
  91.                         SAXParser parser = factory.newSAXParser();
  92.                         XMLReader reader = parser.getXMLReader();
  93.                        
  94.                         MyHandler handler = new MyHandler(adapter);
  95.                         reader.setContentHandler(handler);
  96.                         reader.parse(new InputSource(url.openStream()));
  97.                 }catch(Exception e){
  98.                         Log.e("Error: ", "" + e.getMessage());
  99.                         System.exit(0);
  100.                 }finally{
  101.                         downloadStatus = 1;
  102.                 }
  103.                 return downloadStatus;
  104.     }
  105.    
  106.         protected void onPause(){
  107.                 Log.v("progress bar view: ", "onPause method called");
  108.                 super.onPause();
  109.         }
  110.        
  111.         protected void onRestart(){
  112.                 adapter.close();
  113.                 adapter = openDb();
  114.                 super.onRestart();
  115.         }
  116.        
  117.         protected void onStop(){
  118.                 adapter.close();
  119.                 Log.v("progress bar view: ", "onStop method called");
  120.                 super.onStop();
  121.         }
  122.        
  123.         protected void onDestroy(){
  124.                 adapter.close();
  125.                 Log.v("progress bar view: ", "onDestroy method called");
  126.                 super.onDestroy();
  127.         }
  128.    
  129. }
Parsed in 0.049 seconds, using GeSHi 1.0.8.4


EmployeeList to show the list of employees downloaded

Syntax: [ Download ] [ Hide ]
Using java Syntax Highlighting
  1. package com.achie.test;
  2.  
  3. import android.app.ListActivity;
  4. import android.database.Cursor;
  5. import android.os.Bundle;
  6. import android.util.Log;
  7. import android.widget.SimpleCursorAdapter;
  8.  
  9. public class EmployeeList extends ListActivity{
  10.        
  11.         MyDbAdapter adapter;
  12.         Cursor cursor;
  13.        
  14.         @Override
  15.         protected void onCreate(Bundle savedInstanceState) {
  16.                 super.onCreate(savedInstanceState);
  17.                 setContentView(R.layout.employees);
  18.         adapter = new MyDbAdapter(this);
  19.         try{
  20.                 adapter.open();
  21.                 cursor = adapter.fetchEmployees();
  22.                 startManagingCursor(cursor);
  23.                 showEmployees(cursor);
  24.         }finally {
  25.                 adapter.close();
  26.         }
  27.         }
  28.  
  29.         protected void onPause(){
  30.                 Log.v("Employee List: ", "onPause method called");
  31.                 super.onPause();
  32.         }
  33.        
  34.         protected void onStop(){
  35.                 Log.v("Employee list: ", "onStop method called");
  36.                 cursor.close();
  37.                 adapter.close();
  38.                 super.onStop();
  39.         }
  40.  
  41.     public void showEmployees(Cursor cursor){
  42.         int[] TO = new int[]{R.id.name};
  43.         String[] FROM = new String[]{"employee"};
  44.         SimpleCursorAdapter cAdapter = new SimpleCursorAdapter(this, R.layout.item_all, cursor, FROM, TO);
  45.         setListAdapter(cAdapter);
  46.     }
  47. }
  48.  
Parsed in 0.036 seconds, using GeSHi 1.0.8.4


My database adapter
Syntax: [ Download ] [ Hide ]
Using java Syntax Highlighting
  1.  
  2. package com.achie.test;
  3.  
  4. import android.content.ContentValues;
  5. import android.content.Context;
  6. import android.database.Cursor;
  7. import android.database.sqlite.SQLiteDatabase;
  8. import android.util.Log;
  9.  
  10. import java.lang.String;
  11.  
  12. import static com.achie.test.Constants.*;
  13. import static android.content.Context.*;
  14.  
  15. public class MyDbAdapter {
  16.  
  17.         private SQLiteDatabase db;
  18.         private Context context;
  19.        
  20.         public MyDbAdapter(Context c){
  21.                 this.context = c;
  22.         }
  23.        
  24.         public boolean deleteDatabase(){
  25.                 return context.deleteDatabase(DATABASE);
  26.         }
  27.        
  28.         public SQLiteDatabase open(){
  29.                 db = context.openOrCreateDatabase(DATABASE, MODE_PRIVATE, null);
  30.                 return db;
  31.         }
  32.        
  33.         public void close(){
  34.                 if(db.isOpen()){
  35.                         db.close();
  36.                 }
  37.         }
  38.        
  39.         //*****************Application specific*********
  40.        
  41.         public void createAchieTable(){
  42.                 db.execSQL("CREATE TABLE IF NOT EXISTS " + ACHIE_TABLE + " ("
  43.                                 + ACHIE_ID              + " INTEGER PRIMARY KEY AUTOINCREMENT , "
  44.                                 + ACHIE_STATE   + " INTEGER, "
  45.                                 + EMPLOYEES_STATE       + " INTEGER );");
  46.         }
  47.        
  48.         public boolean initDatabase(){
  49.                 Log.v("Database: ", "in initDatabase");
  50.                 Cursor c = db.rawQuery("SELECT COUNT(_id) as count_x FROM "+ACHIE_TABLE , null);
  51.                 c.moveToFirst();
  52.                 int count = c.getInt(c.getColumnIndex("count_x"));
  53.                 Log.v("Database: ", "in initDatabase   "+c.moveToFirst()+" count: "+c.getInt(c.getColumnIndex("count_x"))+" : ::"+count+": "+count);
  54.                 if(count < 1){
  55.                         Log.v("Database: ", "No elements in ACHIE");
  56.                         // If the table doesn't have any records insert a default row.
  57.                         ContentValues v = new ContentValues();
  58.                         v.put(ACHIE_ID, "1");
  59.                         v.put(ACHIE_STATE, "-1");
  60.                         v.put(EMPLOYEES_STATE, "-1");
  61.                         Log.v("Database: ", "Inserting ");
  62.                         db.insert(ACHIE_TABLE, null, v);
  63.                         db.execSQL("UPDATE "+ACHIE_TABLE+ " SET "+ACHIE_STATE+ " = 0 WHERE _id = 1;" );
  64.                 }
  65.                 c = db.query(ACHIE_TABLE, new String[]{ACHIE_STATE}, ACHIE_ID + " = 1", null, null, null, null);
  66.                 Log.v("Database: ", "in initDatabase "+c.moveToFirst());
  67.                 if(c.moveToFirst()){
  68.                         if(c.getInt(c.getColumnIndex(ACHIE_STATE)) >= 0){
  69.                                 //returns true if the ACHIE state is >= 0
  70.                                 Log.v("Database: ", "in initDatabase state is "+c.getInt(c.getColumnIndex(ACHIE_STATE)));
  71.                                 return true;
  72.                                 }
  73.                 }
  74.                 return false;
  75.         }
  76.        
  77.         public void setFlag(String column, int flag){
  78.                 db.execSQL("UPDATE "+ACHIE_TABLE+ " SET "+column+ " = "+flag+" WHERE _id = 1;" );
  79.         }
  80.        
  81.         public int getFlag(String column){
  82.                 Cursor c = db.query(ACHIE_TABLE, new String[]{column}, ACHIE_ID + " = 1", null, null, null, null);
  83.                 if(c.moveToFirst()){
  84.                         return c.getInt(0);
  85.                 }
  86.                 return -2;
  87.         }
  88.        
  89.         public boolean checkDatabase(){
  90.                 Cursor c = null;
  91.                 c = db.query(ACHIE_TABLE, new String[]{ACHIE_STATE, EMPLOYEES_STATE },
  92.                                 ACHIE_ID + " = 1", null, null, null, null);
  93.                 if(c.moveToFirst()){
  94.                         int flagCount = c.getInt(0) + c.getInt(1);
  95.                         if(flagCount < 2)
  96.                                 return false;
  97.                         return true;
  98.                 }
  99.                 return false;
  100.         }
  101.        
  102.         public Cursor getDatabaseStatus(){
  103.                 return db.query(ACHIE_TABLE, new String[]{ACHIE_STATE, EMPLOYEES_STATE},
  104.                                 ACHIE_ID + " = 1", null, null, null, null);
  105.         }
  106.        
  107.         // Employees
  108.         public void createEmployeesTable(){
  109.                 db.execSQL("CREATE TABLE IF NOT EXISTS " + EMPLOYEES_TABLE + " (" + EID + " INTEGER PRIMARY KEY , " + EMPLOYEE_NAME
  110.                                 + " TEXT NOT NULL );");
  111.         }
  112.        
  113.         public void deleteEmployeesTable(){
  114.                 db.execSQL("DROP TABLE IF EXISTS " +EMPLOYEES_TABLE+ ";");
  115.         }
  116.        
  117.         public long addEmployee(Employee e){
  118.         ContentValues values = new ContentValues();
  119.         values.put(EID, e.getId());
  120.         values.put(EMPLOYEE_NAME, e.getName());
  121.         long result = -1;
  122.         result = db.insert(EMPLOYEES_TABLE, null, values);
  123.         return result;
  124.         }
  125.        
  126.         public Cursor fetchEmployees() {
  127.                 Log.v(this.getClass().getName(), "Fetching Employees");
  128.                 Cursor c = db.query(EMPLOYEES_TABLE, new String[] {EID, EMPLOYEE_NAME}, null, null, null, null, EMPLOYEE_NAME);
  129.                 return c;
  130.         }
  131.        
  132. }
  133.  
Parsed in 0.053 seconds, using GeSHi 1.0.8.4



Everything works fine.
Even when I open the application It downloads for the first time and just shows the list from the next time.

My only problem is that It shows these errors when I click on back and open the list for three or four times. It then stops.
can anyone tell me whats causing this and how to solve this?

Looks like the sursor has not been closed. But I am trying to close it in the onDestroy and onStop menthods


Syntax: [ Download ] [ Hide ]
Using xml Syntax Highlighting
  1. I/dalvikvm(  846):      at android.database.sqlite.SQLiteCursor.finalize(SQLiteCursor.java:596)
  2. I/dalvikvm(  846):      at dalvik.system.NativeStart.run(Native Method)
  3. I/dalvikvm(  846): Uncaught exception thrown by finalizer (will be discarded):
  4. I/dalvikvm(  846): Ljava/lang/IllegalStateException;: Finalizing cursor android.database.sqlite.SQLiteCursor@43acd858 on achie that has not been deactivated or closed
  5. I/dalvikvm(  846):      at android.database.sqlite.SQLiteCursor.finalize(SQLiteCursor.java:596)
  6. I/dalvikvm(  846):      at dalvik.system.NativeStart.run(Native Method)
  7. I/dalvikvm(  846): Uncaught exception thrown by finalizer (will be discarded):
  8. I/dalvikvm(  846): Ljava/lang/IllegalStateException;: Finalizing cursor android.database.sqlite.SQLiteCursor@43ac02d8 on achie that has not been deactivated or closed
  9.  
Parsed in 0.000 seconds, using GeSHi 1.0.8.4



I can also send my code to anyone who wants to recreate the entire app.

I would also post the entire solution here after solving it if anyone is interested.

thank you.
achie
User avatar
achie1266
Master Developer
Master Developer
 
Posts: 223
Joined: Mon Nov 09, 2009 10:56 pm
Location: Denver

Top

Postby nitemovz » Sat Dec 19, 2009 9:53 pm

Would you be kind enough to post your whole project's source code? I am trying to work on a program that will update every launch with new content that is loaded in an [syntax="xml"] file on a web server. Your project would seem to be exactly what I need. I will also give you developer credits in my info page.

Greatly appreciated!
nitemovz
Junior Developer
Junior Developer
 
Posts: 11
Joined: Sat Dec 19, 2009 6:44 pm

Postby achie1266 » Sat Dec 19, 2009 10:42 pm

nitemovz wrote:Would you be kind enough to post your whole project's source code? I am trying to work on a program that will update every launch with new content that is loaded in an [syntax="xml"] file on a web server. Your project would seem to be exactly what I need. I will also give you developer credits in my info page.

Greatly appreciated!


Hi nitemovz,

I would be glad to help you on that but I cannot post my project's source code. Even the code that I posted here is a sample project thru which I tried to reproduce my problem. I cannot post it as its my company's project and I am expected not to do it.

Having said that I will be happy to help you in whatever way I can. Please post your question regarding where you have a problem here and I will definetly answer if I know the solution. Even if I do not know the answer there will be more people here who would help you.
achie
User avatar
achie1266
Master Developer
Master Developer
 
Posts: 223
Joined: Mon Nov 09, 2009 10:56 pm
Location: Denver

Postby nitemovz » Sat Dec 19, 2009 11:03 pm

The project I am working on is based very loosely on the following posts.

http://www.anddev.org/tutorial_request_----und-gt_putting_xml_to_clickable_list_view-t6076.html

http://www.anddev.org/parsing_xml_from_the_net_-_using_the_saxparser-t353.html

I am trying to get these options to work in conjunction with something similar to what you have done in your project.

I want the project to open, and check an external XML sheet on the web. If the AppVersion on the remote XML file is higher than the version in the database on the app, I want it to give the user the option of downloading the new content, or waiting until later. I am still new to Android development, and want to be able to provide dynamic content to my app users when they are ready for it.

I know that this method will also re-write the database that is stored in the app. I want to be able to add more features to the app that will keep notes and other bits when they update the content of the application.

I want it to perform this check every time the application is launched. But it will only ask for them to update if the version numbers are different. Please assist me with this.

Thank you very much!
nitemovz
Junior Developer
Junior Developer
 
Posts: 11
Joined: Sat Dec 19, 2009 6:44 pm

Postby achie1266 » Sun Dec 20, 2009 12:28 am

yeah,

I t was a big deal for me too the time i starting working on android[like 40 days ago]
But now i am quite comfortable.

I too tried to follow the tutorial and it almost works except I had to use stringbuffer to append characters.

Anyway coming to your question you should be able to set an attribute on the root of the amd file and check it each time the user opens the app[it might be much user friendly to do it like only once a week or so if the data is does not change a lot]
Once you start parsing the xml just check for that attribute on the root and if a new version is available tell the user using a dialog or menu which you use to show the download options..

I understand that when we are starting from new, what I have said may not explain you everything but try starting to parsethe xml using those tutorials and see if you can download the data first. once that part is done you will be more comfortable regarding how to handle the updates.
good luck.
achie
User avatar
achie1266
Master Developer
Master Developer
 
Posts: 223
Joined: Mon Nov 09, 2009 10:56 pm
Location: Denver

Postby nitemovz » Sun Dec 20, 2009 2:03 am

I have been trying to use the different tutorials that I listed above, but they do not seem to be wanting to work like they said they would.

I get an INTERNET error when I try to use the one for parsing the XML file from the internet. I don't know what is causing this.

Also, the use of a list view, is not anything that I am used to working with. I do not know how to populate one, and the Post about "Putting XML to a Clickable ListView" does not give much information about how to go about it at all.
nitemovz
Junior Developer
Junior Developer
 
Posts: 11
Joined: Sat Dec 19, 2009 6:44 pm

Top

Postby nitemovz » Sun Dec 20, 2009 3:01 am

The exact error that I get when trying to use the one tutorial about parsing XML from the net is, as follows:

Error: Permission denied (maybe missing INTERNET permission)
nitemovz
Junior Developer
Junior Developer
 
Posts: 11
Joined: Sat Dec 19, 2009 6:44 pm

Postby achie1266 » Sun Dec 20, 2009 9:20 am

That is because we need to authorize the application to connect to the internet.

we do it by allowing it to connect to the internet in this way
Syntax: [ Download ] [ Hide ]
Using xml Syntax Highlighting
  1. <uses-permission android:name="android.permission.INTERNET" />
Parsed in 0.000 seconds, using GeSHi 1.0.8.4
This line should be included in your application manifest.xml file

You may add it after the application closing tag.
achie
User avatar
achie1266
Master Developer
Master Developer
 
Posts: 223
Joined: Mon Nov 09, 2009 10:56 pm
Location: Denver

Postby nitemovz » Sun Dec 20, 2009 5:50 pm

Thank you for letting me know about that tag/permission set. I had no idea that I had to set permissions for the application to access the internet.

It works now, to a point. It tells me that the emulator cannot resolve the hostname. I did some searching, and it says that the emulator doesn't resolve the hostname but can use IP addresses. That is not true either.

I currently do not have an Android phone to try building my application to. Are there any other fixes/permissions that I should know about?

The only other bit of information that I am having issues with is the ability to get the ID of the list item that the user is clicking. Depending on the list item ID, depends on what view it needs to go to. How do I go about doing this?
nitemovz
Junior Developer
Junior Developer
 
Posts: 11
Joined: Sat Dec 19, 2009 6:44 pm

Postby achie1266 » Sun Dec 20, 2009 7:09 pm

I do not know what you mean by the resolving URL error on the emulator.
It will help if you can post snippets of the related code where you get error and also the logcat message at that error. It gives you the exact message of whats happening in most cases.

Regarding the click listener, you need to implement onListItemClick
problem_with_onlistitemclick_when_using_multiple_listviews-t8690.html
achie
User avatar
achie1266
Master Developer
Master Developer
 
Posts: 223
Joined: Mon Nov 09, 2009 10:56 pm
Location: Denver

Postby nitemovz » Sun Dec 20, 2009 7:31 pm

I got it to work the way I wanted. It downloads the XML file, and parses it to a TextView.

I need a better way to parse it to a ListView. I am still trying to figure out hashTables, and hashMaps. Maybe those will work for me. I don't think they will, but I must give them a try.

I am trying to figure out if my best bet would be to use the download of the XML file, and parse that into a database, and then from there, use a database to populate the rest of the app. I am going to be creating a repository for the development of the application. Hopefully by posting it as an open source project, and getting other users input and development on it, I will be able to produce it faster, and get more out of it.

Would you like to be part of the development team?
nitemovz
Junior Developer
Junior Developer
 
Posts: 11
Joined: Sat Dec 19, 2009 6:44 pm

Postby achie1266 » Sun Dec 20, 2009 8:47 pm

nitemovz wrote:I got it to work the way I wanted. It downloads the XML file, and parses it to a TextView.

I need a better way to parse it to a ListView. I am still trying to figure out hashTables, and hashMaps. Maybe those will work for me. I don't think they will, but I must give them a try.

I am trying to figure out if my best bet would be to use the download of the XML file, and parse that into a database, and then from there, use a database to populate the rest of the app. I am going to be creating a repository for the development of the application. Hopefully by posting it as an open source project, and getting other users input and development on it, I will be able to produce it faster, and get more out of it.

Would you like to be part of the development team?


I did not understand what you meant by being able to parse a list view. Did you mean that you want to parse the xml and display it in a listView?
Right now I am downloading xml , parsing it and pusing it into a database for my application but I too need to know how to make it even better and faster.

And regarding being part of the development team. Thanks for the offer. It sounds good and sure I will give it a try if you can send me the requirements and info regarding your project.
achie
User avatar
achie1266
Master Developer
Master Developer
 
Posts: 223
Joined: Mon Nov 09, 2009 10:56 pm
Location: Denver

Postby nitemovz » Sun Dec 20, 2009 9:00 pm

Sorry for my bad wording.

I meant download the XML, parse it, and display it as a list view. I am beginning to think that downloadingthe content and placing it in a database is going to be my best bet. Have the application perform a check every couple of launches or even every launch when the splash screen is shown. Have it check for version updates on the XML file and then compare to the version in the database.

I just don't want it to overrite all of the database each time. Basically have it only download the new content when it "updates".

Basically perform a simple check on a variable set in a settings XML file on the phone for the application.

There are other features that I would like to eventually implement, but my tasks must start with simple first. Once I get the information to come out of the XML file and into database, I will be on my way. From the database I need the information to be pulled out and formatted into a ListView and then depending on what item is selected, change the contents of the ListView to show other bits of information.

Once again, I apologize for my terrible wording of things. If you need more clarification, please do not be afraid to ask.
nitemovz
Junior Developer
Junior Developer
 
Posts: 11
Joined: Sat Dec 19, 2009 6:44 pm

Postby achie1266 » Sun Dec 20, 2009 9:19 pm

nitemovz wrote:Sorry for my bad wording.

I meant download the XML, parse it, and display it as a list view. I am beginning to think that downloadingthe content and placing it in a database is going to be my best bet. Have the application perform a check every couple of launches or even every launch when the splash screen is shown. Have it check for version updates on the XML file and then compare to the version in the database.

I just don't want it to overrite all of the database each time. Basically have it only download the new content when it "updates".

Basically perform a simple check on a variable set in a settings XML file on the phone for the application.

There are other features that I would like to eventually implement, but my tasks must start with simple first. Once I get the information to come out of the XML file and into database, I will be on my way. From the database I need the information to be pulled out and formatted into a ListView and then depending on what item is selected, change the contents of the ListView to show other bits of information.

Once again, I apologize for my terrible wording of things. If you need more clarification, please do not be afraid to ask.

hmm its ok.
I am also doing the same for my data, Downloading it when the application is launched for the first time after user clicks on Download data. Once the data is successfully downloaded they will have the navigation screen available.

Yes it is meaningful to download only the new data. But I still did not figure out that part.
And you did not give me any info regarding the project itself. What is the project about and what does it do?
achie
User avatar
achie1266
Master Developer
Master Developer
 
Posts: 223
Joined: Mon Nov 09, 2009 10:56 pm
Location: Denver

Postby nitemovz » Sun Dec 20, 2009 9:32 pm

The project is a reference collection. I am making a reference app for scripture. It will include the scripture content as well as study guides and other resources used by the church. I want to make it so that I can add new content and materials as they are printed and released.

It is a very simple idea and plan.
nitemovz
Junior Developer
Junior Developer
 
Posts: 11
Joined: Sat Dec 19, 2009 6:44 pm

Top
Next

Return to Advanced Tutorials

Who is online

Users browsing this forum: No registered users and 4 guests