Android 回调时出现空指针异常

Android 回调时出现空指针异常,android,nullpointerexception,callback,Android,Nullpointerexception,Callback,我从中得到了一些活动识别的示例 问题是我希望用结果更新我的GUI,所以我尝试了回调,但得到了null异常。你能帮我还是给我其他选择 主要类别: public class MainActivity extends AppCompatActivity implements GoogleApiClient.ConnectionCallbacks, GoogleApiClient.OnConnectionFailedListener, MyCallback { public GoogleApiCli

我从中得到了一些活动识别的示例

问题是我希望用结果更新我的GUI,所以我尝试了回调,但得到了null异常。你能帮我还是给我其他选择

主要类别:

public class MainActivity extends AppCompatActivity implements GoogleApiClient.ConnectionCallbacks, GoogleApiClient.OnConnectionFailedListener, MyCallback  {

public GoogleApiClient mApiClient;

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

    mApiClient = new GoogleApiClient.Builder(this)
            .addApi(ActivityRecognition.API)
            .addConnectionCallbacks(this)
            .addOnConnectionFailedListener(this)
            .build();

    mApiClient.connect();
}

@Override
public void onConnected(@Nullable Bundle bundle) {
    Intent intent = new Intent(this, ActivityRecognizedService.class);
    PendingIntent pendingIntent = PendingIntent.getService(this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
    ActivityRecognition.ActivityRecognitionApi.requestActivityUpdates(mApiClient, 3000, pendingIntent);
}

@Override
public void onConnectionSuspended(int i) {

}

@Override
public void onConnectionFailed(@NonNull ConnectionResult connectionResult) {

}


@Override
public void callbackCall(int i)
{
    //Here will be gui Update
    Log.d("DTAG", "is: "+i);
}
}
回调接口:

interface MyCallback {
void callbackCall(int i);
}
ActivityRecognitedService:

public class ActivityRecognizedService extends IntentService {

    MyCallback callback;

    public ActivityRecognizedService() {
        super("ActivityRecognizedService");
    }

    public ActivityRecognizedService(String name) {
        super(name);
    }

    @Override
    protected void onHandleIntent(Intent intent) {
        if(ActivityRecognitionResult.hasResult(intent)) {
            ActivityRecognitionResult result = ActivityRecognitionResult.extractResult(intent);
            handleDetectedActivities( result.getProbableActivities() );
        }
    }

    void onEvent() {

    }

    private void handleDetectedActivities(List<DetectedActivity> probableActivities) {
        for( DetectedActivity activity : probableActivities ) {
            switch( activity.getType() ) {
                case DetectedActivity.IN_VEHICLE: {
                    Log.e( "ActivityRecogition", "In Vehicle: " + activity.getConfidence() );
                    callback.callbackCall(activity.getConfidence());
                    //return value for GUI update
                    break;
                }

                case DetectedActivity.UNKNOWN: {
                    Log.e( "ActivityRecogition", "Unknown: " + activity.getConfidence() );
                    break;
                }
            }
        }
    }
}

您尚未初始化
活动识别服务
中的
回调
。在这种情况下,回调可能不是最好的方法,请引用以下答案:

您可能正在查找ResultReceiver类()。 扩展它,将其与调用服务的意图一起传递(它是可打包的),然后当任务在服务中完成时,使用结果调用ResultReceiveServer的onReceiveResult()方法

使用
((MyCallback)activity.callbackCall(activity.getConfidence())

里面


案例检测活动。在车辆中:{

您需要启动回调以使其工作

尝试在ActivityRecognizedService构造函数中传递MyCallback实例,并在MainActivity上启动ActivityRecognizedService时执行以下操作:

new ActivityRecognizedService(new MyCallback(...))
并实现了回调的方法。
我希望这有帮助

ClassCastException:com.google.android.gms.location.DetectedActivity不能强制转换为danm.com.movetest.MyCallback什么是DetectedActivity?在您的代码中,只有具有MyCallback Interface的mainactivity
new ActivityRecognizedService(new MyCallback(...))