我是Android的新手。这里是LoaderManager类我在Button上编写代码点击初始化Loader。当我按下设备的按钮时,我来到了之前的活动,我再次调用了对Initialize loader的调用,它自动启动了新的活动而没有按任何键,即使我的初始化加载器是按钮点击。
为什么会这样?
LoginActivityService.java
public class LoginActivityService extends Activity implements
LoaderCallbacks<User>
{Context context;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.login_view_service);
context = this;
userName = (EditText) findViewById(R.id.userName1);
password = (EditText) findViewById(R.id.password1);
loginBtn = (ImageButton) findViewById(R.id.login1);
logoutBtn = (Button) findViewById(R.id.logout1);
loginBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
doLogin(userName.getText().toString(),password.getText().toString());
}
});
}
public void doLogin(String userNameString, String passwordString) {
Log.i("do login button if", "login button clicked" + "username:"
+ userNameString + "passwor:" + passwordString);
if (userNameString.length() == 0 || passwordString.length() == 0) {
Toast.makeText(context, "UserName Or Password Should be Filled",
Toast.LENGTH_SHORT).show();
}
else
{ try {
getLoaderManager().restartLoader(1, null,LoginActivityService.this);
}
catch (Exception e) {
Log.i("do Login Stack Trace if Response false","do Login Stack Trace Catch Block");
e.printStackTrace();
}}
@Override
public Loader<User> onCreateLoader(int id, Bundle args) {
Log.i("in loader", "login button clicked" + "username:"+ userName.getText().toString() + "passwor:"
+ password.getText().toString());
loginLoader = new LoginLoader(context, userName.getText().toString(),
password.getText().toString(), "2013-07-10 01:18:26");
Log.i("login loader", "" + loginLoader);
return loginLoader;
}
@Override
public void onLoadFinished(Loader<User> arg0, User userInstance) {
Log.i("status", "" + userInstance);
if (userInstance == null) {
Toast.makeText(getApplicationContext(),"User Id and Password is wrong", Toast.LENGTH_SHORT).show();
}
else {
Intent intent = new Intent(LoginActivityService.this,
ProposalListActivity.class);
startActivity(intent);
}
}
@Override
public void onLoaderReset(Loader<User> arg0) {
// TODO Auto-generated method stub
// getLoaderManager().restartLoader(10000,null,LoginActivityService.this);
}
}
我的问题是我从服务获取数据并且“userInstance”不为空,因此它向nextActivity移动,但是当我按下设备的键时,它会转到上一个活动,它会自动移动到我们所在的同一个活动按下键。发生这种情况是因为我的扩展AsyncTaskLoader的类有onloadinBackground()并且再次调用此方法可以有人指出我为什么会发生这种情况:
public class LoginLoader extends AsyncTaskLoader<User>
{
@Override
public User loadInBackground() {
// TODO Auto-generated method stub
User listUser = LoginListService.getLoginInstance().getLoginResult(userName,password,apkVersion);
Log.d(TAG, "load in background");
return listUser;
}
}
有人可以指导一下我需要添加哪些代码以避免自动调用loadinBackground?
答案 0 :(得分:1)
收到数据后尝试销毁加载程序:
public void onLoadFinished(Loader<User> arg0, User userInstance) {
Log.i("status", "" + userInstance);
if (userInstance == null) {
Toast.makeText(getApplicationContext(),"User Id and Password is wrong", Toast.LENGTH_SHORT).show();
} else {
getLoaderManager().destroyLoader(arg0.getId());
Intent intent = new Intent(LoginActivityService.this,
ProposalListActivity.class);
startActivity(intent);
}
}