Articles of android context

Android上下文没有活动? 还有其他没有活动的节目?

我会尽力把它变成一个全面的问题: 我正在编写一个方法来获取一个包含Android设备城市名称的String,由LocationManager和getLastKnownLocation()以及所有这些确定。 然后我意识到我需要在另一个活动中再次做同样的事情,那么为什么不在我的程序中创建一个完全独立的类( LocationFinder ),而不是在任何地方编写重复的代码? 但是我遇到了困扰我的问题。 例如,如果我创建这个类( LocationFinder ),它是否应该扩展Activity,即使它实际上从未实现过可视化? 所有这个类都会有各种getter,如getLastKnownCity()或getCurrentCity()并返回字符串。 我假设它不会扩展Activity类,因为它实际上不是一个活动。 但那么我将使用什么Context: Geocoder geocoder = new Geocoder(Context context, Locale locale) ? 这让我觉得它必须是一项活动。 所以我扩展了Activity,并用构造函数替换了 @Override protected void onCreate(………….. 但出于某种原因,即使我放了,也永远不会被召唤 String city = new LocationFinder().getLastKnownCity(); 我的第一行LocationFinder的onCreate()是 System.out.println(“HEY!”) 它从来没有达到那个目的。 我在android.internal.os.LoggingPrintStream.println()和其他东西得到一个空指针。 另外,还有一堆来自Activity类的系统常量。 例如,我需要获取LOCATION_SERVICE ,这是一个String,如果不扩展Activity,我就无法获得。 当然,我可以作弊,只是输入文字字符串,但这感觉不对。

如何从我的class级访问Activity UI?

我有一个活动,它创建了我的类的对象实例: file MyActivity.java: public class MyActivity extends Activity { TextView myView = (TextView)findViewById(R.id.myView); … Points myPoints new Points(); … } ————————————————————– file Points.java: private class Points { … HOW TO USE myView HERE ??? … } ————————————————————– 如何在我的类中使用UI对象(不扩展Activity)? 我应该将一些上下文传递给我的Points类吗? 我该怎么办?

如何在Android中创建上下文? ContextThemeWrapper的目的是什么?

我正在帮助整理这个页面: 什么是上下文? 为了帮助说明组件如何与Context相关,我通过查看框架源代码创建了这个图: 经过一番挖掘后,我遇到了以下问题: 是什么创建了Context以及使用了哪些具体类? 基本Context类本身是一个抽象类,它几乎需要实现所有方法。 并且ContextWrapper在实例化时需要将Context实例作为其基本上下文传入,因此必须至少有一个具体的Context类。 我知道ContextWrapper及其子类利用包装器/装饰器模式根据需要向基本Context类添加function。 ContextThemeWrapper的目的是ContextThemeWrapper ? 它覆盖了一些方法,但是如果它包装了一个基本Context ,为什么不直接将调用委托给基础Context呢? 例如, Activity类扩展了ContextThemeWrapper ,它为getTheme()和setTheme()提供了特定的实现。 为什么? Android开发人员java文档有点模糊。 例如, ContextWrapper

Android Studio:无法在检测测试中写入共享首选项

我正在尝试编写一个测试用例来validation写入共享首选项的类。 我正在使用Android Studio v1.5。 在良好的旧日食中,当使用AndroidTestCase ,第二个apk文件被部署到设备,并且可以使用检测上下文运行测试,因此您可以使用检测apk的共享首选项运行测试,而无需更改主apk的现有共享首选项文件。 我花了一整个上午试图弄清楚如何在Android Studio测试中获得非空上下文。 显然,为eclipse进行的unit testing与Android Studio测试框架不兼容,因为调用getContext()返回null。 我以为我在这个问题中find了答案: 在Android junit测试用例中获取测试项目的上下文 随着旧版本的Android Studio没有完整的测试支持,事情已经发生了变化。 所以很多答案都只是黑客攻击。 显然现在你应该编写你的测试,而不是扩展InstrumentationTestCase或AndroidTestCase : @RunWith(AndroidJUnit4.class) public class MyTest { @Test public void testFoo(){ Context instrumentationContext = InstrumentationRegistry.getContext(); Context mainProjectContext = InstrumentationRegistry.getTargetContext(); } } 所以我现在有一个非null的检测上下文,并且getSharedPreferences方法返回一个似乎有效的实例,但实际上没有写入首选项文件。 如果我做: context = InstrumentationRegistry.getContext(); 然后,SharedPreferences编辑器正确写入和提交,不会抛出任何exception。 仔细观察后,我可以看到编辑器正在尝试写入此文件: data/data/.test/shared_prefs/PREFS_FILE_NAME.xml 但是文件永远不会被创建或写入。 但是使用这个: context = InstrumentationRegistry.getTargetContext(); 编辑器正常工作,并将首选项写入此文件: /data/data//shared_prefs/PREFS_FILE_NAME.xml 首选项以私有模式实例化: SharedPreferences […]

在Android Instrumentation上下文中编写/创建文件

我有一个类创建(或打开)一个文件来写一些数据。 此类在构造函数中接收Context,将其保存在实例字段中,然后使用它来调用context.openFileOutput方法。 在运行应用程序时,我通过将ApplicationContext作为Context传递来实例化此类,并且一切都按预期工作。 但是,当我尝试使用Instrumentation Test测试这个类时,我得到一个NullPointerException 。 我正在传递getInstrumentation().getContext()上下文,我知道它对应于测试的上下文,而不是真正的应用程序。 getInstrumentation().getContext().openFileOutput(“myFile”, Context.MODE_PRIVATE); // This throws NullPointerException 🙁 🙁 在测试中,我需要在测试包中创建此文件,而不是在应用程序包中创建,因为我不想在我的应用程序中覆盖该文件。 我知道那里有一个RenamingDelegatingContext类,但我不能将这个上下文传递给我的类,因为我的类也打开了一个原始资源,我希望在运行测试时这个资源不同(类似于模拟资源)。 我对此进行了大量搜索,并且没有关于Instrumentation Context的文档。 我找不到它的局限性或任何解决我问题的东西。 你知道怎么解决这个问题吗?

如何正确扩展LinearLayout以创建自定义视图

我有一些“卡片”,这是一个带有TextView的简单LinearLayout 然后我的主片段有一个垂直的LinearLayout ..在这个主片段中我将这个“卡片”添加到主布局: # main fragment layout View view = inflater.inflate(R.layout.main_activity, null); LinearLayout ll = (LinearLayout) view .findViewById(R.id.main_activity_ll); # get card View card = inflater.inflate(R.layout.card, null); # add to fragment layout ll.addView(card); 这非常好用我的卡填充片段布局的整个宽度。 其实我在期待什么。 现在我为我的卡创建了一个单独的类: Class Card extends LinearLayout{ public Card(Context context) { super(context); View view = LayoutInflater.from(getContext()).inflate( R.layout.card, null); this.addView(view); } } 然后,如果我将卡添加到主片段布局中: # […]

从不扩展Activity的类的startService

我创建了一个扩展IntentService的类,我想从一个不是Activity的类启动服务,因此,我无法访问Context对象。 我在文档或网络上找不到这样的例子。 可能吗 ?

使用Context启动另一个Activity

要启动一个Activity,你需要一个Intent,比如: Intent i = new Intent(context, class) 因此,要填写上下文参数,可以使用以下几个选项: 使用MyActivity.this或只是this 使用getApplicationContext() 使用getBaseContext() 我相信还有一两个选择。 这些选项都出现在某种教程中,一个使用第一个,下一个使用第三个选项。 那么我应该使用哪一个? 它甚至重要吗? 不同的情况有什么不同吗?

从片段中检索上下文

我创建了一个类来从PHP文件中检索JSON编码的注释。 这个类从AsyncTask扩展而来: public class RecuperarComentarisFoto extends AsyncTask{ @Override protected void onPreExecute() { super.onPreExecute(); pDialog = new ProgressDialog(????); pDialog.setMessage(“Creating Product..”); pDialog.setIndeterminate(false); pDialog.setCancelable(true); pDialog.show(); } @Override protected String doInBackground(String… arg0) { // TODO Auto-generated method stub return null; } @Override protected void onPostExecute(String result) { // TODO Auto-generated method stub super.onPostExecute(result); } } 正如你所看到的,我正试图在“doInBackground”进程工作时显示ProgressDialog。 但是progressDialog构造函数,请求一个Context,我不知道如何提供它。 我从Fragment调用这个类,所以我不能像这样访问上下文: pDialog […]

如何查看Android应用程序特定的缓存?

有没有办法在Android中动态查看特定于应用程序的缓存? 我将图像保存到缓存(/ data / data / my_app_package / cache),我99%肯定他们在那里保存,但不确定他们待在一起多久。 当我使用Eclipse中的DDMS文件资源管理器查看缓存时,它始终为空。 我也尝试在ADB中检查适当的缓存目录,并且它总是空的。 有什么建议么?