我想在我的Android应用中扩展应用程序.我这样做是为了创建一个名为MyApplication的扩展Application对象并将其添加到清单中.
我现在想添加一些getter和setter来保存一些信息.看起来我需要将应用程序Context传递给任何不包含Context的类.
例如,假设我创建了一个名为MyObject的类(在自己的java文件中):
public class MyObject {
public void doStuff() {
// do stuff
}
}
Run Code Online (Sandbox Code Playgroud)
我如何从doStuff()访问MyApplication?看起来我需要将应用程序Context传递给MyObject.这是典型的吗?是否有泄漏的可能性?
另外,为了确保我清楚,MyApplication(以及其中的变量)是否会在整个应用程序的生命周期中存在?无论哪种方式都没关系.我只是想确保在需要时考虑到这一点.
最后,任何链接到一些示例源以显示扩展应用程序有用的不同内容将是值得赞赏的.
我的主要活动中有几个AsyncTask类,每个类从外部获取一些少量数据,将它们存储在内存中,然后在主活动中调用一个方法来显示数据.我想将这些类移动到他们自己的文件中,但是他们引用了主活动中的方法和变量.有人提到的一个解决方案就是将活动Context传递给AsyncTask,以便调用所需的活动方法:
((ActivityName)mContext).methodYouWant(...)
((ActivityName)mContext).varYouWant
Run Code Online (Sandbox Code Playgroud)
这是从外部类访问主要活动的方法/成员的正确方法吗?
有没有办法获取未嵌入的活动的父活动实例,与您可以使用的TabBar活动相同getParent()?是否有方法或方法为常规活动做同样的事情,以常规意图开始?我需要获取上下文,所以我可以将其传递给我.
android parent android-intent android-context android-activity
我试图从非活动类加载SQLite数据库
我需要DBHelperAdapter类的上下文并使用ApplicationContextProvider如下所述的类.(我没有将这个添加到清单中,因为一些教程建议但是因为我不确定如何.)
CNYearsAdapter myCNYearsAdapter = new CNYearsAdapter( ApplicationContextProvider.getContext());
Run Code Online (Sandbox Code Playgroud)
应用环境提供者:
package com.example.kuachart;
import android.app.Application;
import android.content.Context;
public class ApplicationContextProvider extends Application {
/**
* Keeps a reference of the application context
*/
private static Context sContext;
@Override
public void onCreate() {
super.onCreate();
sContext = getApplicationContext();
}
/**
* Returns the application context
*
* @return application context
*/
public static Context getContext() {
return sContext;
}
}
Run Code Online (Sandbox Code Playgroud)
目前,实例化上面的行myCNYearsAdapter崩溃了程序,因此我不确定Application上下文提供程序是否正常工作.是否有另一种方法可以将上下文传递给此非活动类?
我想使用AlertDialogin onOptionsItemSelected但我不知道使用哪个上下文.
getApplication()而getApplicationContext()这两个不工作.有任何想法吗?
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
if (id == R.id.actionbar_menu_info) {
getSupportFragmentManager()
.beginTransaction()
.replace(R.id.container, new FragmentInfo())
.commit();
}
else if (id == R.id.actionbar_menu_settings) {
// getSupportFragmentManager()
// .beginTransaction()
// .replace(R.id.container, new FragmentSettings())
// .commit();
AlertDialog.Builder builder = new …Run Code Online (Sandbox Code Playgroud) 我创建了这个AsyncTask内部类,现在我想把它变成外层.这是代码:
private class DownloadDataFromServer extends AsyncTask<String, Integer, String> {
ProgressDialog dialog;
boolean connErr = false;
boolean soErr = false;
@Override
protected void onPreExecute() {
dialog = new ProgressDialog(HomePage.this); !!!!PROBLEM!!!!
dialog.setIndeterminate(false);
dialog.setMax(100);
dialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
dialog.setCancelable(false);
dialog.setTitle("Download");
dialog.setMessage("Updating...");
dialog.show();
super.onPreExecute();
}
@Override
protected String doInBackground(String... urls) {
// do something
}
protected void onProgressUpdate(Integer... progress) {
// Update the progress
dialog.setProgress(progress[0]);
}
@Override
protected void onPostExecute(String result) {
if (connErr || soErr) {
String msg = "Bad connection";
AlertDialog.Builder builder;
builder = new …Run Code Online (Sandbox Code Playgroud) android outer-join inner-classes android-context android-asynctask
我正在研究照片应用程序,我想在我的项目中实现cirlcle cropper,但是我的片段和裁剪器类有问题.当我选择图片并按下裁剪按钮并在转动片段后我发出此错误:
06-04 02:09:34.595 21914-21914/com.stamplessapp E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.stamplessapp, PID: 21914
java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=131094, result=-1, data=Intent { dat=file:///storage/emulated/0/Pictures/Stampless/IMG_20160604_020934.jpg }} to activity {com.stamplessapp/com.stamplessapp.MainActivity}: java.lang.NullPointerException: Attempt to invoke interface method 'boolean android.database.Cursor.moveToFirst()' on a null object reference
at android.app.ActivityThread.deliverResults(ActivityThread.java:4058)
at android.app.ActivityThread.handleSendResult(ActivityThread.java:4101)
at android.app.ActivityThread.access$1400(ActivityThread.java:177)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1497)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:145)
at android.app.ActivityThread.main(ActivityThread.java:5942)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1400)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1195)
Caused by: java.lang.NullPointerException: Attempt to invoke interface method 'boolean android.database.Cursor.moveToFirst()' on a null object reference
at com.stamplessapp.ProfileFragment.onActivityResult(ProfileFragment.java:582) …Run Code Online (Sandbox Code Playgroud) 我已经读过几个关于此的问题,但我对答案不满意,所以我决定问一下我的具体例子.
我正在开发和Android应用程序,它有一个带有一些可配置整数参数的设置屏幕.所有这些参数都具有最大值和最小值.因此,每次用户为这些参数设置新值时,我都想验证它们.如果新值超出定义的范围,我想显示Toast通知用户出了什么问题.
另一方面,因为在我的应用程序的某些情况下,用户可以"垃圾"一个可能显示Toast的按钮,为了避免Toast显示重复一段时间,我创建了一个带有静态Toast的Application类,每次我想要祝酒:
public class MyApplication extends Application {
private static Toast toast;
public static void showToast(Context context, String string){
//(...)
}
}
Run Code Online (Sandbox Code Playgroud)
回到"设置"页面,这是我实现它的方式:
public class SettingsActivity extends PreferenceActivity {
private Context context;
static SharedPreferences sharedPreferences;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
context = this;
sharedPreferences = PreferenceManager.getDefaultSharedPreferences(context);
getFragmentManager().beginTransaction().replace(android.R.id.content, new SettingsFragment()).commit();
}
public static class SettingsFragment extends PreferenceFragment implements SharedPreferences.OnSharedPreferenceChangeListener {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.preferences);
setListeners();
}
public void setListeners() {
setListenerA();
//(other listeners to …Run Code Online (Sandbox Code Playgroud) 我试图确保在第一次运行闹钟应用程序时,允许为新设备读取外部存储.
我不断收到上下文的空指针错误.它就在这条线上:
if (ContextCompat.checkSelfPermission(context, Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED)
Run Code Online (Sandbox Code Playgroud)
我收到这个错误:
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'int android.content.Context.checkPermission(java.lang.String, int, int)' on a null object reference
Run Code Online (Sandbox Code Playgroud)
我尝试了(Activity)context,getParent(),this.context,getApplicationContext,你可以在下面看到上下文.所有这些都有相同的结果.
在此先感谢您的帮助.
这是整个代码:
public class MainActivity extends AppCompatActivity implements FragmentAddAlarms.onTabChangedListener {
public static final int MY_PERMISSIONS_REQUEST_READ_EXTERNAL_STORAGE = 123;
Context context;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
boolean result = checkPermission();
if (result) {
//writeCalendarEvent();
}
}
@TargetApi(Build.VERSION_CODES.JELLY_BEAN)
public boolean checkPermission()
{
int currentAPIVersion = Build.VERSION.SDK_INT;
if(currentAPIVersion>=android.os.Build.VERSION_CODES.M)
{
if (ContextCompat.checkSelfPermission(context, Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) …Run Code Online (Sandbox Code Playgroud) android nullpointerexception android-context android-permissions
我不断收到有关我的静态片段实例的内存泄漏的警告。我声明如下:
私有静态myFragment thisFragment;
并在这里调用:
public static myFragment newInstance() {
if (thisFragment == null) {
thisFragment = new myFragment();
}
return thisFragment;
}
Run Code Online (Sandbox Code Playgroud)
我该如何解决?有任何想法吗?
谢谢!
android memory-leaks android-context android-fragments android-memory
android ×10
android-context ×10
alert ×1
extend ×1
fragment ×1
java ×1
memory-leaks ×1
outer-join ×1
parent ×1
sqlite ×1
this ×1