不幸的是,<app name =“”>已停止&#34;字符串数据= sharedData.getText()。toString();&#34; </app>

时间:2014-04-29 03:28:31

标签: java android nullpointerexception

早上好![/ p>

快速问题,当我按下程序中的“保存”按钮时,我正在使用Java中的文件输入/输出将数据保存到字符串中。但每当我点击“保存”按钮时,程序就会停止工作。

我也是Java和Android的新手,所以我还不能确定这个问题是非常特定于我的代码还是更普遍的问题,这就是为什么我发布这个问题,即使有很多其他的类似。

使用comment-outs“//,/ *, /”我能够在我的代码中找到导致程序停止工作的行,我通过放置“”强调了这一行在它的开头和结尾,这样你就不会有寻找它的麻烦。我只想知道为什么这条线导致我的应用程序停止,如果可能的话,如何修复它。

谢谢你们。非常感谢您的协助。

请查看我的代码段:

public class MainActivity extends ActionBarActivity {

    EditText sharedData;
    FileOutputStream fos;
    String FILENAME = "InternalString";

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity);

        Button save = (Button) findViewById(R.id.btn_save);
        save.setOnClickListener(onSave);

        ListView list = (ListView) findViewById(R.id.restaurants);
        adapter = new RestaurantAdapter();
        list.setAdapter(adapter);
        }

    public View.OnClickListener onSave = new View.OnClickListener (){


        @Override
        public void onClick(View v) {

            Info r = new Info();

            EditText name = (EditText) findViewById(R.id.field_name);
            EditText address = (EditText) findViewById(R.id.field_address);
            TextView total= (TextView)findViewById(R.id.total);
            RadioGroup types = (RadioGroup) findViewById(R.id.rgrp_types);
            switch (types.getCheckedRadioButtonId()) {
            case R.id.rbtn_sit_down:
                r.setType("sit_down");
                break;
            case R.id.rbtn_take_out:
                r.setType("take_out");
                break;
            }

            r.setName(name.getText().toString());
            r.setAddress(address.getText().toString());
            r.setTotal(total.getText().toString());

                String data = sharedData.getText().toString();*** <----- This line causes it to stop running

            try {
            fos = openFileOutput(FILENAME, Context.MODE_PRIVATE);
            fos.write(data.getBytes());
            fos.close();
            } catch (FileNotFoundException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }

            String collected = null;
            FileInputStream fis = null;

            try {
                fis = openFileInput(FILENAME);
                byte[] dataArray = new byte[fis.available()];
                while (fis.read(dataArray) != -1){
                collected = new String(dataArray);
                }
            } catch (FileNotFoundException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } finally {
                try {
                    fis.close();
                    total.setText("Balance Total: " + collected +"Php");
            }   catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
            }
            }
            Log.d("FoodTripActivity", "Name: " + r.getName() + "Address: " + r.getAddress() + "Type: " + r.getType());
            adapter.add(r);

        }               
    };
}

1 个答案:

答案 0 :(得分:1)

sharedData未初始化。您需要在调用getText之前对其进行初始化。

您只声明了EditText sharedData;

sharedData =(EditText) findViewById(R.id.idforshareddata);
String data = sharedData.getText().toString();