Android MainActivity.java尝试使用ToogleButton时出现问题

Android MainActivity.java尝试使用ToogleButton时出现问题,android,compiler-errors,gps,togglebutton,main-activity,Android,Compiler Errors,Gps,Togglebutton,Main Activity,我的Android应用程序有一个问题,我试图做的是按下ToggleButton,应用程序每两秒钟在一个文件中写入Hello(我真正想要的是每两秒钟将gps位置保存在一个文件中),ToggleButton的id为:boto1 这是MainActivity.java: package com.example.gasquefabaixada; import java.io.BufferedWriter; import java.io.FileWriter; import java.io.IOExce

我的Android应用程序有一个问题,我试图做的是按下ToggleButton,应用程序每两秒钟在一个文件中写入Hello(我真正想要的是每两秒钟将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);
    }
}
程序崩溃了


谢谢大家

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

 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_main);   
然后,您的代码将在
活动\u main
布局中找到元素
boto1

  ToggleButton bt = (ToggleButton) findViewById(R.id.boto1);

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

同样,您是否确定您的
ToggleButton
位于
activity\u main.xml
中。检查它是否在
fragment\u main.xml
中。如果它在
fragment\u main.xml
中,您肯定会得到一个
NullPointerException

扩展
ActionBarActivity
时,正确的做法是使用
onCreateView()
膨胀视图,UI元素应该放在片段中(例如fragment\u 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;
}

在调用
setContentView(R.layout.activity\u main)
之前,从调用
findViewById(R.id.boto1)
onCreate()
中删除这些行,使其无法找到视图。我认为崩溃可能是
NullPointerException
,因为
ToggleButton 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 {
                ...
            }
        }
    });
}

欢迎使用StackOverflow,这是发布LogCat中显示的消息的一个很好的实践,请发布您的错误消息!:)Eclipse告诉我:fragment_main无法解析或不是字段。in:View=inflater.inflate(R.layout.fragment_main.xml,null);默认情况下,eclipse创建两个xml文件,即activity_main.xml和fragment_main.xml(android 4.4)
@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 {
                ...
            }
        }
    });
}