Android 在片段中的onClick switch case语句中写入和读取文件
嘿,伙计们,正如我上面所说,我在Android 在片段中的onClick switch case语句中写入和读取文件,android,android-fragments,Android,Android Fragments,嘿,伙计们,正如我上面所说,我在片段中的onClick()方法中的switch case语句中向手机内部存储器写入文件时遇到了问题。我知道这听起来很复杂。我想做一个小计算器,可以告诉你开100公里需要多少升汽油 所以我想我会做一个非常简单的,只有当这个人总是把车的油箱加满的时候才有效,所以当他们第一次使用时,他们必须给我他们车的公里数,当他们下次加满油箱时,他们再次给我公里数+他们需要多少升汽油才能把油箱加满,然后我想读出来保存第一个公里数的文件,计算差值,然后使用行驶公里数计算每100公里的汽
片段中的onClick()
方法中的switch case语句中向手机内部存储器写入文件时遇到了问题。我知道这听起来很复杂。我想做一个小计算器,可以告诉你开100公里需要多少升汽油
所以我想我会做一个非常简单的,只有当这个人总是把车的油箱加满的时候才有效,所以当他们第一次使用时,他们必须给我他们车的公里数,当他们下次加满油箱时,他们再次给我公里数+他们需要多少升汽油才能把油箱加满,然后我想读出来保存第一个公里数的文件,计算差值,然后使用行驶公里数计算每100公里的汽油里程数
但我现在的问题是如何在switch case语句中调用saveInInternalStorage()
方法
我希望你能帮助我
下面是片段
:
public class FragmentFuel extends Fragment implements OnClickListener{
EditText kil;
EditText fuel;
Button calc;
String filename;
public static Fragment newInstance(Context context) {
FragmentFuel f = new FragmentFuel();
return f;
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
ViewGroup root = (ViewGroup) inflater.inflate(R.layout.fragment_fuel, null);
Button b = (Button) root.findViewById(R.id.calcFirstTime);
b.setOnClickListener(this);
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.calcFirstTime:
saveInInternalStorage(v, getActivity());
break;
default:
break;
}
}
public void saveInInternalStorage (View view, Context fileContext){
kil = (EditText) view.findViewById(R.id.kilometres);
String dataToSave = kil.getText().toString();
String FILENAME = "myFile";
try {
FileOutputStream fos = fileContext.openFileOutput(FILENAME, fileContext.MODE_PRIVATE);
fos.write(dataToSave.getBytes());
fos.close();
Toast.makeText(fileContext,"Text Saved !",Toast.LENGTH_LONG).show();
}
catch (FileNotFoundException e) {
e.printStackTrace();
Toast.makeText(fileContext,"Error FileNotFound!",Toast.LENGTH_LONG).show();
} catch (IOException e) {
Toast.makeText(fileContext,"Error IOException!",Toast.LENGTH_LONG).show();
e.printStackTrace();
}
}
}
好吧,我对我的片段进行了一点重新建模,以发现错误。我对android非常陌生,所以我真的不知道在onCreate中实现视图意味着什么。
带有空指针的提示也是正确的。错误是,如果我给我的Edittext提供一些输入,然后按下按钮,它就会显示在Toast中,整个应用程序就会崩溃
public class FragmentFuel extends Fragment implements OnClickListener{
EditText kil;
EditText fuel;
Button calc;
Button calcFirstTime;
String filename;
public static Fragment newInstance(Context context) {
FragmentFuel f = new FragmentFuel();
return f;
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
ViewGroup root = (ViewGroup) inflater.inflate(R.layout.fragment_fuel,
null);
Button bu = (Button) root.findViewById(R.id.calcFuel);
bu.setOnClickListener(this);
Button b = (Button) root.findViewById(R.id.calcFirstTime);
b.setOnClickListener(this);
return root;
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.calcFirstTime:
anything(v);
break;
case R.id.calcFuel:
//saveInInternalStorage(v, getActivity());
Toast.makeText(getActivity(), "Error 2",Toast.LENGTH_LONG).show();
break;
default:
break;
}
}
public void anything(View view){
kil = (EditText) view.findViewById(R.id.kilometres);
String dataToSave = kil.getText().toString();
Toast.makeText(getActivity(), dataToSave,Toast.LENGTH_LONG).show();
}
12-30 18:15:34.355:D/libEGL(6048):loaded/system/lib/egl/libGLES_android.so
12-30 18:15:34.365: D/libEGL(6048): loaded /system/lib/egl/libEGL_adreno200.so
12-30 18:15:34.375: D/libEGL(6048): loaded /system/lib/egl/libGLESv1_CM_adreno200.so
12-30 18:15:34.375: D/libEGL(6048): loaded /system/lib/egl/libGLESv2_adreno200.so
12-30 18:15:34.435: D/OpenGLRenderer(6048): Enabling debug mode 0
12-30 18:15:49.660: D/AndroidRuntime(6048): Shutting down VM
12-30 18:15:49.660: W/dalvikvm(6048): threadid=1: thread exiting with uncaught exception (group=0x40ab7228)
12-30 18:15:49.670: E/AndroidRuntime(6048): FATAL EXCEPTION: main
12-30 18:15:49.670: E/AndroidRuntime(6048): java.lang.NullPointerException
12-30 18:15:49.670: E/AndroidRuntime(6048): at at.****.routelogbook.FragmentFuel.anything(FragmentFuel.java:92)
12-30 18:15:49.670: E/AndroidRuntime(6048): at at.****.routelogbook.FragmentFuel.onClick(FragmentFuel.java:74)
12-30 18:15:49.670: E/AndroidRuntime(6048): at android.view.View.performClick(View.java:3549)
12-30 18:15:49.670: E/AndroidRuntime(6048): at android.view.View$PerformClick.run(View.java:14400)
12-30 18:15:49.670: E/AndroidRuntime(6048): at android.os.Handler.handleCallback(Handler.java:605)
12-30 18:15:49.670: E/AndroidRuntime(6048): at android.os.Handler.dispatchMessage(Handler.java:92)
12-30 18:15:49.670: E/AndroidRuntime(6048): at android.os.Looper.loop(Looper.java:154)
12-30 18:15:49.670: E/AndroidRuntime(6048): at android.app.ActivityThread.main(ActivityThread.java:4945)
12-30 18:15:49.670: E/AndroidRuntime(6048): at java.lang.reflect.Method.invokeNative(Native Method)
12-30 18:15:49.670: E/AndroidRuntime(6048): at java.lang.reflect.Method.invoke(Method.java:511)
12-30 18:15:49.670: E/AndroidRuntime(6048): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
12-30 18:15:49.670: E/AndroidRuntime(6048): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
12-30 18:15:49.670: E/AndroidRuntime(6048): at dalvik.system.NativeStart.main(Native Method)
第92行是:
String dataToSave=kil.getText().toString()代码>
第74行是在switch case语句中调用anywhere方法的地方您需要在onCreateView中返回一个视图
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View root = inflater.inflate(R.layout.fragment_fuel,
container,null);
Button b = (Button) root.findViewById(R.id.calcFirstTime);
b.setOnClickListener(this);
return root; // missing
}
我进一步怀疑存在NullPointerException
。张贴stacktrace
我想第92行是
String dataToSave = kil.getText().toString();
kil
为空
所以我建议
EditText ed;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View root = inflater.inflate(R.layout.fragment_fuel,
container,null);
ed = (EditText) rootview.findViewById(R.id.kilometres);
Button b = (Button) root.findViewById(R.id.calcFirstTime);
b.setOnClickListener(this);
return root;
}
然后
然后
有什么问题?任何例外??看起来都不错,有什么问题吗?为什么不使用共享的prefs?第92行是什么FragmentFuel.java
以及任何东西在哪里(查看){
calleddo检查我的编辑,看看它是否能解决您的问题神圣的通心粉非常感谢!!!!!我真的不希望得到这么好的快速帮助,所以我真的很感谢:)@JakobGlanzer请点击答案旁边的勾号接受答案。
anything();
public void anything(){
String dataToSave = ed.getText().toString();
Toast.makeText(getActivity(), dataToSave,Toast.LENGTH_LONG).show();
}