Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/230.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何从非活动类开始活动并等待它完成?_Java_Android_Android Activity_Synchronized - Fatal编程技术网

Java 如何从非活动类开始活动并等待它完成?

Java 如何从非活动类开始活动并等待它完成?,java,android,android-activity,synchronized,Java,Android,Android Activity,Synchronized,我正在开发一个Android库,它启动了自己的活动。我需要让库的方法同步工作,这意味着我要等到启动的活动完成,然后返回一个值。我怎么做?我尝试了不同的方法,但似乎什么都做不了 这是图书馆开始活动的方法: @Override public Response admin(TypeEnumeration type) { Intent i = new Intent(context, NewActivity.class); i.setFlags(Intent

我正在开发一个Android库,它启动了自己的活动。我需要让库的方法同步工作,这意味着我要等到启动的活动完成,然后返回一个值。我怎么做?我尝试了不同的方法,但似乎什么都做不了

这是图书馆开始活动的方法:

    @Override
    public Response admin(TypeEnumeration type) {
        Intent i = new Intent(context, NewActivity.class);
        i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

        i.putExtra("type", type.value());

        context.startActivity(i);

        Response response = NewActivity.getResponse();
        return response;
    }
活动从用户的交互开始许多不同的片段并等待

我不希望使用active waiting for
NewActivity.getResponse()
不为null。我尝试添加一个额外的对象来对其使用
wait()
/
notyfy()
,但是活动根本没有启动

任何提示都将不胜感激! 感谢

最常见的场景(听起来就是你的场景)是使用子活动获取用户输入-例如从列表中选择联系人或在对话框中输入数据。在这种情况下,您应该使用startActivityForResult启动子活动

Intent resultIntent = new Intent();
// TODO Add extras or a data URI to this intent as appropriate.
resultIntent.putExtra("some_key", "String data"); 
setResult(Activity.RESULT_OK, resultIntent);
finish();
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
  super.onActivityResult(requestCode, resultCode, data);
  switch(requestCode) {
    case (MY_CHILD_ACTIVITY) : {
      if (resultCode == Activity.RESULT_OK) {
        // TODO Extract the data returned from the child Activity.
        String returnValue = data.getStringExtra("some_key");
      }
      break;
    } 
  }
}
这提供了一个使用setResult将数据发送回主活动的管道。setResult方法接受一个int result值和一个传递回调用活动的意图

Intent resultIntent = new Intent();
// TODO Add extras or a data URI to this intent as appropriate.
resultIntent.putExtra("some_key", "String data"); 
setResult(Activity.RESULT_OK, resultIntent);
finish();
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
  super.onActivityResult(requestCode, resultCode, data);
  switch(requestCode) {
    case (MY_CHILD_ACTIVITY) : {
      if (resultCode == Activity.RESULT_OK) {
        // TODO Extract the data returned from the child Activity.
        String returnValue = data.getStringExtra("some_key");
      }
      break;
    } 
  }
}
访问调用Activity override onActivityResult中返回的数据。requestCode对应于startActivityForResult调用中传入的整数,而resultCode和数据意图则从子活动返回

Intent resultIntent = new Intent();
// TODO Add extras or a data URI to this intent as appropriate.
resultIntent.putExtra("some_key", "String data"); 
setResult(Activity.RESULT_OK, resultIntent);
finish();
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
  super.onActivityResult(requestCode, resultCode, data);
  switch(requestCode) {
    case (MY_CHILD_ACTIVITY) : {
      if (resultCode == Activity.RESULT_OK) {
        // TODO Extract the data returned from the child Activity.
        String returnValue = data.getStringExtra("some_key");
      }
      break;
    } 
  }
}

几天前,我实现了同样的事情。只需按照以下提供的步骤进行相同操作:

  • 使用应用程序引用(可以使用activity.getApplication()获取)并使用以下方法注册活动生命周期回调:
    application.registerActivityLifecycleCallbacks(ActivityLifecycleCallbacks
    回调)

  • 现在像前面一样打开活动。
    
    背景。起始触觉(i)

  • 存储要从打开的活动传递的数据;在某个变量中,该变量将在活动终止后保留。它可以是库中的某个静态引用,也可以是对象中的某个成员变量,其生存期比活动或持久性存储(如共享首选项)长

  • 现在使用
    activity.finish()
    关闭活动

  • 此时,您以前的活动将得到恢复,您将在活动生命周期方法中得到调用,即
    onActivityResumed(活动活动)

  • 享受吧


  • 什么是响应?onActivityResult()?。。这个问题有点让人困惑。“我需要让库的方法同步工作”——为什么你们认为你们“需要”这样做?异步API(回调、侦听器、未来、RxJava风格的可观察对象等)非常常见。这是客户机的要求:他们希望调用库的方法,并在结果出来之前阻止其应用程序。使用扩展
    application
    类的“MyApplication”类,并在类内设置单例或字段。您可以在MyApplication类内设置状态值以检查状态和值。您可以从您希望的任何活动中获取活动的此值和状态。当我从库而不是从其他活动启动活动时,如何使用
    startActivityForResult
    ?您正在使用哪个库?我的库,我正在处理的那个,以及启动活动并等待结果的那个:)老板,我在问库名。你在用什么?上下文变量如何出现我不理解你的问题。你为什么需要我图书馆的名字?