onCreate 之外的 getApplicationContext() 上传图片
getApplicationContext() outside onCreate to upload an image
我想上传一张图片到服务器。但是我需要发送发送图像的用户的用户名。
我在 SharedPreferences 中有用户名记录,所以我想我可以得到它:
public class UploadRequest extends StringRequest {
private static final String REGISTER_REQUEST_URL = "http://160.128.0.10/up.php";
private Map<String, String> params;
public UploadRequest(String image, String name, Response.Listener<String> listener){
super(Method.POST, REGISTER_REQUEST_URL, listener, null);
SharedPreferences pref = getApplicationContext().getSharedPreferences("pref01", MODE_PRIVATE);
// CANNOT RESOLVE SYMBOL getApplicationContext
String user = pref.getString("username", null);
params = new HashMap<>();
params.put("image",image);
params.put("name",name);
}
@Override
public Map<String, String> getParams() {
return params;
}
}
错了吗?我怎样才能得到这个用户名?
getApplicationContext()
只能从 Context
的子 class 调用,Activity 是其中之一,这就是为什么您可以从 getApplicationContext()
调用你的 Activity.
您需要做的是在您的应用程序 class 中初始化全局 Context
(不推荐)或将 Context
作为参数传递给此 class.
你需要做的是,通过其构造函数将 main activity 的上下文传递给此 class。因此,创建构造函数为:
public UploadRequest(Context context, String image, String name, Response.Listener<String> listener){
super(Method.POST, REGISTER_REQUEST_URL, listener, null);
SharedPreferences pref = context.getSharedPreferences("pref01", MODE_PRIVATE);
// CANNOT RESOLVE SYMBOL getApplicationContext
String user = pref.getString("username", null);
params = new HashMap<>();
params.put("image",image);
params.put("name",name);
}
当您从 activity 初始化它时,将 this
参数作为 activity 的上下文传递。像这样:
UploadRequest ur = new UploadRequest(this, OTHER_PARAMETERS_HERE);
正如其他人在评论中提到的,您的代码无法正常工作,因为 getApplicationContext()
是一个函数,当且仅当对象定义了该函数时,您才可以调用它。
不允许您在 android 的任何地方如此轻易地使用 getApplicationContext()
。所以从 android 的角度来看,这个错误是完全正确的。
不要在任何地方使用上下文引用,主要是在网络调用的情况下。很多时候上下文与 Ui(Activity) 相关联。您将 运行 陷入 NullPointersExpetions
的困难时期。
解决方案:
将您的用户名作为参数传递。
public class UploadRequest extends StringRequest {
private static final String REGISTER_REQUEST_URL = "http://160.128.0.10/up.php";
private Map<String, String> params;
public UploadRequest(String image, String usernName,String name, Response.Listener<String> listener){
super(Method.POST, REGISTER_REQUEST_URL, listener, null);
SharedPreferences pref = getApplicationContext().getSharedPreferences("pref01", MODE_PRIVATE);
// CANNOT RESOLVE SYMBOL getApplicationContext
String user = pref.getString("username", null);
params = new HashMap<>();
params.put("image",image);
params.put("name",name);
}
@Override
public Map<String, String> getParams() {
return params;
}
}
我想上传一张图片到服务器。但是我需要发送发送图像的用户的用户名。
我在 SharedPreferences 中有用户名记录,所以我想我可以得到它:
public class UploadRequest extends StringRequest {
private static final String REGISTER_REQUEST_URL = "http://160.128.0.10/up.php";
private Map<String, String> params;
public UploadRequest(String image, String name, Response.Listener<String> listener){
super(Method.POST, REGISTER_REQUEST_URL, listener, null);
SharedPreferences pref = getApplicationContext().getSharedPreferences("pref01", MODE_PRIVATE);
// CANNOT RESOLVE SYMBOL getApplicationContext
String user = pref.getString("username", null);
params = new HashMap<>();
params.put("image",image);
params.put("name",name);
}
@Override
public Map<String, String> getParams() {
return params;
}
}
错了吗?我怎样才能得到这个用户名?
getApplicationContext()
只能从 Context
的子 class 调用,Activity 是其中之一,这就是为什么您可以从 getApplicationContext()
调用你的 Activity.
您需要做的是在您的应用程序 class 中初始化全局 Context
(不推荐)或将 Context
作为参数传递给此 class.
你需要做的是,通过其构造函数将 main activity 的上下文传递给此 class。因此,创建构造函数为:
public UploadRequest(Context context, String image, String name, Response.Listener<String> listener){
super(Method.POST, REGISTER_REQUEST_URL, listener, null);
SharedPreferences pref = context.getSharedPreferences("pref01", MODE_PRIVATE);
// CANNOT RESOLVE SYMBOL getApplicationContext
String user = pref.getString("username", null);
params = new HashMap<>();
params.put("image",image);
params.put("name",name);
}
当您从 activity 初始化它时,将 this
参数作为 activity 的上下文传递。像这样:
UploadRequest ur = new UploadRequest(this, OTHER_PARAMETERS_HERE);
正如其他人在评论中提到的,您的代码无法正常工作,因为 getApplicationContext()
是一个函数,当且仅当对象定义了该函数时,您才可以调用它。
不允许您在 android 的任何地方如此轻易地使用 getApplicationContext()
。所以从 android 的角度来看,这个错误是完全正确的。
不要在任何地方使用上下文引用,主要是在网络调用的情况下。很多时候上下文与 Ui(Activity) 相关联。您将 运行 陷入 NullPointersExpetions
的困难时期。
解决方案:
将您的用户名作为参数传递。
public class UploadRequest extends StringRequest {
private static final String REGISTER_REQUEST_URL = "http://160.128.0.10/up.php";
private Map<String, String> params;
public UploadRequest(String image, String usernName,String name, Response.Listener<String> listener){
super(Method.POST, REGISTER_REQUEST_URL, listener, null);
SharedPreferences pref = getApplicationContext().getSharedPreferences("pref01", MODE_PRIVATE);
// CANNOT RESOLVE SYMBOL getApplicationContext
String user = pref.getString("username", null);
params = new HashMap<>();
params.put("image",image);
params.put("name",name);
}
@Override
public Map<String, String> getParams() {
return params;
}
}