Android:intent.getExtras()。getSerializable(Constants.codiceMainActivity)为null

时间:2017-08-09 15:30:46

标签: java android android-service serializable

我想从我的主要活动启动一个服务并使用Serializable传递一个对象。但是,当我在服务中获取对象并调用方法时,它为空,我不知道为什么。 这是我的MainActivity类:

public class MainActivity extends AppCompatActivity implements View.OnClickListener, Serializable
{
private transient SetVocabulary setVocabulary;
private transient Intent intent;
@Override
protected void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    setVocabulary = new SetVocabulary();
    findViewById(R.id.imageDizionario).setOnClickListener(this);
    findViewById(R.id.imageGruppi).setOnClickListener(this);
    findViewById(R.id.imageImpara).setOnClickListener(this);

    Intent intentService = new Intent(MainActivity.this, ServiceChiusuraApp.class);
    intentService.putExtra(Constants.codiceMainActivity,this);
    Bundle bundleService = new Bundle();
    bundleService.putSerializable(Constants.codiceMainActivity,this);
    intentService.putExtras(bundleService);
    startService(intentService);
}

public SetVocabulary getSetVocabulary()
{
    return setVocabulary;
}

@Override
public void onClick(View v)
{
    startActivity(intent);
}

}

这是我的服务类:

public class ServiceChiusuraApp extends Service
{
MainActivity mainActivity;
@Override
public IBinder onBind(Intent intent)
{
    mainActivity = (MainActivity) intent.getExtras().getSerializable(Constants.codiceMainActivity);
    return null;
}

@Override
public void onTaskRemoved(Intent rootIntent)
{
    super.onTaskRemoved(rootIntent);
    SharedPreferences sharedPref = mainActivity.getPreferences(Context.MODE_PRIVATE);
    SharedPreferences.Editor editor = sharedPref.edit();
    editor.putStringSet(Constants.codiceSetString,mainActivity.getSetVocabulary());
    stopSelf();
}
}

1 个答案:

答案 0 :(得分:0)

  

我需要致电mainActivity.getSetVocabulary()

在这种情况下,您不想序列化任何内容(特别是Activity,这是各种错误的。)

相反,请尝试将Activity绑定到Service。这样,您的ServiceActivity就可以进行通信。有关如何从Activity拨打Service课程方法,请参阅此question