如果登录正确,则使用登录屏幕更改活动

时间:2013-06-22 03:34:05

标签: android login android-asynctask android-activity

我的主要活动是根据用户是否登录而启动一个视图与另一个视图。它会根据是否输入某些共享首选项来检查用户是否已登录。

在我的主要内容中,我确定使用此代码显示哪个视图:

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);


        //check if user is logged in
        SharedPreferences myPrefs = this.getSharedPreferences("myPrefs", MODE_PRIVATE);
        String prefName = myPrefs.getString("userName", null);
        String userID = myPrefs.getString("userID", null);

        if(prefName == null && userID == null ){

            setContentView(R.layout.activity_login);



        }

        else{
            setContentView(R.layout.activity_main);
        }

如果我进入登录视图,用户输入他们的详细信息,如果他们的登录成功,我想回去将活动更改为正常的R.layout.activity_main,我无法确定如何在我的异步任务结束:

public class ReadLogInJSON extends AsyncTask
<String, Void, String> {

    Context c;

    public ReadLogInJSON(Context context)
    {
         c = context;
    }

    @Override
    protected String doInBackground(String... arg0) {
        // TODO Auto-generated method stub
        return readJSONFeed(arg0[0]);
    }

    protected void onPostExecute(String result){

        //decode json here
        try{

            JSONObject json = new JSONObject(result);
            String status = json.getString("status");

            if(status.equals("no")){
                //toast logIN failed

                String message = "Log In Failed";
                Toast.makeText(c,  message, Toast.LENGTH_SHORT).show();

            }

            else{
                //get userName
                String userName = json.getString("userName");

                //get user ID
                String userID = json.getString("userID");


                //set preferences
                SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(c);
                SharedPreferences.Editor editor = preferences.edit();
                editor.putString("userName",userName);
                editor.putString("userID",userID);
                editor.commit();


                //launch normal activity
                Intent i = new Intent(c, MainActivity.class); 
                i.setClass(c, MainActivity.class);  
                startActivity(i); 

            }

        }
        catch(Exception e){

        }

    }

    public String readJSONFeed(String URL) {
        StringBuilder stringBuilder = new StringBuilder();
        HttpClient httpClient = new DefaultHttpClient();
        HttpGet httpGet = new HttpGet(URL);
        try {
            HttpResponse response = httpClient.execute(httpGet);
            StatusLine statusLine = response.getStatusLine();
            int statusCode = statusLine.getStatusCode();
            if (statusCode == 200) {
                HttpEntity entity = response.getEntity();
                InputStream inputStream = entity.getContent();
                BufferedReader reader = new BufferedReader(
                        new InputStreamReader(inputStream));
                String line;
                while ((line = reader.readLine()) != null) {
                    stringBuilder.append(line);
                }
                inputStream.close();
            } else {
                Log.d("JSON", "Failed to download file");
            }
        } catch (Exception e) {
            Log.d("readJSONFeed", e.getLocalizedMessage());
        }        
        return stringBuilder.toString();
    }

}

1 个答案:

答案 0 :(得分:4)

我认为您的架构应该通过分离活动(即登录活动+欢迎活动)将登录功能与欢迎功能分开。在您决定使用哪一个之前创建一个Splash活动并检查持久数据SharedPreferences。这样您就可以分离模块并根据需要调用每个模块。