0

Create、Show、Settingの3つのボタンを備えたレイアウトがあります。作成して表示ボタンをクリックすると、正常に動作し、次のアクティビティに転送されます。しかし、設定ボタンを確認する必要があります。つまり、パスワード テーブルが存在する場合は password.class に移動し、存在しない場合は Setting.class に移動する必要があります。

このコードを試すと、else ステートメントはデッド コードを表示し、応答しません。

import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.app.Activity;
import android.content.Intent;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;


public class MainActivity extends Activity {

Button create, show, setting;
String pass1,pass2;

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


    create = (Button)findViewById(R.id.button1);
    create.setOnClickListener(new View.OnClickListener() {
        public void onClick(View view) {
            Intent myIntent1 = new Intent(view.getContext(), Create.class);
            startActivityForResult(myIntent1, 0);
        }

    });


    show = (Button)findViewById(R.id.button2);
    show.setOnClickListener(new View.OnClickListener() {

        public void onClick(View view) {
            Intent myIntent2 = new Intent(view.getContext(), Password.class);
            startActivityForResult(myIntent2, 0);
        }

    }); 


     SQLiteDatabase db = openOrCreateDatabase("passmanage", MODE_PRIVATE, null);
     Cursor c = db.rawQuery("select * from password", null);
     c.moveToFirst();
     if(c!=null)
     {
         setting = (Button)findViewById(R.id.button3);
         setting.setOnClickListener(new View.OnClickListener() {
            public void onClick(View view) {
                Intent myIntent3 = new Intent(view.getContext(), Password.class);
                startActivityForResult(myIntent3, 0);
            }

         }); 
     }   

     else
     {
         setting = (Button)findViewById(R.id.button3);
         setting.setOnClickListener(new View.OnClickListener() {
             public void onClick(View view) {
                 Intent myIntent3 = new Intent(view.getContext(), Setting.class);
                 startActivityForResult(myIntent3, 0);
             }

         }); 
     }   


}

}

私もこの方法で試しました-

setting = (Button)findViewById(R.id.button3);
    setting.setOnClickListener(new View.OnClickListener() {
        public void onClick(View view) {

        SQLiteDatabase db = openOrCreateDatabase("passmanage", MODE_PRIVATE, null);
     Cursor c = db.rawQuery("select * from password", null);
     c.moveToFirst();
     if(c!=null)
     {
         Intent myIntent3 = new Intent(view.getContext(), Password.class);
         startActivityForResult(myIntent3, 0);
     }   

     else
     {
         Intent myIntent3 = new Intent(view.getContext(), Setting.class);
         startActivityForResult(myIntent3, 0);
     }

        }}); 

しかし、ここでもelse条件のデッドコードとしてエラーが発生しています。

私もこの方法で試しました

 setting = (Button)findViewById(R.id.button3);
    setting.setOnClickListener(new View.OnClickListener() {
        public void onClick(View view) {

    SQLiteDatabase db = openOrCreateDatabase("passmanage", MODE_PRIVATE, null);
     Cursor c = db.rawQuery("select * from password", null);
     c.moveToFirst();
     if(c!=null)
     {
         do
        {
            pass1 = c.getString(c.getColumnIndex("pass"));
            pass2 = c.getString(1);

        } while(c.moveToNext());

         if(pass1.compareTo("")==0 && pass2.compareTo("")==0)
         {
             Intent myIntent3 = new Intent(view.getContext(), Password.class);
             startActivityForResult(myIntent3, 0);
         }
         else
         {
             Intent myIntent3 = new Intent(view.getContext(), Setting.class);
             startActivityForResult(myIntent3, 0);
         }

     }

        }}); 

でも意外と閉まります!

もう1つ小さな疑問があります。同じアクティビティ内のボタンごとに異なる名前のインテントを作成する必要がありますか?

4

1 に答える 1

0

カーソル c は null にはなりません。その場合、c.moveToFirst() で nullpointerexception が発生します。データがあるかどうかを確認する必要があります。

于 2013-08-11T08:37:49.967 に答える