0

我的Android应用程序有问题,我想做的是按下ToggleButton,应用程序每两秒写入一个文件Hello(我真正想要的是每2秒将gps位置保存在文件中),ToggleButton 有 id:boto1。

这是 MainActivity.java:

package com.example.gasquefabaixada;

import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;

import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.CompoundButton;
import android.widget.CompoundButton.OnCheckedChangeListener;
import android.widget.ToggleButton;


public class MainActivity extends ActionBarActivity {

    private ToggleButton Boto1;
    @Override



    protected void onCreate(Bundle savedInstanceState) {

        ToggleButton bt = (ToggleButton) findViewById(R.id.boto1);
        bt.setOnCheckedChangeListener(new OnCheckedChangeListener() {

            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {

                if(isChecked)
                {
                    BufferedWriter writer = null;
                    try {
                        writer = new BufferedWriter(new FileWriter("mnt/sdcard/andromina.txt"));
                    } catch (IOException e1) {
                        // TODO Auto-generated catch block
                        e1.printStackTrace();
                    }
                    while(isChecked==true)
                    {


                        Thread.currentThread();
                        try {

                            writer.write("HELLO");
                            writer.newLine();
                            Thread.sleep(2000);
                        } catch (InterruptedException e) {
                            // TODO Auto-generated catch block
                            e.printStackTrace();
                        } catch (IOException e) {
                            // TODO Auto-generated catch block
                            e.printStackTrace();
                        }
                    }
                    try {
                        writer.close();
                    } catch (IOException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                }
                else
                {

                }

            }
        });

        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }


    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
     //   Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();
        if (id == R.id.action_settings) {
            return true;
        }
        return super.onOptionsItemSelected(item);
    }
}

程序崩溃!!!

感谢你所做的一切!!

4

3 回答 3

0

我很确定你有一个NullPointerException,所以在onCreate()方法之后添加两行

 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_main);   

然后你的代码会boto1在你的activity_main布局中找到元素

  ToggleButton bt = (ToggleButton) findViewById(R.id.boto1);
于 2014-08-29T18:11:43.200 回答
0

你必须在开头给出这两行onCreate()

super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

再次,您确定您ToggleButtonactivity_main.xml. 检查它是否在fragment_main.xml..如果它在fragment_main.xml你肯定会得到一个NullPointerException

在扩展ActionBarActivity时,正确的做法是使用 扩展视图,onCreateView()并且 UI 元素应放置在片段内(例如 .fragment_main.xml)。在您的代码中,您是在onCreate()自己做的。

所以你onCreateView()应该看起来像

public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
    View view=inflater.inflate(R.layout.fragment_main.xml, null);
    ToggleButton bt = (ToggleButton) findViewById(R.id.boto1);
    bt.setOnCheckedChangeListener(new OnCheckedChangeListener() {

        @Override
        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {

            if(isChecked)
            {
                BufferedWriter writer = null;
                try {
                    writer = new BufferedWriter(new FileWriter("mnt/sdcard/andromina.txt"));
                } catch (IOException e1) {
                    // TODO Auto-generated catch block
                    e1.printStackTrace();
                }
                while(isChecked==true)
                {


                    Thread.currentThread();
                    try {

                        writer.write("HELLO");
                        writer.newLine();
                        Thread.sleep(2000);
                    } catch (InterruptedException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    } catch (IOException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                }
                try {
                    writer.close();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
            else
            {

            }

        }
    });
    return view;
}

并从中删除这些行onCreate()

于 2014-08-29T18:15:28.753 回答
0

你打电话findViewById(R.id.boto1)之前打电话setContentView(R.layout.activity_main),所以它找不到视图。我认为崩溃可能肯定是空的,因为尚未设置任何布局或视图NullPointerExceptionToggleButton bt:)

尝试这个:

@Override
protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    ToggleButton bt = (ToggleButton) findViewById(R.id.boto1);
    bt.setOnCheckedChangeListener(new OnCheckedChangeListener() {

        @Override
        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {

            if(isChecked) {
                ...
            } else {
                ...
            }
        }
    });
}
于 2014-08-29T18:44:55.567 回答