getContext() returns 空
getContext() returns Null
我在 Android 中使用 getContext() 方法来获取上下文,然后创建文件。但是,当从崩溃中调用应用程序,然后访问 getContext() 时,我始终会收到空指针异常。
下面是我在崩溃后调用的代码。此代码在崩溃前工作正常,但在崩溃后失败。
synchronized public void insertR(String filename,String content) {
// TODO Auto-generated method stub
String filename = filename;
String string = content;
Context context = MyActivity.getAppContext();
FileOutputStream outputStream;
try {//Context.MODE_PRIVATE
Log.v("insertR", content);
System.out.println(filename);
System.out.println(context); //prints null
outputStream = context.openFileOutput(filename, Context.MODE_PRIVATE);
outputStream.write(string.getBytes());
outputStream.flush();
outputStream.close();
} catch (Exception e) {
e.printStackTrace();
} }
public class MyActivity extends Activity {
public static Context context;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_simple_dynamo);
context = getApplicationContext();
TextView tv = (TextView) findViewById(R.id.textView1);
tv.setMovementMethod(new ScrollingMovementMethod());
}
public static Context getAppContext() {
try {
return context;
} catch (Exception e) {
return MyActivity.getAppContext();
}
}}
我相信既然你在 activity 中,你可以使用静态函数 getApplicationContext()
来检索上下文。
像这样更改 insertR()
方法:
synchronized public void insertR(Context context, String filename,String content) {
// TODO Auto-generated method stub
String filename = filename;
String string = content;
FileOutputStream outputStream;
try {//Context.MODE_PRIVATE
Log.v("insertR", content);
System.out.println(filename);
System.out.println(context); //prints null
outputStream = context.openFileOutput(filename, Context.MODE_PRIVATE);
outputStream.write(string.getBytes());
outputStream.flush();
outputStream.close();
} catch (Exception e) {
e.printStackTrace();
}
}
如果你想从 MainActivity 中调用它,请这样做:
insertR(this, fileName, content);
或
insertR(getApplicationContext(), fileName, content);
我在 Android 中使用 getContext() 方法来获取上下文,然后创建文件。但是,当从崩溃中调用应用程序,然后访问 getContext() 时,我始终会收到空指针异常。
下面是我在崩溃后调用的代码。此代码在崩溃前工作正常,但在崩溃后失败。
synchronized public void insertR(String filename,String content) {
// TODO Auto-generated method stub
String filename = filename;
String string = content;
Context context = MyActivity.getAppContext();
FileOutputStream outputStream;
try {//Context.MODE_PRIVATE
Log.v("insertR", content);
System.out.println(filename);
System.out.println(context); //prints null
outputStream = context.openFileOutput(filename, Context.MODE_PRIVATE);
outputStream.write(string.getBytes());
outputStream.flush();
outputStream.close();
} catch (Exception e) {
e.printStackTrace();
} }
public class MyActivity extends Activity {
public static Context context;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_simple_dynamo);
context = getApplicationContext();
TextView tv = (TextView) findViewById(R.id.textView1);
tv.setMovementMethod(new ScrollingMovementMethod());
}
public static Context getAppContext() {
try {
return context;
} catch (Exception e) {
return MyActivity.getAppContext();
}
}}
我相信既然你在 activity 中,你可以使用静态函数 getApplicationContext()
来检索上下文。
像这样更改 insertR()
方法:
synchronized public void insertR(Context context, String filename,String content) {
// TODO Auto-generated method stub
String filename = filename;
String string = content;
FileOutputStream outputStream;
try {//Context.MODE_PRIVATE
Log.v("insertR", content);
System.out.println(filename);
System.out.println(context); //prints null
outputStream = context.openFileOutput(filename, Context.MODE_PRIVATE);
outputStream.write(string.getBytes());
outputStream.flush();
outputStream.close();
} catch (Exception e) {
e.printStackTrace();
}
}
如果你想从 MainActivity 中调用它,请这样做:
insertR(this, fileName, content);
或
insertR(getApplicationContext(), fileName, content);