Android MainActivity.java尝试使用ToogleButton时出现问题
我的Android应用程序有一个问题,我试图做的是按下ToggleButton,应用程序每两秒钟在一个文件中写入Hello(我真正想要的是每两秒钟将gps位置保存在一个文件中),ToggleButton的id为:boto1 这是MainActivity.java: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
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 {
...
}
}
});
}