2012-08-25 40 views
-1

我根本没有找到解决方案来共享活动之间的实时数据。我的第一个活动接收实时对象(键入double,一个随机数字)。我想将这些数字传递给第二个活动。这一切都有效,只有第二个Activity只显示一次数据。我必须通过回到第一个活动来刷新活动,只有第二个活动显示最新数据。我实现了一个Singelton模式:实时共享对象,singeltond模式

public class FirstActivity extends Activity{ 
public double xAxis; 
public double yAxis; 
public static FirstView instance; 

    public void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      setContentView(R.layout.device_view); 

     handler = new Handler() { 
       @Override 
       public void handleMessage(Message msg) { 
        int data1 = msg.arg1; 
        xAxis = (double) data1; 
        dataX.setText(String.valueOf(xAxis)); 
        int data2 = msg.arg2; 
        yAxis = (double) data2; 
        dataY.setText(String.valueOf(yAxis)); 

       } 
      }; 
     secondview.setOnClickListener(new OnClickListener() { 
       @Override 
       public void onClick(View v) { 
        Intent nextScreen = new Intent(getApplicationContext(), 
          SecondActivity.class); 
        startActivity(nextScreen); 
       } 
      }); 

    } 

    public static void initInstance(){ 
    if(instance == null) 
    { 
     instance = new FirstActivity(); 
    } 
    } 

    public static FirstActivity getInstance(){ 
     return instance; 
    } 
} 

SecondView类

public class SecondActivity extends Activity{ 
     private double valueX; 
    private double valueY; 

    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.linegraph); 
     valueX = FirstActivity.getInstance().xAxis; 
     valueY = FirstActivity.getInstance().yAxis; 
     } 
} 

应用类

package com.bluetoothcomm; 

import android.app.Application; 

public class MyApplication extends Application { 

    @Override 
    public void onCreate(){ 
     super.onCreate(); 
     initSingeltons(); 
    } 

    public void initSingeltons(){ 
     FirstActivity.initInstance(); 
    } 

} 

回答

0

当activity2显示时,如果你说它被activity1接收到,你的数据应该如何改变?

不过,我会用一个偏好,或者您的应用程序类的属性(这是一个单本身),但你给的太少信息,充分了解您的需求...

+0

我张贴在我的问题@Orabig – yadabadu

+0

我还是不明白我的Singelton实施。您的数据如何“收到”(以及来自哪里)?您不会显示xAxis和yAxis更新的代码。如果它位于第一个活动中,则此代码无法在活动2中工作。 –

+0

我从另一个类的输入流收到数据。这其他类使用处理程序来获取和sendMessage我的视图,调用FirstAcitvity和FirstActivity我想通过使用singelton与SecondActivity共享。事实上,xAxis和y在FirstActivity @Orabig – yadabadu

1

您可以实现背景服务能够向Activity1和Activity2提供实时数据。我在猜测,如果您通过PutExtras的Intent将Activity1到Activity2的数据传递给您的问题,那么您只需在启动Activity2时执行此操作即可。

+0

我试过下面的代码:1)Serializable putSerializable(VAR,current); 2)意图与putExtra(),3)单身和它总是相同的结果。每当我切换到第二个活动时,它只显示一次数据。现在我使用辛格尔顿和hte完整的代码与SIngeltond我加入到我的问题@Max Rasguido – yadabadu

1

我发现我的问题,解决方法是使用Application。只有这样才能解决我的问题。问题是静态变量实例public static FirstView instance被绑定到类加载器,这是第一个初始化它的类。所以当任何类中的静态变量被一个Activity初始化并且第二个Activity被启动时,第一个Activity被销毁,所以这意味着静态变量也是未被初始化的。这就是为什么SecondActivity没有得到最新的数据或实时数据,它只捕获静态常量数据。

我用Singelton和Application的组合改变了我的代码,通过这种方式,当SecondActivity被激活时,静态变量永远不应该未被初始化。但是我仍然得到相同的结果,当我打开第二个活动时,静态变量实例未被初始化。我做错了什么,有没有人看到它。我添加了我的代码。

@Max Rasguido,@Orabig

+0

不要忘记接受你自己的答案。 – j0k