после входа в систему оставайтесь на домашнем экране до выхода из системы

#java #android

#java #Android

Вопрос:

Я хочу отправить имя пользователя и пароль на сервер, и он возвращает ответ, совпадают ли имя пользователя и пароль. Я не хочу запрашивать логин при каждом запуске моего приложения, вместо этого я хочу оставаться в home_screen системе до тех пор, пока не выйду из своего приложения для Android. Как я могу это сделать? любой пример будет полезен..

 package com.example.test5;

import android.content.Context;
import android.content.DialogInterface;
import android.content.SharedPreferences;
import android.content.DialogInterface.OnClickListener;
import android.os.AsyncTask;
import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

public class MainActivity extends ActionBarActivity implements OnClickListener{
    private EditText username;
    private EditText  password;
    private Button login;
    static String u;
    static String p;    
    Context context = MainActivity.this;

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        username = (EditText)findViewById(R.id.editText1);//Visibility
        password = (EditText)findViewById(R.id.editText2);//Visibility
        login = (Button)findViewById(R.id.button1);//Visibility

        login.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                u = username.getText().toString();
                p = password.getText().toString();
                Toast.makeText(MainActivity.this, "Checking User Login",Toast.LENGTH_SHORT).show();
                new MyAsyncTask_Login(context).execute(u,p);
            }
        });
    }

    @Override
    public void onClick(DialogInterface dialog, int which) {
    }
}
  

мой класс asynctask

 package com.example.test5;

import java.io.StringReader;
import java.util.LinkedList;
import java.util.List;
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserFactory;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
import android.content.res.XmlResourceParser;
import android.os.AsyncTask;
import android.preference.PreferenceManager;
import android.widget.Toast;

public class MyAsyncTask_Login extends AsyncTask<String, Void, String>{
    public static final String MyPREFERENCES = "MyPrefs" ; //editor: never used
    public static final String userName = "name"; 
    public static final String Password = "password"; 
    SharedPreferences sharedpreferences; //editor: never used
    private Context context;

    public MyAsyncTask_Login(Context context) {
        this.context = context;
    }                   

    @Override
    protected String doInBackground(String... params) {
        String response = new Login_WebService().checkLogin(params[0], params[1]);
        return response;
    }

    @Override
    protected void onPostExecute(String result) {
        String strResponse = resu<
        try {
            XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
            factory.setNamespaceAware(true);
            XmlPullParser parser = factory.newPullParser();
            parser.setInput(new StringReader(strResponse));
            List<String> tags = new LinkedList<String>();
            tags.add("valid");
            for (int type = parser.next(); type != XmlResourceParser.END_DOCUMENT; type = parser.next()) {
                if (type == XmlResourceParser.START_TAG) {
                    String name = parser.getName();
                    if (tags.contains(name)) {
                        type = parser.next();
                        if (parser.getText().trim().equals("1")) {
                            Toast.makeText(context, "logged in succesfully.",Toast.LENGTH_SHORT).show();
                            try {
                                String user = MainActivity.u;
                                String pass = MainActivity.p;
                                Intent i = new Intent(context,Home_page.class);
                                context.startActivity(i);
                            }
                            catch (Exception e) {
                                Toast.makeText(context, e.toString(),Toast.LENGTH_SHORT).show();    
                            }
                        }
                        else {
                            Toast.makeText(context, "Invalid User",Toast.LENGTH_SHORT).show();
                        }
                    }
                }
            }
        }
        catch (Exception e) {
        }
    }
}
  

Комментарии:

1. Используйте SharedPreferences (переменная уже объявлена в вашей AsyncTask). Прочитайте API-docs и реализуйте его.

Ответ №1:

Вы можете сделать так:

Сохраните свои регистрационные данные в общих настройках.

Когда пользователь входит в систему:

 protected void doInBackground(Activity... params) {
    Activity activity = (Activity) params[0];
    SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(activity);//Pass activity in params o
    Editor editor = prefs.edit();
    editor.putString("username",u);
    editor.putString("password",p);
    editor.commit();
}
  

при создании, когда пользователь перезапускает приложение, прочитайте общие настройки:

 u = prefs.getString("username", ""); 
p = prefs.getString("password", ""); 

if(u.equals("") || p.equals(""))
    //user needs new login  
else
    //user already login
  

Чтобы выполнить выход из системы, поместите «» в sharedpreferences.

Комментарии:

1. когда я использую это в своем классе asynctask, getsharedpreferencres показывает ошибку, что я могу сделать?

2. он принудительно закрывается, когда я использую его в приведенном выше коде класса asynctask

3. та же проблема, что и раньше .. я использую общие настройки, и все равно он запрашивает логин снова и снова, даже если я не выхожу из системы

4. пожалуйста, отредактируйте в моем коде, чтобы использовать и как использовать?

5. Почему вы помещаете общие настройки в свою задачу asynck?