Я пытаюсь отправить данные с моего телефона на мой телефон через DataLayer.Код для мобильного еще не завершен, я должен закончить писать его, прежде чем я отправлю вещи на DataLayer с носимого устройства?
Прямо сейчас, когда я пытаюсь сделать mDataClient.putDataItem(putDataReq)
, я получаю эту ошибку:java.lang.NullPointerException: Attempt to invoke virtual method 'com.google.android.gms.tasks.Task com.google.android.gms.wearable.DataClient.putDataItem(com.google.android.gms.wearable.PutDataRequest)' on a null object reference
sendData(data)
вызывается другим классом, и с этим не должно быть проблем, потому что у меня отладочные журналы подтверждают, что он работает.
Я пытался использовать GoogleApiClient.Builder(this).addApi(Wearable.API)
и вместо этого отправляет вещи через Wearable.DataApi.putDataItem(mGoogleApiClient, putDataReq)
, но даже mGoogleApiClient возвращает нулевое значение, когда я это делаю.
Это мой файл build.gradle:
apply plugin: 'com.android.application'
android {
compileSdkVersion 28
defaultConfig {
applicationId "com.example.watchsleep"
minSdkVersion 23
targetSdkVersion 28
versionCode 1
versionName "1.0"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'com.google.android.support:wearable:2.4.0'
implementation 'com.google.android.gms:play-services-wearable:16.0.1'
implementation 'com.android.support:percent:28.0.0'
implementation 'com.android.support:support-v4:28.0.0'
implementation 'com.android.support:recyclerview-v7:28.0.0'
implementation 'com.android.support:wear:28.0.0'
compileOnly 'com.google.android.wearable:wearable:2.4.0'
}
Это мой код:
public class WearActivity extends WearableActivity implements DataClient.OnDataChangedListener {
private static final String COUNT_KEY = "com.example.count";
private DataClient mDataClient;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_wear);
// Enables Always-on
setAmbientEnabled();
// initialise API client for sending data to phone here
mDataClient = Wearable.getDataClient(this);
}
@Override
protected void onStart(){
super.onStart();
Log.d(TAG, "onStart");
mDataClient = Wearable.getDataClient(this);
}
@Override
protected void onResume() {
super.onResume();
Log.d(TAG, "onResume");
mDataClient = Wearable.getDataClient(this);
Wearable.getDataClient(this).addListener(this);
}
@Override
protected void onPause() {
super.onPause();
Log.d(TAG, "onPause");
Wearable.getDataClient(this).removeListener(this);
}
@Override
public void onDataChanged(DataEventBuffer dataEvents) {
for (DataEvent event : dataEvents) {
if (event.getType() == DataEvent.TYPE_DELETED) {
Log.d(TAG, "DataItem deleted: " + event.getDataItem().getUri());
} else if (event.getType() == DataEvent.TYPE_CHANGED) {
Log.d(TAG, "DataItem changed: " + event.getDataItem().getUri());
}
}
}
// Create a data map and put data in it
public void sendData(ArrayList<String> data) {
Log.d(TAG, "sending data");
PutDataMapRequest putDataMapReq = PutDataMapRequest.create("/count"); // create data map
putDataMapReq.getDataMap().putStringArrayList(COUNT_KEY, data); // put data in map
PutDataRequest putDataReq = putDataMapReq.asPutDataRequest();
Task<DataItem> putDataTask = mDataClient.putDataItem(putDataReq); // ERROR COMES FROM THIS LINE
putDataTask.addOnSuccessListener(
new OnSuccessListener<DataItem>() {
@Override
public void onSuccess(DataItem dataItem) {
Log.d(TAG, "Sending text was successful: " + dataItem);
}
});
}
}
Такое ощущение, что я упускаю что-то действительно простое из кода, но я не знаю, что это такое.Любая помощь будет принята с благодарностью.