我有一项活动,其中包含
的声明public String progressArray[][] = new String[3][3]
在另一个文件(服务)中,我想访问此数组的值。我代码:
ListViewLoader lvl = new ListViewLoader
现在我发现lvl.progressArray[0][0]
返回null虽然我知道数据已经放在它自己的类中。这是因为新实例不包含原始值,如果是这样,我如何访问原始值?
答案 0 :(得分:0)
如果您希望始终由该Activity启动Service,则可以使用启动Service的intent将String数据发送到Service。 您可以使用putExtra和getExtra方法实现此目的:
Intent serviceIntent = new Intent( this, myService.class );
serviceIntent.putExtra( "pa_0_0", progressArray[0][0] );
serviceIntent.putExtra( "pa_0_1", progressArray[0][1] );
//...
serviceIntent.putExtra( "pa_2_2", progressArray[2][2] );
startService( serviceIntent );
您可以通过覆盖其onStartCommand
方法将服务中的字符串重新取出,其中包括将服务作为参数启动的意图。
progressArrayCopy[0][0] = mIntent.getStringExtra( "pa_0_0" );
答案 1 :(得分:0)
class.progressArray[0][0] = ...
,然后在其他类中要访问这些存储的值,您必须 <该类的强>相同实例,以便恢复存储的值。
通常在编程中你有不同的可能性:
答案 2 :(得分:0)
您的解决方案无法正常工作,因为progressArray是一个实例变量并且在调用
时ListViewLoader lvl = new ListViewLoader
创建新实例,其中progressArray设置为默认值(在这种情况下为null)。使progressArray静态可以是一个快速的解决方案,但请注意,您将高度依赖于活动和服务将访问该阵列的顺序,并且当您的活动被系统销毁时可能会重置它。我非常劝阻你这样做。相反,请考虑扩展Application class并在那里实施列表初始化/访问,例如:
public class MyApplication extends Application {
public String progressArray[][] = new String[3][3];
}
然后在AndroidManifest中声明它:
<application
android:name=".MyApplication"
android:label="@string/app_name"
android:icon="@drawable/icon">
然后,您可以通过调用
从您的活动和服务中获得((MyApplication) getApplication()).progressArray
这是在我知道的一个应用程序之间共享活动和服务之间状态的唯一方法,既不涉及来回发送消息以保持状态一致(这可能是非常重要的任务)也不是使用单例({{3} })。
但请记住,以这种方式共享可变数据的需求可能暗示,您的设计需要改进。