我尝试在txt文件中写入数据,使用android的内部存储,当我在mainActivity.java中的"buttonClicked“函数中直接使用代码时,它工作得很好,但是当我试图在类中调用该方法时,模拟器就会崩溃。谢谢!
public class MainActivity extends Activity {
// the class object ----------------------
FileHandler myFileHandler = new FileHandler();
public static final String FILENAME = "myFile.txt";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
public void buttonClicked(View view) {
// Call the method in the Filehandler Class
myFileHandler.saveData(FILENAME);
} ...
fileHandler类
public class FileHandler extends Activity {
private static final String TAG = MainActivity.class.getName();
FileHandler() {
}
void saveData(String FILENAME) {
Log.d(TAG, FILENAME);
try {
OutputStreamWriter outputStreamWriter = new OutputStreamWriter(openFileOutput(FILENAME, Context.MODE_PRIVATE));
outputStreamWriter.write("hallo welt");
outputStreamWriter.close();
}
catch (IOException e) {
Log.e(TAG, "File write failed: " + e.toString());
}
} ...
这是一个很好的…
public void buttonClicked(View view) {
myFileHandler.saveData(FILENAME);
try {
OutputStreamWriter outputStreamWriter = new OutputStreamWriter(openFileOutput(FILENAME, Context.MODE_PRIVATE));
outputStreamWriter.write("hallo welt");
outputStreamWriter.close();
}
catch (IOException e) {
Log.e(TAG, "File write failed: " + e.toString());
}
}
所有类都被正确导入,来自log cat的错误。
11-11 11:49:22.646: E/AndroidRuntime(833): FATAL EXCEPTION: main
11-11 11:49:22.646: E/AndroidRuntime(833): java.lang.IllegalStateException: Could not execute method of the activity
11-11 11:49:22.646: E/AndroidRuntime(833): at android.view.View$1.onClick(View.java:2072)
11-11 11:49:22.646: E/AndroidRuntime(833): at android.view.View.performClick(View.java:2408)
11-11 11:49:22.646: E/AndroidRuntime(833): at android.view.View$PerformClick.run(View.java:8816)
11-11 11:49:22.646: E/AndroidRuntime(833): at android.os.Handler.handleCallback(Handler.java:587)
11-11 11:49:22.646: E/AndroidRuntime(833): at android.os.Handler.dispatchMessage(Handler.java:92)
11-11 11:49:22.646: E/AndroidRuntime(833): at android.os.Looper.loop(Looper.java:123)
11-11 11:49:22.646: E/AndroidRuntime(833): at android.app.ActivityThread.main(ActivityThread.java:4627)
11-11 11:49:22.646: E/AndroidRuntime(833): at java.lang.reflect.Method.invokeNative(Native Method)
11-11 11:49:22.646: E/AndroidRuntime(833): at java.lang.reflect.Method.invoke(Method.java:521)
11-11 11:49:22.646: E/AndroidRuntime(833): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
11-11 11:49:22.646: E/AndroidRuntime(833): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
11-11 11:49:22.646: E/AndroidRuntime(833): at dalvik.system.NativeStart.main(Native Method)
11-11 11:49:22.646: E/AndroidRuntime(833): Caused by: java.lang.reflect.InvocationTargetException
11-11 11:49:22.646: E/AndroidRuntime(833): at com.example.iLoveMyMobile.MainActivity.buttonClicked(MainActivity.java:55)
11-11 11:49:22.646: E/AndroidRuntime(833): at java.lang.reflect.Method.invokeNative(Native Method)
11-11 11:49:22.646: E/AndroidRuntime(833): at java.lang.reflect.Method.invoke(Method.java:521)
11-11 11:49:22.646: E/AndroidRuntime(833): at android.view.View$1.onClick(View.java:2067)
11-11 11:49:22.646: E/AndroidRuntime(833): ... 11 more
11-11 11:49:22.646: E/AndroidRuntime(833): Caused by: java.lang.NullPointerException
11-11 11:49:22.646: E/AndroidRuntime(833): at android.content.ContextWrapper.openFileOutput(ContextWrapper.java:158)
11-11 11:49:22.646: E/AndroidRuntime(833): at com.example.iLoveMyMobile.FileHandler.saveData(FileHandler.java:36)
11-11 11:49:22.646: E/AndroidRuntime(833): ... 15 more
发布于 2013-11-11 11:18:28
问题是context object became null
在
OutputStreamWriter outputStreamWriter = new OutputStreamWriter(openFileOutput(FILENAME, Context.MODE_PRIVATE));
在这里,openFileOutput
实际上是this.openFileOutput
,所以openFileOutput
方法引用了MainActivity的相同上下文,但是当您输入另一个活动时,它得到的上下文为null。您可以通过传递上下文参数例如重写该方法。
void saveData(String FILENAME, Context mContext) {
Log.d(TAG, FILENAME);
try {
OutputStreamWriter outputStreamWriter = new OutputStreamWriter(mContext.openFileOutput(FILENAME, Context.MODE_PRIVATE));
outputStreamWriter.write("hallo welt");
outputStreamWriter.close();
}
catch (IOException e) {
Log.e(TAG, "File write failed: " + e.toString());
}
}
在调用时,您可以编写以下内容
myFileHandler.saveData(FILENAME, this);
发布于 2013-11-11 11:19:12
如果我正确地理解了您的意思,那么您将尝试在FileHandler类中使用来自MainActivity的方法。如果FileHandler只是用于文件保存的对象,那么它不应该扩展活动。
删除扩展活动,并将主活动用作FileHandler类的上下文。
FileHandler f = new FileHandler(Mainactivity.class);
然后在FileHandler
context.openFileOutput()
https://stackoverflow.com/questions/19904814
复制相似问题