2015-04-06 16 views
6

Android Wear için İzle Yüzü oluşturmaya başladım. Hemen hemen her şeyi uyguladım ve şimdi yüzünde telefonun bataryasını göstermek istiyorum. Araştırmamdan sonra anladığım kadarıyla bu sadece Mesaj veya Veri Katmanı API'sı ile yapılabilir. Bu yüzden kendi alanında çalışmaya başladım ama başından beri bir sorunla karşı karşıyayım. Google Api İstemcisine bağlanamıyorum.NullPointerException GoogleApiClient örneği oluştururken

ben "giymek" altında iki sınıf var - Bana yarattığı izlemek (servis) ve bir jenerik: biri böyle

public class BatteryActivity extends Activity { 

    GoogleApiClient mGoogleApiClient = new GoogleApiClient.Builder(this) 
     .addConnectionCallbacks(new ConnectionCallbacks() { 
      @Override 
      public void onConnected(Bundle connectionHint) { 
       Log.i("", "onConnected: " + connectionHint); 
       // Now you can use the Data Layer API 
      } 
      @Override 
      public void onConnectionSuspended(int cause) { 
       Log.i("", "onConnectionSuspended: " + cause); 
      } 
     }) 
     .addOnConnectionFailedListener(new OnConnectionFailedListener() { 
      @Override 
      public void onConnectionFailed(ConnectionResult result) { 
       Log.i("", "onConnectionFailed: " + result); 
      } 
     }) 
       // Request access only to the Wearable API 
     .addApi(Wearable.API) 
     .build(); 
} 

Whan ben sadece örnek olarak: BatteryActivity batteryActivity = new BatteryActivity(); bu hatayı alıyorum:

java.lang.NullPointerException: Attempt to invoke virtual method 'android.os.Looper android.content.Context.getMainLooper()' on a null object reference

Örneğim, mAogle API'sının nasıl boş olduğunu anlamıyorum. Bir not olarak - bu yalnızca Google dokümanlarına dayanmaktadır - https://developer.android.com/training/wearables/data-layer/messages.html

+1

Ben ana saat yüzü hizmetine bütün mantık taşıma sonunda Etkinlik sınıfını – Nabin

cevap

6

Sanırım, GoogleTecCentent'i onCreate yöntemiyle oluşturmalısınız.

public class BatteryActivity extends Activity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_layout); 

     GoogleApiClient mGoogleApiClient = new GoogleApiClient.Builder(this) 
      .addConnectionCallbacks(new ConnectionCallbacks() { 
       @Override 
       public void onConnected(Bundle connectionHint) { 
        Log.i("", "onConnected: " + connectionHint); 
        // Now you can use the Data Layer API 
       } 
       @Override 
       public void onConnectionSuspended(int cause) { 
        Log.i("", "onConnectionSuspended: " + cause); 
       } 
      }) 
      .addOnConnectionFailedListener(new OnConnectionFailedListener() { 
       @Override 
       public void onConnectionFailed(ConnectionResult result) { 
        Log.i("", "onConnectionFailed: " + result); 
       } 
      }) 
     // Request access only to the Wearable API 
     .addApi(Wearable.API) 
     .build(); 
    } 
} 
0

İdeal bu zaman uyumsuz görev kullanılarak yapılması gerekmektedir: Kodunuz böyleolacağını

private class WatchTask extends AsyncTask<String, Void, Void> { 
    protected void doInBackground(String text) { 

Veya hızlı bir düzeltme için, sadece yanlış yerde bu kullanıyor olabilir https://developer.android.com/google/auth/api-client.html#Communicating:

: En onCreate kullanım getActivity() veya this yılında

bu hat için bir Context kullanmak

Ben de kontrol öneririz: http://developer.android.com/training/wearables/data-layer/index.html

Gerçekten bir etkinliği kullanmak istiyorsanız, o zaman böyle bir şey görünecektir: Uygun bağlam sağlamak değil de olurdu hep

public class MainActivity extends Activity implements 
     GoogleApiClient.ConnectionCallbacks, 
     GoogleApiClient.OnConnectionFailedListener, MessageApi.MessageListener { 

    private GoogleApiClient googleClient; // A google client for Wear interaction 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     // Build a new GoogleApiClient that includes the Wearable API 
     googleClient = new GoogleApiClient.Builder(this) 
       .addApi(Wearable.API) 
       .addConnectionCallbacks(this) 
       .addOnConnectionFailedListener(this) 
       .build(); 
    } 

    @Override 
    public void onConnected(Bundle connectionHint) { 
     Wearable.MessageApi.addListener(googleClient, this); 
    } 

    @Override 
    public void onMessageReceived(MessageEvent messageEvent) { 
     //Same onMessageReceived as in WearableListenerService 
    } 

    @Override 
    public void onConnectionFailed(ConnectionResult connectionResult) { } 
    @Override 
    public void onConnectionSuspended(int i) { } 
} 
+0

örneğini vermeyin. Şimdilik çalışıyor, ancak sınıf korkunç görünüyor. Şimdi çalışmakta olduğu gibi nasıl taşıyabileceğimi göreceğim. Yardım için herkese teşekkürler! –

1

. Böyle bir bağlam Pass:

mGoogleApiClient = new GoogleApiClient.Builder(context) // Pass context here 
       .addConnectionCallbacks(this) 
       .addOnConnectionFailedListener(this) 
       .addApi(LocationServices.API).build();