1

私の Android アプリには、2 つのタブがあります。最初のタブには、すでに設定した「保存」というボタンが含まれていますbtn.setEnable(false)

2 番目のタブには、「クリア」ボタンがあります。

だから私がやろうとしているのは、「クリア」ボタンをクリックしたときに、「保存」ボタンをクリックできるようにすることです。

以下のコードは、「クリア」ボタンがクリックされたときに表示されるものです。

            public void Clear(View view)  {
                 StringBuilder text = new StringBuilder();


                 try {

                    InputStream instream = openFileInput("myfile.txt");

                    if (instream != null) {             

                    InputStreamReader inputreader = new InputStreamReader(instream);
                    BufferedReader buffreader = new BufferedReader(inputreader);

                    File dir = getFilesDir();
                    File file = new File(dir, "myfile.txt");
                    boolean delete = file.delete();


                        }


                    }

                        catch (IOException e) {
                            e.printStackTrace();
                        }
                        Button btn=(Button)findViewById(R.id.Save); btn.setEnabled(true);
                        TextView myTextView = (TextView) findViewById(R.id.TextView1);
                        myTextView.setText("");

            }
}

TODO コードを無視してください...どこに配置すればよいか混乱しています

Button btn=(Button)findViewById(R.id.Save);
btn.setEnabled(true);

このコードの結果、アプリが強制的に閉じられ、logcat には何も表示されません。どんな助けでも大歓迎です。ありがとう

試み: Vikramによると、「クリア」ボタンをクリックすると、アプリは強制的にLogCatを閉じます:

07-25 13:15:02.430: W/System.err(4739): java.io.FileNotFoundException: /data/data/com.example.androidtablayout/files/myfile.txt: open failed: ENOENT (No such file or directory)
07-25 13:15:02.445: W/System.err(4739):     at libcore.io.IoBridge.open(IoBridge.java:406)
07-25 13:15:02.445: W/System.err(4739):     at java.io.FileInputStream.<init>(FileInputStream.java:78)
07-25 13:15:02.445: W/System.err(4739):     at android.app.ContextImpl.openFileInput(ContextImpl.java:673)
07-25 13:15:02.445: W/System.err(4739):     at android.content.ContextWrapper.openFileInput(ContextWrapper.java:159)
07-25 13:15:02.445: W/System.err(4739):     at com.example.androidtablayout.HistoryActivity.ViewText(HistoryActivity.java:114)
07-25 13:15:02.445: W/System.err(4739):     at java.lang.reflect.Method.invokeNative(Native Method)
07-25 13:15:02.445: W/System.err(4739):     at java.lang.reflect.Method.invoke(Method.java:511)
07-25 13:15:02.445: W/System.err(4739):     at android.view.View$1.onClick(View.java:3064)
07-25 13:15:02.445: W/System.err(4739):     at android.view.View.performClick(View.java:3591)
07-25 13:15:02.445: W/System.err(4739):     at android.view.View$PerformClick.run(View.java:14263)
07-25 13:15:02.445: W/System.err(4739):     at android.os.Handler.handleCallback(Handler.java:605)
07-25 13:15:02.445: W/System.err(4739):     at android.os.Handler.dispatchMessage(Handler.java:92)
07-25 13:15:02.445: W/System.err(4739):     at android.os.Looper.loop(Looper.java:137)
07-25 13:15:02.445: W/System.err(4739):     at android.app.ActivityThread.main(ActivityThread.java:4507)
07-25 13:15:02.450: W/System.err(4739):     at java.lang.reflect.Method.invokeNative(Native Method)
07-25 13:15:02.450: W/System.err(4739):     at java.lang.reflect.Method.invoke(Method.java:511)
07-25 13:15:02.455: W/System.err(4739):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:790)
07-25 13:15:02.455: W/System.err(4739):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:557)
07-25 13:15:02.455: W/System.err(4739):     at dalvik.system.NativeStart.main(Native Method)
07-25 13:15:02.455: W/System.err(4739): Caused by: libcore.io.ErrnoException: open failed: ENOENT (No such file or directory)
07-25 13:15:02.460: D/dalvikvm(4739): GC_CONCURRENT freed 112K, 3% free 9418K/9671K, paused 2ms+2ms
07-25 13:15:02.460: W/System.err(4739):     at libcore.io.Posix.open(Native Method)
07-25 13:15:02.460: W/System.err(4739):     at libcore.io.BlockGuardOs.open(BlockGuardOs.java:110)
07-25 13:15:02.460: W/System.err(4739):     at libcore.io.IoBridge.open(IoBridge.java:390)
07-25 13:15:02.460: W/System.err(4739):     ... 18 more
07-25 13:15:03.730: D/Network(4739): Network
07-25 13:15:03.940: D/Network(4739): Network
07-25 13:15:04.140: D/Network(4739): Network
07-25 13:15:04.335: D/Network(4739): Network
07-25 13:15:08.215: D/AndroidRuntime(4739): Shutting down VM
07-25 13:15:08.215: W/dalvikvm(4739): threadid=1: thread exiting with uncaught exception (group=0x40c3e1f8)
07-25 13:15:08.220: E/AndroidRuntime(4739): FATAL EXCEPTION: main
07-25 13:15:08.220: E/AndroidRuntime(4739): java.lang.IllegalStateException: Could not execute method of the activity
07-25 13:15:08.220: E/AndroidRuntime(4739):     at android.view.View$1.onClick(View.java:3069)
07-25 13:15:08.220: E/AndroidRuntime(4739):     at android.view.View.performClick(View.java:3591)
07-25 13:15:08.220: E/AndroidRuntime(4739):     at android.view.View$PerformClick.run(View.java:14263)
07-25 13:15:08.220: E/AndroidRuntime(4739):     at android.os.Handler.handleCallback(Handler.java:605)
07-25 13:15:08.220: E/AndroidRuntime(4739):     at android.os.Handler.dispatchMessage(Handler.java:92)
07-25 13:15:08.220: E/AndroidRuntime(4739):     at android.os.Looper.loop(Looper.java:137)
07-25 13:15:08.220: E/AndroidRuntime(4739):     at android.app.ActivityThread.main(ActivityThread.java:4507)
07-25 13:15:08.220: E/AndroidRuntime(4739):     at java.lang.reflect.Method.invokeNative(Native Method)
07-25 13:15:08.220: E/AndroidRuntime(4739):     at java.lang.reflect.Method.invoke(Method.java:511)
07-25 13:15:08.220: E/AndroidRuntime(4739):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:790)
07-25 13:15:08.220: E/AndroidRuntime(4739):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:557)
07-25 13:15:08.220: E/AndroidRuntime(4739):     at dalvik.system.NativeStart.main(Native Method)
07-25 13:15:08.220: E/AndroidRuntime(4739): Caused by: java.lang.reflect.InvocationTargetException
07-25 13:15:08.220: E/AndroidRuntime(4739):     at java.lang.reflect.Method.invokeNative(Native Method)
07-25 13:15:08.220: E/AndroidRuntime(4739):     at java.lang.reflect.Method.invoke(Method.java:511)
07-25 13:15:08.220: E/AndroidRuntime(4739):     at android.view.View$1.onClick(View.java:3064)
07-25 13:15:08.220: E/AndroidRuntime(4739):     ... 11 more
07-25 13:15:08.220: E/AndroidRuntime(4739): Caused by: java.lang.NullPointerException
07-25 13:15:08.220: E/AndroidRuntime(4739):     at com.example.androidtablayout.HistoryActivity.Clear(HistoryActivity.java:172)
07-25 13:15:08.220: E/AndroidRuntime(4739):     ... 14 more

Tarsemによると、アプリは強制的に閉じられます:

**

07-25 13:25:56.960: D/Network(6667): Network
07-25 13:25:57.000: D/dalvikvm(6667): GC_CONCURRENT freed 112K, 3% free 9417K/9671K, paused 2ms+3ms
07-25 13:25:57.155: D/Network(6667): Network
07-25 13:25:57.315: D/Network(6667): Network
07-25 13:25:57.440: D/Network(6667): Network
07-25 13:25:59.010: D/AndroidRuntime(6667): Shutting down VM
07-25 13:25:59.010: W/dalvikvm(6667): threadid=1: thread exiting with uncaught exception (group=0x40c3e1f8)
07-25 13:25:59.020: E/AndroidRuntime(6667): FATAL EXCEPTION: main
07-25 13:25:59.020: E/AndroidRuntime(6667): java.lang.IllegalStateException: Could not execute method of the activity
07-25 13:25:59.020: E/AndroidRuntime(6667):     at android.view.View$1.onClick(View.java:3069)
07-25 13:25:59.020: E/AndroidRuntime(6667):     at android.view.View.performClick(View.java:3591)
07-25 13:25:59.020: E/AndroidRuntime(6667):     at android.view.View$PerformClick.run(View.java:14263)
07-25 13:25:59.020: E/AndroidRuntime(6667):     at android.os.Handler.handleCallback(Handler.java:605)
07-25 13:25:59.020: E/AndroidRuntime(6667):     at android.os.Handler.dispatchMessage(Handler.java:92)
07-25 13:25:59.020: E/AndroidRuntime(6667):     at android.os.Looper.loop(Looper.java:137)
07-25 13:25:59.020: E/AndroidRuntime(6667):     at android.app.ActivityThread.main(ActivityThread.java:4507)
07-25 13:25:59.020: E/AndroidRuntime(6667):     at java.lang.reflect.Method.invokeNative(Native Method)
07-25 13:25:59.020: E/AndroidRuntime(6667):     at java.lang.reflect.Method.invoke(Method.java:511)
07-25 13:25:59.020: E/AndroidRuntime(6667):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:790)
07-25 13:25:59.020: E/AndroidRuntime(6667):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:557)
07-25 13:25:59.020: E/AndroidRuntime(6667):     at dalvik.system.NativeStart.main(Native Method)
07-25 13:25:59.020: E/AndroidRuntime(6667): Caused by: java.lang.reflect.InvocationTargetException
07-25 13:25:59.020: E/AndroidRuntime(6667):     at java.lang.reflect.Method.invokeNative(Native Method)
07-25 13:25:59.020: E/AndroidRuntime(6667):     at java.lang.reflect.Method.invoke(Method.java:511)
07-25 13:25:59.020: E/AndroidRuntime(6667):     at android.view.View$1.onClick(View.java:3064)
07-25 13:25:59.020: E/AndroidRuntime(6667):     ... 11 more
07-25 13:25:59.020: E/AndroidRuntime(6667): Caused by: java.lang.NullPointerException
07-25 13:25:59.020: E/AndroidRuntime(6667):     at com.example.androidtablayout.HistoryActivity.Clear(HistoryActivity.java:171)
07-25 13:25:59.020: E/AndroidRuntime(6667):     ... 14 more

**

4

2 に答える 2

1

クラスの先頭 (特定のメソッドの外) でボタンを宣言します。

Button btn;

でボタンを初期化しますonCreate(Bundle)

btn = (Button) findViewById(R.id.Save);

// Diable the button
btn.setEnabled(false);

次のように変更Clear(View)します。

public void Clear(View view)  {
             StringBuilder text = new StringBuilder();

             try {
                InputStream instream = openFileInput("myfile.txt");

                if (instream != null) {             

                InputStreamReader inputreader = new InputStreamReader(instream);
                BufferedReader buffreader = new BufferedReader(inputreader);

                File dir = getFilesDir();
                File file = new File(dir, "myfile.txt");
                boolean delete = file.delete();
                    }
                }
                    catch (IOException e) {
                        e.printStackTrace();
                    }

                    btn.setEnabled(true);
                    TextView myTextView = (TextView) findViewById(R.id.TextView1);
                    myTextView.setText("");
        }

}

于 2013-07-25T04:15:50.167 に答える
0

が原因でアプリが強制終了されましたNullPointerException

07-25 13:15:08.220: E/AndroidRuntime(4739): at com.example.androidtablayout.HistoryActivity.Clear(HistoryActivity.java:172)

logcat を参照してください...

解決策は、次の両方の行を変更することです...

Button btn= (Button)findViewById(R.id.Save); btn.setEnabled(true);
TextView myTextView = (TextView) findViewById(R.id.TextView1);

に...

Button btn= (Button) view.findViewById(R.id.Save); btn.setEnabled(true);
TextView myTextView = (TextView) view.findViewById(R.id.TextView1);

@vikram のアドバイスに従って、宣言をClearメソッドの外に移動します。それらをグローバル変数として宣言して、クラス内のどこでも使用できるようにします。

于 2013-07-25T05:41:54.550 に答える