title: How to send over data from database to wear?
body: <p>My program requires me to send data from a database in the phone over to android wear of the same program when a <code>Button</code> is clicked. I have been trying to send it by converting the database to <code>JSON</code> and then taking those datas from the <code>JSON</code> recieved and entering them in the database with the same name (but has an extra record). Sending the <code>JSON</code> data to the watch works perfectly fine but when it comes to receiving the data on the watch, the watch never receives it. I have tried several methods to try and see if the watch receives anything but so far nothing. I haven't implemented a <code>DataMap</code> for it like some of Google's tutorial does but I am not sure how to do so. My code below shows exactly what I have done so far:</p>
  
  <p>Phone - MainPhoneApp.java's onCreate method:</p>
  
  <pre><code>final Button updateWearDatabaseButton = (Button) findViewById(R.id.updateWearDatabaseButton);
          updateWearDatabaseButton.setOnClickListener(new View.OnClickListener() {
              public void onClick(View v) {
                  DatabaseToJSON dbJSON = new DatabaseToJSON(MainPhoneApp.this);
                  try {
                      JSONArray json = dbJSON.getJSON();
                      new SendToDataLayerThread(DatabaseHelper.DB_DIRECTORY, json.toString()).start();
                      Toast.makeText(getApplicationContext(), "Wear Database Updated", Toast.LENGTH_SHORT).show();
                  } catch (JSONException e) {
                      e.printStackTrace();
                  }
              }
          });
  </code></pre>
  
  <p>Phone - DatabaseToJSON.java:</p>
  
  <pre><code>package com.jawad.wifihotspotfinder;
  
  import android.content.Context;
  import android.database.Cursor;
  import android.database.sqlite.SQLiteDatabase;
  import android.util.Log;
  
  import org.json.JSONArray;
  import org.json.JSONException;
  import org.json.JSONObject;
  
  public class DatabaseToJSON {
      DatabaseHelper dbhandler;
  
      public DatabaseToJSON(Context context) {
          dbhandler = new DatabaseHelper(context);
      }
  
      public JSONArray getJSON() throws JSONException {
          String myPath = DatabaseHelper.DB_DIRECTORY; // Set path to your database
          String myTable = DatabaseHelper.DB_TABLE; // Set name of your table
  
          SQLiteDatabase myDataBase = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READONLY);
          String searchQuery = "SELECT  * FROM " + myTable;
          Cursor cursor = myDataBase.rawQuery(searchQuery, null );
  
          JSONArray resultSet = new JSONArray();
  
          cursor.moveToFirst();
          while (!cursor.isAfterLast()) {
  
              int totalColumn = cursor.getColumnCount();
              JSONObject rowObject = new JSONObject();
              for( int i=0 ;  i&lt; totalColumn ; i++ ) {
                  if( cursor.getColumnName(i) != null ) {
                      try {
                          if( cursor.getString(i) != null )
                          {
                              Log.d("TAG_NAME", cursor.getString(i));
                              rowObject.put(cursor.getColumnName(i) ,  cursor.getString(i) );
                          }
                          else
                          {
                              rowObject.put( cursor.getColumnName(i) ,  "" );
                          }
                      } catch( Exception e ) {
                          Log.d("TAG_NAME", e.getMessage()  );
                      }
                  }
              }
              resultSet.put(rowObject);
              cursor.moveToNext();
          }
          cursor.close();
          Log.d("TAG_NAME", resultSet.toString());
          return resultSet;
      }
  }
  </code></pre>
  
  <p>Wear - DataLayerListenerService.java:</p>
  
  <pre><code>package com.jawad.wifihotspotfinder;
  
  import android.content.ContentValues;
  import android.database.SQLException;
  import android.database.sqlite.SQLiteDatabase;
  import android.util.Log;
  import android.widget.Toast;
  
  import com.google.android.gms.common.ConnectionResult;
  import com.google.android.gms.common.api.GoogleApiClient;
  import com.google.android.gms.wearable.MessageEvent;
  import com.google.android.gms.wearable.Node;
  import com.google.android.gms.wearable.Wearable;
  import com.google.android.gms.wearable.WearableListenerService;
  
  import org.json.JSONArray;
  import org.json.JSONException;
  import org.json.JSONObject;
  
  import java.io.IOException;
  import java.util.concurrent.TimeUnit;
  
  public class DataLayerListenerService extends WearableListenerService {
  
      public final String TAG = "NodeListener";
  
      @Override
      public void onPeerConnected(Node peer) {
          super.onPeerConnected(peer);
  
          String id = peer.getId();
          String name = peer.getDisplayName();
  
          Log.d(TAG, "Connected peer name &amp; ID: " + name + "|" + id);
      }
  
      @Override
      public void onMessageReceived(MessageEvent messageEvent) {
          GoogleApiClient googleApiClient = new GoogleApiClient.Builder(this).addApi(Wearable.API).build();
          ConnectionResult connectionResult = googleApiClient.blockingConnect(30, TimeUnit.SECONDS);
          if(!connectionResult.isSuccess()) {
              Log.e("Error", "Failed to connect to Google API Client");
              return;
          }
  
          if (messageEvent.getPath().equals(DatabaseHelperWear.DB_DIRECTORY)) {
              final String message = new String(messageEvent.getData());
              Log.v("myTag", "Message path received on watch is: " + messageEvent.getPath());
              Log.v("myTag", "Message received on watch is: " + message);
  
              try {
                  DatabaseHelperWear myDbHelper;
                  myDbHelper = new DatabaseHelperWear(this);
  
                  try {
                      myDbHelper.createDataBase();
                  } catch (IOException io) {
                      throw new Error("Unable to create database");
                  }
  
                  try {
                      myDbHelper.openDataBase();
                  } catch (SQLException sqle) {
                      throw new Error("Unable to open database");
                  }
  
                  SQLiteDatabase db = myDbHelper.getWritableDatabase();
  
                  try {
                      JSONArray jArray = new JSONArray(message);
                      for (int i = 0; i &lt; jArray.length(); i++) {
                          JSONObject json_data = jArray.getJSONObject(i);
                          ContentValues initialValues = new ContentValues();
                          initialValues.put("_id", json_data.getString("_id"));
                          initialValues.put("Type", json_data.getString("Type"));
                          initialValues.put("Postcode", json_data.getString("Postcode"));
                          initialValues.put("Latitude", json_data.getString("Latitude"));
                          initialValues.put("Longitude", json_data.getString("Longitude"));
  
                          String where = "_id = ?";
                          String[] whereArgs = new String[] {String.valueOf(i)};
                          db.update(DatabaseHelperWear.DB_TABLE, initialValues, where, whereArgs);
                      }
                  } catch (JSONException e) {
                      Log.e("log_tag", "Error parsing data " + e.toString());
                  }
                  myDbHelper.close();
              } catch (Exception ex) {
                  ex.printStackTrace();
              }
              Toast.makeText(getApplicationContext(), "Database updated", Toast.LENGTH_SHORT).show();
          }
          else {
              super.onMessageReceived(messageEvent);
          }
      }
  }
  </code></pre>
  
  <p><strong>UPDATE</strong></p>
  
  <p>I forgot to add the <code>AndroidManifest.xml</code> part.</p>
  
  <pre><code>&lt;service android:name=".NodeListenerService"&gt;
      &lt;intent-filter&gt;
                  &lt;action android:name="com.google.android.gms.wearable.BIND_LISTENER" /&gt;
      &lt;/intent-filter&gt;
  &lt;/service&gt;
  </code></pre>