标签: android-context

AsyncTask和上下文

所以我正在使用Android和AsyncTask类开发我的第一个多线程应用程序.我正在尝试使用它在第二个线程中触发Geocoder,然后使用onPostExecute更新UI,但我仍然遇到了正确的Context问题.

我在主线程上使用Contexts有点蠢蠢欲动,但我不确定Context是什么或如何在后台线程上使用它,我还没有找到任何好的例子.有帮助吗?以下是我要做的事情的摘录:

public class GeoCode extends AsyncTask<GeoThread, Void, GeoThread> {
  @Override
  protected GeoThread doInBackground(GeoThread... i) {
    List<Address> addresses = null;
    Geocoder geoCode = null; 
    geoCode = new Geocoder(null); //Expects at minimum Geocoder(Context context);
    addresses = geoCode.getFromLocation(GoldenHour.lat, GoldenHour.lng, 1);
  }
}
Run Code Online (Sandbox Code Playgroud)

由于上下文不正确,它在第六行仍然失败.

java android android-context android-asynctask

19
推荐指数
2
解决办法
3万
查看次数

如何在不参考Context的情况下获取AssetManager?

我有一个类需要获取它的应用程序的引用AssetManager.这个类没有扩展任何类型的android UI类,因此它没有getContext()方法或任何类似的东西.有某种静态Context.getCurrentApplicationContext()类型的方法吗?

澄清一下:我的课程旨在像图书馆一样用于其他应用程序.它没有关联AndroidManifest.xml或控制调用它的上下文.

android android-context

19
推荐指数
2
解决办法
2万
查看次数

如何在两个不同的Android应用程序之间共享SharedPreferences文件?

我一直在努力解决这个问题.基本上,我希望有两个应用程序(将始终一起安装)共享首选项,其中一个只是一个在后台运行并需要使用首选项的服务(应该拥有首选项但只需要真正需要阅读它们) )另一个应用程序是一个前端UI应用程序,需要能够写入其他应用程序拥有的首选项文件.该服务将在后台执行(可能由首选项确定),UI将允许用户编辑首选项并查看服务中的一些信息.但是,它们将是不同的包/应用程序.

我尝试了这个教程,这让我非常了解如何在一个应用程序中拥有可以被另一个应用程序读取的首选项.本质上,我通过myContext = createPackageContext("com.example.package",Context.MODE_WORLD_READABLE + Context.MODE_WORLD_WRITEABLE);然后调用创建一个新的上下文myContext.getSharedPreferences("pref_name", Context.MODE_WORLD_READABLE + Context.MODE_WORLD_WRITEABLE);然而,我无法从外部应用程序成功写入首选项 - (SharedPreferences.Editor).commit()返回false并且我在logcat中收到有关无法编辑的警告pref_name.xml.bak.

如何成功设置我的应用程序,以便它们都可以读取和写入相同的首选项文件(存储在其中一个的数据文件夹中)?

android android-intent android-context sharedpreferences

18
推荐指数
2
解决办法
2万
查看次数

从片段中检索上下文

我创建了一个类来从PHP文件中检索JSON编码的注释.这个类从AsyncTask扩展而来:

public class RecuperarComentarisFoto extends AsyncTask<String, String, String>{

    @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);
    }

}
Run Code Online (Sandbox Code Playgroud)

正如你所看到的,我正试图在"doInBackground"进程工作时显示ProgressDialog.但progressDialog构造函数,请求一个Context,我不知道如何提供它.

我从Fragment调用这个类,所以我不能像这样访问上下文:

pDialog = new ProgressDialog(MyFragmentA.context);
Run Code Online (Sandbox Code Playgroud)

称为"主要"活动:AndroidViewPagerActivity,它扩展了FragmentActivity.

(主要的,我的意思是它是创建选项卡,并管理它们之间的导航.)

这是它的代码:

public class AndroidViewPagerActivity extends FragmentActivity {
ViewPager mViewPager;
TabsAdapter mTabsAdapter;


/** Called when the activity is first created. */ …
Run Code Online (Sandbox Code Playgroud)

java android android-context android-asynctask android-fragments

18
推荐指数
1
解决办法
4万
查看次数

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

我有一个类创建(或打开)一个文件来写一些数据.此类在构造函数中接收Context,将其保存在实例字段中,然后使用它来调用context.openFileOutput方法.

在运行应用程序时,我通过将ApplicationContext作为Context传递来实例化该类,并且一切都按预期工作.

但是,当我尝试使用Instrumentation Test测试这个类时,我得到了一个NullPointerException.我正在传递getInstrumentation().getContext()上下文,我知道该上下文对应于测试的上下文,而不是真正的应用程序.

getInstrumentation().getContext().openFileOutput("myFile", Context.MODE_PRIVATE); // This throws NullPointerException :( :(
Run Code Online (Sandbox Code Playgroud)

在测试中,我需要在测试包中创建此文件,而不是在应用程序包中创建,因为我不想覆盖我的应用程序中的文件.

我知道那里有一个RenamingDelegatingContext类,但我不能将这个上下文传递给我的类,因为我的类也打开了一个原始资源,我希望在运行测试时这个资源不同(类似于模拟资源).

我对此进行了大量搜索,并且没有关于Instrumentation Context的文档.我无法找到它的局限性,也无法解决我的问题.

你知道如何解决这个问题吗?

testing instrumentation android android-context

18
推荐指数
1
解决办法
986
查看次数

使用片段时 getContext() 和 requireContext() 的区别

很长一段时间以来我一直有这个疑问,当我使用 android 片段并且我需要实例化一个上下文,或者我需要将一个上下文作为其他函数的参数传递时,我可以选择在 getContext() 之间使用和 requireContext() 方法来实现这一点,我通常更喜欢使用 requireContext(),但只是因为 IDE(Android Studio) 在我使用 getContext() 时有时会显示警告。但是使用一种或其他方法的结果似乎是一样的,无论我选择什么。

我的问题是,这两种方法有什么区别吗?如果是这种情况,哪个更好,或者我应该在每种情况下使用哪个?

android android-context android-fragments

18
推荐指数
2
解决办法
9077
查看次数

使用Context启动另一个Activity

要启动一个Activity,你需要一个Intent,比如:

Intent i = new Intent(context, class)
Run Code Online (Sandbox Code Playgroud)

因此,要填写上下文参数,可以使用以下几个选项:

  • 使用MyActivity.this或只是this
  • 使用 getApplicationContext()
  • 使用 getBaseContext()

我相信还有一两个选择.这些选项都出现在某种教程中,一个使用第一个,另一个使用第三个选项.

那么我应该使用哪一个?它甚至重要吗?不同的情况有什么不同吗?

android android-context

17
推荐指数
1
解决办法
1万
查看次数

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

我有一些"卡片",这是一个带有TextView的简单LinearLayout

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:card="http://schemas.android.com/apk/res-auto"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
>
 <TextView
        android:id="@+id/card_label_txt"
        android:layout_width="wrap_content"
        android:text="label" />
</LinearLayout>
Run Code Online (Sandbox Code Playgroud)

然后我的主片段有一个垂直的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);
Run Code Online (Sandbox Code Playgroud)

这非常好用我的卡填充片段布局的整个宽度.实际上我在期待什么.

现在我为我的卡创建了一个单独的类:

Class Card extends LinearLayout{

public Card(Context context) {
        super(context);

        View view =  LayoutInflater.from(getContext()).inflate(
                R.layout.card, null);

        this.addView(view);

    }
}
Run Code Online (Sandbox Code Playgroud)

然后,如果我将卡添加到主片段布局中:

# main fragment layout
View view = inflater.inflate(R.layout.main_activity, null);
LinearLayout ll = (LinearLayout) view
                .findViewById(R.id.main_activity_ll); …
Run Code Online (Sandbox Code Playgroud)

android android-context android-layout android-linearlayout android-fragments

17
推荐指数
1
解决办法
4万
查看次数

在android中添加上下文菜单图标

我有一个带有ContextMenu的Listview,但是当我为ContextMenu设置setIcon时,它看起来不起作用

public void onCreateContextMenu(ContextMenu menu , View v, 
        ContextMenuInfo menuInfo){

    super.onCreateContextMenu(menu, v, menuInfo);
    menu.add(0, DELETE_ID, 0, R.string.context_menu_favorite)
        .setIcon(android.R.drawable.btn_star);      
}
Run Code Online (Sandbox Code Playgroud)

icons android android-context

16
推荐指数
2
解决办法
4万
查看次数

attachBaseContext 的作用是什么?

我很困惑为什么我们在 android 中使用 attachBaseContext。如果有人可以向我解释相同的含义,那将是一个很大的帮助。

android android-context

15
推荐指数
2
解决办法
2万
查看次数