Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/189.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 在片段中的onClick switch case语句中写入和读取文件_Android_Android Fragments - Fatal编程技术网

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