Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/202.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
Android-如何从活动中检索数据_Android - Fatal编程技术网

Android-如何从活动中检索数据

Android-如何从活动中检索数据,android,Android,我是android新手,所以请原谅我的新手问题。我有一个游戏,我正试图从一个旧的Java小程序移植到android。我的目标是让这个功能化,然后在像CodeProject这样的网站上发布一篇文章,或者如果有更合适的网站,就发布一篇更好的文章。这个想法是为了证明一个全新的android开发人员可以在合理的时间内创建一个应用程序 我正在取得一些进展,但遇到了一个问题。我有用户与之交互的主要活动。然后我创建了一个菜单项,该菜单项依次启动第二个活动,称之为child,并使用少量复选框、seekbar等来

我是android新手,所以请原谅我的新手问题。我有一个游戏,我正试图从一个旧的Java小程序移植到android。我的目标是让这个功能化,然后在像CodeProject这样的网站上发布一篇文章,或者如果有更合适的网站,就发布一篇更好的文章。这个想法是为了证明一个全新的android开发人员可以在合理的时间内创建一个应用程序

我正在取得一些进展,但遇到了一个问题。我有用户与之交互的主要活动。然后我创建了一个菜单项,该菜单项依次启动第二个活动,称之为child,并使用少量复选框、seekbar等来填充参数。我可以成功地将包含所有选项的类从main传递到child。但我无法让孩子将这些数据传回主服务器。 首先,这里是启动子活动的主代码:

public void addBalls()
{
    Intent myIntent = new Intent(this, GameOptions.class);

    Bundle b = new Bundle();
    b.putSerializable("options", gameParams);
    myIntent.putExtras(b);
    startActivityForResult(myIntent,STATIC_OPTIONS_VALUE);
}
传递给孩子并希望再次返回的数据是:

public class GameOptionParams implements Serializable
{
    private static final long serialVersionUID = 1L;

    public int speedBarPosition;
    public int vgravityBarPosition;
    public int mgravityBarPosition;
    public int viscosityBarPosition;
    public int restititionBarPosition;
    public boolean trace;
    public boolean collide;
    public boolean mush;
    public boolean wrap;
    public boolean flicker;
}
这是主要的预期回报

@Override 
public void onActivityResult(int requestCode, int resultCode, Intent data) 
{     
  super.onActivityResult(requestCode, resultCode, data); 
  switch(requestCode) 
  { 
    case (STATIC_OPTIONS_VALUE) : 
    { 
      if (resultCode == Activity.RESULT_OK) 
      { 
          //retrieve intended options
          Bundle b = data.getExtras();
          gameParams = (GameOptionParams) b.getSerializable("options");
      } 
      break; 
    } 
  } 
}
子活动成功接收gameParams数据。然后它与用户交互以更新值,然后我尝试返回它,但它似乎没有被发送到main。以下是onStop覆盖中的子代码。 也许这段代码不应该在桌面覆盖中,但我无法确定在其他地方放置它

@Override
public void onStop()
{
    super.onStop();

    //read widget values
    gameParams.speedBarPosition     = speedBar.GetPosition();
    gameParams.vgravityBarPosition      = vgravityBar.GetPosition();
    gameParams.mgravityBarPosition      = mgravityBar.GetPosition();
    gameParams.viscosityBarPosition = viscosityBar.GetPosition();
    gameParams.restititionBarPosition   = restititionBar.GetPosition();

    //todo save to persistent   
    Intent resultIntent = new Intent(this, TiltBall2ImpactActivity.class);
    Bundle b = new Bundle();
    b.putSerializable("options", gameParams);
    resultIntent.putExtras(b);
    setResult(Activity.RESULT_OK, resultIntent);
}

回到主onActivityResult覆盖中,我总是看到requestCode=0,resultCode=0,data=null。我假设这是一个典型的新手问题,我已经阅读了sdk文档、用户论坛等,并且已经接近解决方案,但还没有完全解决。如果您有任何帮助,我们将不胜感激。

因为这是游戏的一种设置菜单,我想您需要为多个活动使用这些值。如果是这样,则扩展android.app.Application类

在该类中,可以创建属性来保存值。在任何活动中,您都可以调用

MyApplication myApp = (MyApplication)getApplicationContext();
其中myApp是一个单身汉。因此,您将从另一个活动中获得设置的值

您需要将此代码添加到清单文件中的应用程序标记中,以使其正常工作

android:name=".MyApplication"
如果需要在下次启动应用程序时保留这些值,则需要使用SharedReferences。这是一个很好的教程


由于这是游戏的一种设置菜单,我假设您需要为多个活动使用这些值。如果是这样,则扩展android.app.Application类

在该类中,可以创建属性来保存值。在任何活动中,您都可以调用

MyApplication myApp = (MyApplication)getApplicationContext();
其中myApp是一个单身汉。因此,您将从另一个活动中获得设置的值

您需要将此代码添加到清单文件中的应用程序标记中,以使其正常工作

android:name=".MyApplication"
如果需要在下次启动应用程序时保留这些值,则需要使用SharedReferences。这是一个很好的教程


假设在您的“子”活动中,用户必须按下“确定”或“保存”按钮,然后将代码放入按钮的onClick中设置gameParams参数。。。处理程序

使用默认构造函数实例化意图,例如

Intent resultIntent = new Intent();

…然后在创建捆绑包并向其添加gameParams并调用setResult…,只需调用finish即可终止“child”活动。我想覆盖onStop的情况不多,我怀疑您不想使用它来尝试返回意图。

假设在“子”活动中,用户必须按下“确定”或“保存”按钮,然后将代码放入按钮的onClick中设置gameParams参数。。。处理程序

使用默认构造函数实例化意图,例如

Intent resultIntent = new Intent();

…然后在创建捆绑包并向其添加gameParams并调用setResult…,只需调用finish即可终止“child”活动。我想覆盖onStop的情况不多,我怀疑您不想使用它来尝试返回意图。

我怀疑您需要在调用onStop之前调用setResult,即在您假定调用finish以结束活动之前。一个问题:用户如何退出第二个活动?使用“确定”按钮,或仅按“后退”按钮?相关:我怀疑您需要在调用onStop之前调用setResult,即在您假定调用finish以结束活动之前。一个问题:用户如何退出第二个活动?用“确定”按钮,或者只按“后退”按钮?相关:谢谢,我会调查这似乎是完全合理的。谢谢,我会调查这似乎是完全合理的。