java - Android 中按下 Back 键时会自动调用 LoaderManager?

标签 java android loader android-loadermanager

我是 Android 新手。这是 LoaderManager 类,我在单击按钮时编写了代码来初始化 Loader。当我按下设备的后退按钮时,我来到上一个 Activity ,并且再次调用对初始化加载程序的调用,并且它会自动启动新 Activity ,而无需按任何键,即使我的初始化加载程序是在按钮单击时也是如此。

为什么会这样?

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”不为空,因此它移向下一个 Activity ,但是当我按设备的后退键时,它会移至上一个 Activity ,并自动移至我们所在的同一 Activity 按下返回键。发生这种情况是因为我的扩展 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 吗?

最佳答案

收到数据后尝试销毁加载程序:

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);
    }
}

关于java - Android 中按下 Back 键时会自动调用 LoaderManager?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21424908/

相关文章:

javascript - Ajax 在加载器之后加载

android - Loader 和 AsyncTask 的区别

java - 由于不寻常的语法错误,运行 timertask 不起作用

安卓自定义视频播放器

php - 从应用程序登录的最佳方式

java - onResume() 使我的应用程序无缘无故崩溃

exception - MEF: "Unable to load one or more of the requested types. Retrieve the LoaderExceptions for more information"

java - equals(...) 和 equalsIgnoreCase(...)

java - 在 Spock 测试中使用 @Client 在 Micronaut 中进行 HTTP 分段文件上传

java - 没有未捕获/抛出异常的编译器错误/警告