在按下按钮时从登录活动中运行以下服务:
public class PlayerService extends Service{
private StorageApi api;
private String user, password, host = "****";
private Intent i;
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
i = intent;
user = intent.getStringExtra("User");
password = intent.getStringExtra("Pass");
new connectStorage().execute();
return startId;
}
@Override
public void onDestroy() {
}
@Override
public IBinder onBind(Intent intent) {
return null;
}
private class connectStorage extends AsyncTask<Void, Void, Boolean> {
@Override
protected Boolean doInBackground(Void... params) {
try {
api = DefaultClientFactory.create(host, user, password);
Log.i("TEST",""+api.getUserInfo());
return true;
} catch (StorageApiException e) {
e.printStackTrace();
Log.i("TEST", "" + e.getMessage());
return false;
}
}
@Override
protected void onPostExecute(Boolean result) {
super.onPostExecute(result);
if(result == false){
// progressGenerator.finnish(btnSignIn);
// btnSignIn.setProgress(-1);
Toast.makeText(getApplicationContext(), "Invalid E-mail or Password !", Toast.LENGTH_SHORT).show();
}
else
{
Intent myIntent = new Intent(PlayerService.this, musicPlayer.class);
myIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
getApplicationContext().startActivity(myIntent);
}
}
}
}
正如您在连接到api后在Asynctask中看到的那样,我使用
Log.i("TEST",""+api.getUserInfo());
getUserInfo方法,我得到用户名,姓名,姓氏,电子邮件等信息......
执行此操作后,onPostExecute我将活动切换到另一个屏幕。我的问题是,如何在初始化连接后使用API对象,例如获取另一个活动的用户信息?
答案 0 :(得分:1)
您可以将对象Parcelable
设为:
ublic class StorageApi implements Parcelable{
private String userInfo;
...
然后你必须覆盖该类中的writeToParcel(Parcel dest, int flags)
方法。
然后你可以将你的对象发送到另一个这样的活动:
intent.putExtra("api", new StorageApi (api.getUserInfo(), ...));
有关详细信息,您可以查看this question它会为您提供一个很好的示例。
答案 1 :(得分:1)
您可以将api.getUserInfo()的内容存储在字符串中,然后通过intent将字符串传递给您想要切换的活动。 对于你的代码中的ex,你可以写
@Override
protected void onPostExecute(Boolean result) {
super.onPostExecute(result);
if(result == false){
// progressGenerator.finnish(btnSignIn);
// btnSignIn.setProgress(-1);
Toast.makeText(getApplicationContext(), "Invalid E-mail or Password !", Toast.LENGTH_SHORT).show();
}
else
{
Intent myIntent = new Intent(PlayerService.this, musicPlayer.class);
myIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
myIntent.putExtra("apiInfo", api.getUserInfo());
getApplicationContext().startActivity(myIntent);
}
}
然后在您的其他活动中,您可以通过
获取此api信息@Override
protected void onCreate(Bundle savedInstanceState) {
String apiInfo;
super.onCreate(savedInstanceState);
Intent i = getIntent();
//If api.getUserInfo() returns a String
apiInfo = i.getStringExtra("apiInfo");
//If api.getUserInfo() returns a String Array
apiInfo = i.getStringArrayExtra("apiInfo");
}