我想获得在我的库项目的一个类中运行时引用/托管我的库的应用程序的上下文.可能吗?如果有,怎么样?
谢谢
更新 我不希望我的用户将参数中的上下文传递给我的库项目,因为我的库项目可能会通过JNI调用,我不知道如何在JNI中获取上下文并将其传递给Java层.
我想在我的应用程序中显示警告对话框.我正在使用片段.我尝试了以下代码来执行此操作:
AlertDialog ad = new AlertDialog.Builder(context)
.create();
ad.setCancelable(false);
ad.setTitle(title);
ad.setMessage(message);
ad.setButton(context.getString(R.string.ok_text), new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
});
ad.show();
Run Code Online (Sandbox Code Playgroud)
但它崩溃了,logcat中的错误是:
04-18 15:23:01.770:E/AndroidRuntime(9424):android.view.WindowManager $ BadTokenException:无法添加窗口 - 令牌null不适用于应用程序
从互联网上我开始知道崩溃是由于上下文问题.我给了上下文
context = this.getActivity().getApplicationContext();
Run Code Online (Sandbox Code Playgroud)
我不知道这有什么问题.有谁能够帮我?
我正在构建一个通过AlarmManager触发警报的应用程序.
我希望能够通过它自己的非活动类来调用Alarm,但由于我没有扩展Activity,所以我似乎没有任何"上下文".这个概念让我困惑,我读过sdk文档.
我将如何使用:
alarmTest = (AlarmManager)getSystemService(Context.ALARM_SERVICE);
Run Code Online (Sandbox Code Playgroud)
在我的非活动课上?
此外,我假设获取上下文将允许我在我的非活动类中使用SharedPrefs和Intents?
我经常发现自己需要访问需要引用某些活动的方法.例如,要使用getWindowManager,我需要访问一些Activity.但是,我使用这些方法的代码通常在其他一些没有引用活动的类中.到目前为止,我已经存储了对主要活动的引用,或者将某些活动的上下文传递给了该类.有没有更好的方法来做到这一点?
请有人向我解释一下:
Intent intent = new Intent(Context, AlarmReceiver.class);
Run Code Online (Sandbox Code Playgroud)
我从来没有理解过,我认真地认为如果有人不试图向我解释这个问题,我永远不会理解.整个上下文的事情让我很困惑.有时它的工作方式如下:
Intent intent = new Intent(getBaseContext(), AlarmReceiver.class);
Run Code Online (Sandbox Code Playgroud)
有时它不会像那样工作,但它只接受:
Intent intent = new Intent(context, AlarmReceiver.class);
Run Code Online (Sandbox Code Playgroud)
有时它:
Intent intent = new Intent(this, AlarmReceiver.class);
Run Code Online (Sandbox Code Playgroud)
等等等等.
我理解上下文的基础但有多少?为什么eclipse会一次又一次地给我一个错误呢?为什么我们有时需要声明上下文?:
Context context;
Run Code Online (Sandbox Code Playgroud)
我无法为所有情况找到合适的背景如何在每种情况下知道什么是正确的?
我想从Context获取视图或findViewById()?还是从意图?
我试图在我的广播接收器中到达特定视图,onReceive的参数是上下文和意图.
好吧,我有一个班级,其中是我的广播接收器.现在,我正在尝试将广播接收器与它分开,但我需要一种方法,这样我仍然可以从我的分离广播接收器类中与我的类上的视图进行通信.
谢谢.
一个简单的问题,与应用程序写入内部存储器时的默认"主页"目录有关.默认情况下,创建的所有文件都由OS(2.2)放置在:
/data/data/your.package/files
Run Code Online (Sandbox Code Playgroud)
在读取文件时,使用相同的默认值,通过openFileInput(),保持适当的上下文openFileOutput().但是如果我需要检查文件存在,例如,使用File类,我需要在构造函数中指定整个路径.
我看到有Environment.getDataDirectory()(返回/data),Environment.getRootDirectory()(返回/system)等,但没有任何东西与获取应用程序的'home'目录有关.
这不是一个大问题,但我宁愿不硬编码我的App for File使用的完整路径(比如包名称更改,比如未来操作系统版本中的路径更改),如果有某种方法可以引用应用程序的"主页"目录以编程方式.
所以,我的第一个主要应用程序几乎已编码,我正在对我的代码进行优化.该应用程序工作正常,但我不确定我将上下文传递给其他类的方式.我不想以错误的方式去做.我在Stackoverflow中偶然发现了关于上下文的文章和问题,这是将它传递给非活动类的正确方法.我也阅读了文档,但作为一名芬兰人,使得复杂的技术更难以理解.
所以,一个简单的问题.我将主要活动的上下文传递给其他(帮助者)类的方式是否正确?如果没有,我在哪里可以阅读更多关于这些情况的更好实践.
例如:MainActivity.java
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle sis){
super(sis);
new Helper(MyActivity.this).makeMyAppAwesome();
}
}
Run Code Online (Sandbox Code Playgroud)
Helper.java
public class Helper {
Context context;
Helper(Context ctx){
this.context = ctx;
}
public void makeMyAppAwesome(){
makeBaconAndEggsWithMeltedCheese(context);
}
}
Run Code Online (Sandbox Code Playgroud)
这个可以吗?如果有人可以提供一个易于阅读的文章,并提供有关此主题的示例,那就太好了.
我使用多个SharedPreferences在我的应用程序中存储数据.许多活动都使用了一些偏好.
我知道SharedPreferences在内部由地图支持,用于快速读取访问,并在设置更改时写入SD卡.
我想知道如果很多活动访问共享首选项哪种方式更好:
如果我使用1.解决方案是否有每个活动的共享首选项对象?当活动被销毁时,共享首选项的内部地图是否会被销毁?
如果我使用2.解决方案只有一个实例,虽然我在每个活动中调用getSharedPreferences?只要应用程序还活着,内部映射是否会在内存中?
希望有人知道Android如何在内部处理它.
在我在互联网上找到的许多代码示例中,context都是在适配器的构造函数中获得的.
此上下文用于获取方法中inflater的视图膨胀getView.
我的问题是为什么在构造函数中获取上下文时可以轻松获得这样的上下文
LayoutInflater inflater;
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if(inflater == null){
Context context = parent.getContext();
inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
...
...
return convertView;
}
Run Code Online (Sandbox Code Playgroud)
也有任何理由不使用上述方法,因为直到现在我还没有遇到任何使用它的问题.