0

Android アプリケーションに問題があります。私がやろうとしているのは、ToggleButton を押すと、アプリケーションが 2 秒ごとに File Hello に書き込むことです (私が本当に望んでいたのは、2 秒ごとに gps 位置をファイルに保存することです) )、トグルボタン 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

これらの2行を最初に指定する必要がありますonCreate()

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

繰り返しますが、本当にあなたToggleButtonは にいますかactivity_main.xml。それが入っているかどうかを確認してくださいfragment_main.xml..入っている場合は、確実fragment_main.xmlに入手できますNullPointerException

を拡張ActionBarActivityしている間は、 を使用してビューをonCreateView()インフレートし、UI 要素をフラグメント (eg.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)前に呼び出しました。レイアウトまたはビューがまだ設定されているため、クラッシュは間違いなくnullに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 に答える
0

あなたが持っていると確信しているので、メソッドNullPointerExceptionの後に2行を追加してください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 に答える