Sunteți pe pagina 1din 25

ANDROID TO WINDOWS PHONE 8: WORKING WITH DATA

Version 1.0 April 5, 2013


Adam Grocholski
Technical Evangelist | Microsoft
@codel8r | http://thinkfirstcodelater.com

Contents
Introduction .................................................................................................................................................. 3
Working with Key-Value Pairs ....................................................................................................................... 4
Creating an Application Setting ................................................................................................................ 4
Reading an Application Setting ................................................................................................................. 5
Deleting an Application Setting ................................................................................................................ 5
Working with Files......................................................................................................................................... 6
Creating a File ........................................................................................................................................... 6
Reading a File ............................................................................................................................................ 6
Deleting a File............................................................................................................................................ 7
Working with a SQL Database ....................................................................................................................... 8
Installing SQLite ........................................................................................................................................ 8
Adding a Reference to SQLite ................................................................................................................. 10
Getting Helper Classes ............................................................................................................................ 11
Using SQLite ............................................................................................................................................ 18
Creating a Table .................................................................................................................................. 18
Inserting a Record ............................................................................................................................... 19
Retrieving Records .............................................................................................................................. 19
Updating a Record .............................................................................................................................. 22
Deleting a Record ................................................................................................................................ 22
Conclusion ................................................................................................................................................... 24
Appendix A: Additional Resources .............................................................................................................. 25

Android to Windows Phone 8 Working with Data

Page | 2

Introduction
Welcome to Windows Phone 8 application development! This article assumes you are coming to
Windows with experience developing applications for Android. The purpose of this article is to help you
understand the various ways you can work with data in Windows Phone 8 which include:

Key-Value Sets
Files
SQL Database

Along the way youll see some Android Hints that will help make it easier for you to transition your
existing skills to the Windows platform. Youll also see some Visual Studio Tips to make you more
productive in your Windows development environment.
This article assumes that you are coming to Windows with experience developing Android applications.
The article also assumes that you have set up your Windows 8 development environment and that you
have built your first application. If you havent done either of these things it is recommended that you
work through the Android to Windows Phone 8 Building Your First App tutorial.
Good luck!

Android to Windows Phone 8 Working with Data

Page | 3

Working with Key-Value Pairs


In Android development, if you have a small collection of key-value pairs that you want to persist from
session to session you use the SharedPreferences APIs. In Windows Phone development these key-value
pairs are often referred to as Application Settings.
To save or retrieve data as a key-value pair in Windows Phone 8 you use the IsolatedStorageSettings
class. The IsolatedStorageSettings class is nothing more than a dictionary that enables you to store any
serializable object, such as a string, and is ideally suited for saving small pieces of data. Data stored with
the IsolatedStorageSettings class is persisted in the apps local folder when the app is closed or
deactivated and automatically populated with previously persisted data when the app is launched.

ANDROID HINT
The SharedPreferences class in Android is similar to the IsolatedStorageSettings class in Windows
Phone apps.

It is important to note that once an application is removed, all of its data stores, including those
associated with settings are deleted from the device.

WINDOWS PHONE HINT


Since application settings are tied to the lifetime of the app on a device, you should not use
application settings to store information your users might thing as valuable or irreplaceable. You
should consider using the users libraries or SkyDrive for permanent data.
Lets now look at how you write and read application settings.

Creating an Application Setting


To create a Shared Preference in Android a key of Name and a value of Me you would write code similar
to the following:
SharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPref.edit();
editor.putString("Name", "Me");
editor.commit();

ANDROID HINT
In Android you can create preference files using MODE_WORLD_READABLE and
MODE_WORLD_WRITEABLE which allows other apps that know your file identifier to access you
data. In Windows Phone applications are sandboxed and their settings cannot be accessed by other
apps.

Android to Windows Phone 8 Working with Data

Page | 4

To create a similar key-value pair in a Windows Phone app you would write the following:
var localSettings = IsolatedStorageSettings.ApplicationSettings;
localSettings.Add("Name", "Me");

Reading an Application Setting


To retrieve a Shared Preference in Android with a key of Name and a default value of Me (i.e. the value
returned if the key is not found) you would write the following:
SharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE);
string nameValue = sharedPref.getString("Name", "Me");

To perform a similar operation on the settings store in a Windows Phone app you would write:
var localSettings = IsolatedStorageSettings.ApplicationSettings;
string nameValue = (string) localSettings["Name"];

Deleting an Application Setting


To remove a Shared Preference in Android you use the following code:
SharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPref.edit();
editor.remove("Name");
editor.commit();

To delete a setting from a Windows Phone 8 app you would use:


var localSettings = IsolatedStorageSettings.ApplicationSettings;

localSettings.Remove("Name");

WINDOWS PHONE HINT


Do not be tempted to use the LocalSettings and/or RoamingSettings properties of the
ApplicationData class in place of the ApplicationSettings property of the IsolatedStorageSettings
class. While the APIs are available, they have not been implemented in Windows Phone 8. An
exception will be thrown if they are called.

Android to Windows Phone 8 Working with Data

Page | 5

Working with Files


Windows Phone allows you to create, read, and delete files on the devices internal storage.

Creating a File
To create a file called hello.txt in Android, you would write code similar to the following:
String filename = "hello.txt";
String string = "Hello world!";
FileOutputStream outputStream;
outputStream = openFileOutput(filename, Context.MODE_PRIVATE);
outputStream.write(string.getBytes());
outputStream.close();

ANDROID HINT
In Android to ensure other apps cant read your apps files you have to set its file mode
MODE_PRIVATE. Windows Phone apps run in a sandbox. As a result apps cannot access one anothers
files.
To create the same file in a Windows Phone app you leverage the StorageFile class and the Stream class.
string text = "Hello world!";
byte[] fileBytes = System.Text.Encoding.UTF8.GetBytes(text.ToCharArray());
StorageFile file = await
Windows.Storage.ApplicationData.Current.LocalFolder.CreateFileAsync("Hello.txt",
CreationCollisionOption.ReplaceExisting);
using (var stream = await file.OpenStreamForWriteAsync())
{
stream.Write(fileBytes, 0, fileBytes.Length);
}

WINDOWS PHONE HINT


Do not be tempted to use the RoamingFolder and/or TemporaryFolder properties of the
ApplicationData class in place of the LocalFolder property. While the APIs are available to call, they
have not been implemented in Windows Phone 8. An exception will be thrown if they are called.

Reading a File
To read the content of the hello.txt file in Android you leverage the BufferedReader class.
String filename = "hello.txt";
BufferedReader reader = new BufferedReader(new FileReader(filename));
String currentLine = null;
Android to Windows Phone 8 Working with Data

Page | 6

StringBuilder builder = new StringBuilder();


while((currentLine == reader.readLine()) != null){
builder.append(currentLine);
buidler.append("\n");
}
String text = builder.toString();

In Windows Phone you use the StreamReader class.


string filename = "Hello.txt";
StorageFolder local = Windows.Storage.ApplicationData.Current.LocalFolder;
Stream stream = await local.OpenStreamForReadAsync(filename);
using (StreamReader reader = new StreamReader(stream))
{
string text = reader.ReadToEnd();
}

Deleting a File
To delete a file called hello.txt in Android you simply instantiate a File object using the path to the file
and call its delete method.
String filename = "hello.txt";
File file = new File(filename);
file.delete();

In Windows Phone you do something very similar. The main difference being you first need to get a
reference to the folder the file is in.
string filename = "Hello.txt";
StorageFolder local = Windows.Storage.ApplicationData.Current.LocalFolder;
StorageFile file = await local.GetFileAsync(filename);
await file.DeleteAsync();

Android to Windows Phone 8 Working with Data

Page | 7

Working with a SQL Database


There are times when key-value pairs and/or files wont meet your need for data storage. Specifically,
when youre dealing with structured data that is repeated, such as events on a calendar. For this type of
information youll want to use a relational store. This relational store is typically a SQL database. Both
Android and Windows Phone 8 support using the SQLite relational database engine. This section
assumes you have familiarity working with SQLite on Android.

Installing SQLite
The first thing youll need to do is install the SQLite for Windows Phone apps. This can be done by
downloading the SQLite for Windows Phone package
1. In Visual Studio, click the Tools menu, then click Extensions and Updates

2. In the tree on the left of the Extensions and Updates window, click Online, then click Visual
Studio Gallery.
3. Next, type sqlite in the search box in the upper right hand corner and press Enter.
4. The SQLite for Windows Phone package should appear. Click Download.

Android to Windows Phone 8 Working with Data

Page | 8

5. You will then be prompted to click Install. Do so.

6. Once the package is installed you will need to restart Visual Studio

Android to Windows Phone 8 Working with Data

Page | 9

ANDROID HINT
The SQLite for Windows Package package is similar to the android.database.sqlite package.

Adding a Reference to SQLite


Now that SQLite is installed you need to add a reference to it from you project.
1. Right click the References folder in your Windows Phone project and click Add Reference

2. In the tree on the left hand side of the Reference Manager windows, expand the Windows
Phone and the Extensions nodes.
3. Then select both the SQLite for Windows Phone and click OK.

4. You should now see the extension appear under the References folder for you project.

Android to Windows Phone 8 Working with Data

Page | 10

Getting Helper Classes


The last thing youll want to do is obtain some helper classes that make working with SQLite a bit easier.
There are a number available for Windows Phone applications. The ones I prefer to use come from the
sqlite-net library.
The sqlite-net library can be obtained from NuGet via the following steps
VISUAL STUDIO TIP
NuGet is a free and open source package manager for the .NET Framework.
1. Right click on the References folder in you Windows Phone project and click Manage NuGet
Packages

2. Expand the Online node in the left hand side of the Window.
3. Enter sqlite in the search box in the upper right hand side of Window and press Enter.
4. Select sqlite-net and click Install.

Android to Windows Phone 8 Working with Data

Page | 11

5. Two source files will be added to your project: SQLite.cs and SQLiteAsync.cs.

6. If you look in your Error List youll see a number of errors. This is due the fact that sqlite-net is
dependent on csharp-sqlite which has not been ported to Windows Phone 8.

Android to Windows Phone 8 Working with Data

Page | 12

7. To work around this youll need to use the sqlite-net-wp8 native C++ project. Youll first need to
go to the projects repository on github and download the zip version of the repository.

8. Right-click the downloaded zip file, click Properties, click Unblock, and click OK.

9. Unzip the content.


10. In the Solution Explorer in Visual Studio, right-click the solution and choose Add, then choose
Existing Project.

Android to Windows Phone 8 Working with Data

Page | 13

11. In the Add Existing Project dialog, brose to the location where you unzipped the content in step,
select the Sqlite.vcxproj file, and click Open.

Android to Windows Phone 8 Working with Data

Page | 14

12. You should now see the Sqlite project in your solution.

13. You now need to add a reference to the Sqlite project to your Windows Phone project. Rightclick the References folder of your Windows Phone project and click Add

Android to Windows Phone 8 Working with Data

Page | 15

14. In the Reference Manager dialog select Solution from the tree on the left-had side, select
Projects.
15. Check the box next to the Sqlite project and click OK.

16. The last step is to add a compiler directive to the Windows Phone project. Right-click the
Windows Phone project in Solution Explorer and click Properties

Android to Windows Phone 8 Working with Data

Page | 16

17. Click Build and add the following to the conditional compilation symbols text box:
;USE_WP8_NATIVE_SQLITE

Android to Windows Phone 8 Working with Data

Page | 17

18. Build your solution by pressing F6. You should now see a Build succeeded message and no errors
in the Error List.

Using SQLite
In the last part of this section well look at how to perform some basic tasks with SQLite in your
Windows Phone application.

Creating a Table
The first step youll need to take is to create a table that your application will use. For the sake of
example, lets say your application is storing blog posts in a SQLite table. Using the sqlite-net package
you obtained in the last section, you can define the table by simply writing a class.
public class Post
{
[PrimaryKey]
public int Id { get; set; }
public string Title { get; set; }
public string Text { get; set; }
}

The PrimaryKey attributes come from the sqlite-net package. There are a number of attributes that the
package provides that allow you to define the tables schema.
Android to Windows Phone 8 Working with Data

Page | 18

Once the table is defined it needs to be created, which can be done like this:
private async void CreateTable()
{
SQLiteAsyncConnection conn = new SQLiteAsyncConnection("blog");
await conn.CreateTableAsync<Post>();
}

The blog parameter in the constructor for the SQLiteAsyncConnection class simply specifies the path
to the SQLite database.
The Post type specified in the call to the CreateTableAsync method specifies the type of table that
should be created. This maps back to the Post class created earlier.

ANDROID HINT
In Android you would create a table that extends the SQLiteOpenHelper class that contains the
following method:
public void onCreate(SQLiteDatabase db) {
db.execSQL("CREATE TABLE Post ( Id INTEGER PRIMARY KEY, Title TEXT, Text TEXT
)");
}

Inserting a Record
Now that the table is created, records can be added to it with the following code:
public async void InsertPost(Post post)
{
SQLiteAsyncConnection conn = new SQLiteAsyncConnection("blog");
await conn.InsertAsync(post);
}

ANDROID HINT
In Android you could insert the record with the following code:
public void insertPost(SQLiteDatabase db, String title, String text ) {
ContentValues values = new ContentValues();
values.put("Title", title);
values.put("Text", text);
long newRowId;
newRowId = db.insert("Post", null, values);
}

Retrieving Records
Retrieve all records from the table with the following:
Android to Windows Phone 8 Working with Data

Page | 19

public async Task<List<Post>> GetPosts()


{
SQLiteAsyncConnection conn = new SQLiteAsyncConnection("blog");
var query = conn.Table<Post>();
var result = await query.ToListAsync();
return result;
}

ANDROID HINT
In Android you could return a Cursor object containing all records using the following:
public Cursor getPosts(SQLiteDatabase db){
String[] projection = {"Id", "Title", "Text" };
Cursor c = db.query(
"Post",
projection,
null,
null,
null,
null,
null
);
return c;
}

Retrieve a single record from the table with the following:


public async Task<Post> GetPost(int id)
{
SQLiteAsyncConnection conn = new SQLiteAsyncConnection("blog");
var query = conn.Table<Post>().Where(x => x.Id == id);
var result = await query.ToListAsync();
return result.FirstOrDefault();
}

Android to Windows Phone 8 Working with Data

Page | 20

ANDROID HINT
The following will retrieve a single record in Android:
public Cursor getPost(SQLiteDatabase db, Integer id){
String[] projection = {"Id", "Title", "Text" };
String selection = "Id LIKE ?";
String[] selelectionArgs = { String.valueOf(id) };
Cursor c = db.query(
"Post",
projection,
selection,
selectionArgs,
null,
null,
null
);
return c;
}

Android to Windows Phone 8 Working with Data

Page | 21

Updating a Record
Updating a record requires the following code:
public async void UpdatePost(Post post)
{
SQLiteAsyncConnection conn = new SQLiteAsyncConnection("blog");
await conn.UpdateAsync(post);
}

ANDROID HINT
In Android you could update the record with the following code:
public void updatePost(SQLiteDatabase db, Integer id, String title, String text ) {
ContentValues values = new ContentValues();
values.put("Title", title);
values.put("Text", text);
String selection = "Id LIKE ?";
String[] selelectionArgs = { String.valueOf(id) };
int count = db.update(
"Post,
values,
selection,
selectionArgs);
}

Deleting a Record
A record can be delete with the following:
public async void DeletePost(Post post)
{
SQLiteAsyncConnection conn = new SQLiteAsyncConnection("blog");
await conn.DeleteAsync(post);
}

Android to Windows Phone 8 Working with Data

Page | 22

ANDROID HINT
In Android you could delete the record with the following code:
public void deletePost(SQLiteDatabase db, Integer id ) {
String selection = "Id LIKE ?";
String[] selelectionArgs = { String.valueOf(id) };
db.delete("Post", selection, selectionArgs);
}

Android to Windows Phone 8 Working with Data

Page | 23

Conclusion
In this article you learned about the various ways you can work with data in Windows Phone 8 including:

Key-Value Sets
Files
SQL Database

To learn more about building Windows Phone apps continue to follow this series.

Android to Windows Phone 8 Working with Data

Page | 24

Appendix A: Additional Resources


The table bellows maps Android developer resources from http://developer.android.com to similar
Windows Phone 8 content on http://msdn.microsoft.com.
ANDROID RESOURCES
Saving Data
Saving Key-Value Sets

Saving Files

Saving Data in SQL Databases

WINDOWS PHONE 8 RESOURCES


Application Data Overview
IsolatedStorageSettings class
Quickstart: Working with settings in Windows Phone
How to create a Settings page for Windows Phone
Quickstart: Working with files and folders in Windows Phone 8
Local folder best practices for Windows Phone
Reading from the SD card on Windows Phone 8
How to use the Isolated Storage Explorer tool for Windows Phone
Local database for Windows Phone
SQLite for Windows Phone

Android to Windows Phone 8 Working with Data

Page | 25

S-ar putea să vă placă și