Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/179.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在Android中,按Back键时会自动调用LoaderManager?_Java_Android_Loader_Android Loadermanager - Fatal编程技术网

Java 在Android中,按Back键时会自动调用LoaderManager?

Java 在Android中,按Back键时会自动调用LoaderManager?,java,android,loader,android-loadermanager,Java,Android,Loader,Android Loadermanager,我是Android的新手。下面是我编写的LoaderManager类,单击按钮初始化加载程序。当我按下设备的“后退”按钮时,我进入上一个活动,再次调用初始化加载程序的调用,它会自动启动新活动,而无需按任何键,即使我的“初始化加载程序”处于按钮单击状态 为什么会这样 LoginActivityService.java public class LoginActivityService extends Activity implements LoaderCa

我是Android的新手。下面是我编写的LoaderManager类,单击按钮初始化加载程序。当我按下设备的“后退”按钮时,我进入上一个活动,再次调用初始化加载程序的调用,它会自动启动新活动,而无需按任何键,即使我的“初始化加载程序”处于按钮单击状态

为什么会这样

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);
    }
}
公共类LoginActivityService扩展活动实现
装载机回扣
{背景;
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.login\u view\u服务);
上下文=这个;
userName=(EditText)findViewById(R.id.userName1);
密码=(EditText)findViewById(R.id.password1);
loginBtn=(ImageButton)findViewById(R.id.login1);
logoutBtn=(按钮)findviewbyd(R.id.logout1);
loginBtn.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图arg0){
//TODO自动生成的方法存根
doLogin(userName.getText().toString(),password.getText().toString());
}
});
}
public void doLogin(字符串userNameString,字符串passwordString){
Log.i(“如果有登录按钮”,“单击登录按钮”+“用户名:”
+userNameString+“passwor:”+passwordString);
if(userNameString.length()=0 | | passwordString.length()=0){
Toast.makeText(上下文,“应填写用户名或密码”,
吐司。长度(短)。show();
}
其他的
{试试看{
getLoaderManager().restartLoader(1,null,LoginActivityService.this);
}
捕获(例外e){
i(“如果响应为false,则执行登录堆栈跟踪”,“执行登录堆栈跟踪捕获块”);
e、 printStackTrace();
}}
@凌驾
公共加载器onCreateLoader(int-id,Bundle-args){
Log.i(“在加载程序中”,“登录”按钮单击“+”用户名:“+username.getText().toString()+”passwor:”
+password.getText().toString());
loginLoader=新的loginLoader(上下文,userName.getText().toString(),
password.getText().toString(),“2013-07-10 01:18:26”);
Log.i(“登录加载程序”、“登录加载程序”+);
返回登录器;
}
@凌驾
public void onLoadFinished(加载器arg0,用户userInstance){
Log.i(“状态”,“用户实例”);
if(userInstance==null){
Toast.makeText(getApplicationContext(),“用户Id和密码错误”,Toast.LENGTH\u SHORT.show();
}
否则{
意向意向=新意向(LoginActivityService.this,
命题性(类);
星触觉(意向);
}
}
@凌驾
公共void onLoaderReset(加载程序arg0){
//TODO自动生成的方法存根
//getLoaderManager().restartLoader(10000,null,LoginActivityService.this);
}
}
我的问题是我从服务和“用户实例”获取数据不为null,因此它将移动到下一个活动,但当我按下设备的back键时,它将移动到上一个活动,并自动移动到我们按下back键的同一个活动。发生这种情况是因为扩展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;
    }
     }   
公共类LoginLoader扩展了AsyncTaskLoader
{
@凌驾
公共用户loadInBackground(){
//TODO自动生成的方法存根
用户listUser=LoginListService.getLoginInstance().getLoginResult(用户名、密码、apkVersion);
Log.d(标签“后台加载”);
返回列表用户;
}
}   

有人能告诉我需要添加什么代码以避免自动调用loadinBackground吗?

一旦收到数据,请尝试销毁loader:

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);
    }
}
public void onLoadFinished(加载器arg0,用户userInstance){
Log.i(“状态”,“用户实例”);
if(userInstance==null){
Toast.makeText(getApplicationContext(),“用户Id和密码错误”,Toast.LENGTH\u SHORT.show();
}否则{
getLoaderManager().destroyLoader(arg0.getId());
意向意向=新意向(LoginActivityService.this,
命题性(类);
星触觉(意向);
}
}

当我从服务器接收到错误的数据并试图向服务器重新发送正确的信息时,它不接受正确的信息并给出相同的响应“false”简而言之,在第一次错误响应后,我的initloader没有被正确的值调用我没有跟踪你…我建议的是,一旦你从服务器接收到数据,你就不需要重新启动加载程序。好的,我已经做了与你所说的相同的事情,但是在没有互联网的情况下,我的应用程序无法从webservice带来数据,它崩溃了。怎么可能呢如果internet不存在,我处理此部分,然后它至少应该显示带有空数据的UI应用程序正在崩溃,因为加载程序?或者因为您没有处理缺少的internet数据?您可以返回一个
用户
对象,并在其中设置一个
成功/失败
标志并进行处理。您能告诉我一件事吗…我正在使用列表和该列表正在从loader类接收数据,loader正在将数据设置为适配器,而且我的列表正在填充,但当internet连接被禁用时,我的加载程序没有带来数据,并且onLoadFinished从未调用,它抛出NPE错误。如何通过对话框显示列表,即没有网络连接,列表保持为空