基本上我正在尝试创建一个处理用户登录应用程序的类 以下代码是我到目前为止的代码:
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()
时,我已经阅读了有关内存泄漏和问题的问题答案 0 :(得分:1)
这对您的问题来说只是一个错误的解决方案。扩展另一个类以获得对其内部状态的访问是一个坏主意。依靠组合而不是继承总是更好,但在这种情况下,您需要组织如何传递依赖关系。
如果需要对上下文(或任何其他类型的对象)的引用,请在构造函数中传递它。此外,如果您真的不需要上下文,请不要传递它,它会帮助您防止内存泄漏,如您所述。
创建一个名为&#34; DataManager&#34;的新类。或类似的东西,让它担心数据提取。在Activity中创建该类的实例,并通过构造函数传递Context。