嵌套类+扩展主要活动

时间:2015-08-31 02:24:23

标签: java android

基本上我正在尝试创建一个处理用户登录应用程序的类 以下代码是我到目前为止的代码:

public class LoginProcess extends MainActivity {
    public class GetLoginInformation extends AsyncTask<String, Void, String> {
        Context context = MainActivity.this;


        protected String doInBackground(String... params){
            /**
             * It passes the information as 3 parameters
             * @Param 1: URL
             * @Param 2: Username
             * @Param 3: Password
             */
            try {
                URL url = new URL(params[0]);
            } catch(MalformedURLException e){
                Mint.logException(e);
                e.printStackTrace();
                Log.e("LoginProcess", "Malformed URL");
                Toast.makeText(context, "Error sending login to URL", Toast.LENGTH_LONG);
            }
            return "Message received";
        }

        protected void onPostExecute(String response){
            Toast.makeText(context, response, Toast.LENGTH_SHORT).show();
        }
    }
}

然后通过调用(例如)new LoginProcess().new GetLoginInformation().execute("http://www.google.com/", "username", "password");

来调用该类

使用此代码,我尝试扩展MainActivity(这是我的主要android活动),以便我可以使用MainActivity.this获取应用程序上下文,而不必将上下文作为参数传递。< / p>

我想知道这是否是正确的做法 - 拥有一个扩展主类的外部类,然后是完成工作的子类。目前它在尝试显示Toast.makeText(这只是一个例子)时给了我一个错误,但我想知道我是否正确地使用了这个或者是否有更好的方法这样做(IE传递上下文作为参数或使用getApplicationContext() *等)

* 在使用getApplicationContext()

时,我已经阅读了有关内存泄漏和问题的问题

1 个答案:

答案 0 :(得分:1)

这对您的问题来说只是一个错误的解决方案。扩展另一个类以获得对其内部状态的访问是一个坏主意。依靠组合而不是继承总是更好,但在这种情况下,您需要组织如何传递依赖关系。

如果需要对上下文(或任何其他类型的对象)的引用,请在构造函数中传递它。此外,如果您真的不需要上下文,请不要传递它,它会帮助您防止内存泄漏,如您所述。

创建一个名为&#34; DataManager&#34;的新类。或类似的东西,让它担心数据提取。在Activity中创建该类的实例,并通过构造函数传递Context。