-1

私は活動中の1つのボタンと6つのラジオボタンを持っています。ボタンをクリックして編集テキストから入力を取得した後(検索)、別のアクティビティに移動します。以下は私のコードです

public void search(View v)
{
    switch(v.getId())
    {               
    case R.id.button1:
        EditText et1= (EditText)findViewById(R.id.editText1);
        RadioButton r1 = (RadioButton) findViewById(R.id.radio0);
        RadioButton r2 = (RadioButton) findViewById(R.id.radio1);
        RadioButton r3 = (RadioButton) findViewById(R.id.radio2);
        RadioButton r4 = (RadioButton) findViewById(R.id.radio3);
        RadioButton r5 = (RadioButton) findViewById(R.id.radio4);
        RadioButton r6 = (RadioButton) findViewById(R.id.radio5);
        pin=et1.getText().toString();
        if(pin.length()==0){
            Toast.makeText(this, "Please provide Input!", Toast.LENGTH_SHORT).show();
            return;
        }
        if(r1.isChecked())
        {   category="All";
        Intent i=new Intent(this,Details.class);
        startActivity(i);
        }


        else if(r2.isChecked())
        {   
            category="Food";
            Intent i=new Intent(this,Details.class);
            startActivity(i);
        }

        else if(r3.isChecked())
        {   
            category="Entertainment";
            Intent i=new Intent(this,Details.class);
            startActivity(i);
        }

        else if(r4.isChecked())
        {   
            category="Shopping";
            Intent i=new Intent(this,Details.class);
            startActivity(i);
        }

        else if(r5.isChecked())
        {   
            category="Health";
            Intent i=new Intent(this,Details.class);
            startActivity(i);
        }

        else if (r6.isChecked())
        {   
            category="Services";
            Intent i=new Intent(this,Details.class);
            startActivity(i);

        }
         break;                     
    }
/*if(pin.length()!=0&&category.length()!=0)
 {
Intent i=new Intent(this,Details.class);
startActivity(i);

}*/

}

上記のコードは正しいですか?? 入力が与えられたときに実行中の強制終了が発生しますが、入力がない場合はトーストメッセージが表示されます。

丸太猫は

09-29 23:56:25.706: E/AndroidRuntime(23196): FATAL EXCEPTION: main
09-29 23:56:25.706: E/AndroidRuntime(23196): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.yellowpages/com.yellowpages.Details}: java.lang.NullPointerException
09-29 23:56:25.706: E/AndroidRuntime(23196):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1956)
09-29 23:56:25.706: E/AndroidRuntime(23196):    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1981)
09-29 23:56:25.706: E/AndroidRuntime(23196):    at android.app.ActivityThread.access$600(ActivityThread.java:123)
09-29 23:56:25.706: E/AndroidRuntime(23196):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1147)
09-29 23:56:25.706: E/AndroidRuntime(23196):    at android.os.Handler.dispatchMessage(Handler.java:99)
09-29 23:56:25.706: E/AndroidRuntime(23196):    at android.os.Looper.loop(Looper.java:137)
09-29 23:56:25.706: E/AndroidRuntime(23196):    at android.app.ActivityThread.main(ActivityThread.java:4424)
09-29 23:56:25.706: E/AndroidRuntime(23196):    at java.lang.reflect.Method.invokeNative(Native Method)
09-29 23:56:25.706: E/AndroidRuntime(23196):    at java.lang.reflect.Method.invoke(Method.java:511)
09-29 23:56:25.706: E/AndroidRuntime(23196):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
09-29 23:56:25.706: E/AndroidRuntime(23196):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
09-29 23:56:25.706: E/AndroidRuntime(23196):    at dalvik.system.NativeStart.main(Native Method)
09-29 23:56:25.706: E/AndroidRuntime(23196): Caused by: java.lang.NullPointerException
09-29 23:56:25.706: E/AndroidRuntime(23196):    at com.yellowpages.Dbpages.fetchRecord(Dbpages.java:109)
09-29 23:56:25.706: E/AndroidRuntime(23196):    at com.yellowpages.Details.onCreate(Details.java:22)
09-29 23:56:25.706: E/AndroidRuntime(23196):    at android.app.Activity.performCreate(Activity.java:4465)
09-29 23:56:25.706: E/AndroidRuntime(23196):    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049)
09-29 23:56:25.706: E/AndroidRuntime(23196):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1920)
09-29 23:56:25.706: E/AndroidRuntime(23196):    ... 11 more




package com.yellowpages;

   import android.annotation.SuppressLint;
   import android.app.Activity;
    import android.content.Intent;
    import android.os.Bundle;
    import android.support.v4.app.NavUtils;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.EditText;
import android.widget.RadioButton;
import android.widget.Toast;

public class UserSearch extends Activity {
    public static String category="",pin="";
    @SuppressLint("NewApi")
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_user_search);
        getActionBar().setDisplayHomeAsUpEnabled(true);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.activity_user_search, menu);
        return true;
    }
    public void search(View v)
    {
        switch(v.getId())
        {               
        case R.id.button1:
            EditText et1= (EditText)findViewById(R.id.editText1);
            RadioButton r1 = (RadioButton) findViewById(R.id.radio0);
            RadioButton r2 = (RadioButton) findViewById(R.id.radio1);
            RadioButton r3 = (RadioButton) findViewById(R.id.radio2);
            RadioButton r4 = (RadioButton) findViewById(R.id.radio3);
            RadioButton r5 = (RadioButton) findViewById(R.id.radio4);
            RadioButton r6 = (RadioButton) findViewById(R.id.radio5);
            pin=et1.getText().toString();
            if(pin.length()==0){
                Toast.makeText(this, "Please provide Input!", Toast.LENGTH_SHORT).show();
                return;
            }
            if(r1.isChecked())
            {   category="All";
            Intent i=new Intent(this,Details.class);
            startActivity(i);
            }


            else if(r2.isChecked())
            {   
                category="Food";
                Intent i=new Intent(this,Details.class);
                startActivity(i);
            }

            else if(r3.isChecked())
            {   
                category="Entertainment";
                Intent i=new Intent(this,Details.class);
                startActivity(i);
            }

            else if(r4.isChecked())
            {   
                category="Shopping";
                Intent i=new Intent(this,Details.class);
                startActivity(i);
            }

            else if(r5.isChecked())
            {   
                category="Health";
                Intent i=new Intent(this,Details.class);
                startActivity(i);
            }

            else if (r6.isChecked())
            {   
                category="Services";
                Intent i=new Intent(this,Details.class);
                startActivity(i);

            }
             break;                     
        }
/*if(pin.length()!=0&&category.length()!=0)
{
    Intent i=new Intent(this,Details.class);
    startActivity(i);

}*/

    }


    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
            case android.R.id.home:
                NavUtils.navigateUpFromSameTask(this);
                return true;
        }
        return super.onOptionsItemSelected(item);
    }

}
4

3 に答える 3

0

これらの行は、問題が109行目のDbpages.javaにあることを示しています。

Caused by: java.lang.NullPointerException
    at com.yellowpages.Dbpages.fetchRecord(Dbpages.java:109)

null変数がであり、そのメソッドの1つにアクセスしようとすると、NullPointerExceptionが発生します。
これは109行目です。

Cursor c=mDb.query(DATABASE_TABLE, new String[] {KEY_ROWID,KEY_NAME,KEY_PHONE,KEY_CATEGORY,KEY_PINCODE},"KEY_PINCODE = ? AND KEY_CATEGORY =?",new String[]{pin,categ}, null, null, KEY_NAME);

1つの変数にアクセスしてmDb、を使用しようとしているだけ.query()です。しかし、それmDbnull、初期化したことはありません。したがって、NullPointerException。

回答データベースをクエリする前に
、を使用してデータベースを初期化する必要があります 。mDb = ...

于 2012-09-30T16:39:41.527 に答える
0

1 つのことを行います。変数をグローバルに宣言し、onclick の代わりに oncreate から初期化できます。

EditText et1= (EditText)findViewById(R.id.editText1);
    RadioButton r1 = (RadioButton) findViewById(R.id.radio0);
    RadioButton r2 = (RadioButton) findViewById(R.id.radio1);
    RadioButton r3 = (RadioButton) findViewById(R.id.radio2);
    RadioButton r4 = (RadioButton) findViewById(R.id.radio3);
    RadioButton r5 = (RadioButton) findViewById(R.id.radio4);
    RadioButton r6 = (RadioButton) findViewById(R.id.radio5);

ラジオボタンを選択しているときにラジオボタンがNullになっていると思うからです。または、正確な解決策を得るために、Activity Java クラス全体をここに投稿してください。

于 2012-09-29T18:53:20.607 に答える
0

静的変数を使用してパラメーターをアクティビティに渡すのはバグです。アプリがバックグラウンドにある場合、メモリを回復するためにシステムによって強制終了される場合があります。その後、アプリを前面に戻すと、アクティビティは復元されますが、グローバル変数は存在しなくなります。

あるアクティビティから別のアクティビティに文字列を適切に渡すには、この質問を参照してください: Pass a String from one Activity to another Activity in Android

次のようにする必要があります。

Intent i = new Intent(this, Details.class);
i.putExtra("category", "Food");
startActivity(i); 

および Details.class で:

String category = intent.getExtras().getString("category");

コードを投稿していないため、発生した例外がどこから来たのかはあまり明確ではありません。「categ」変数が正しく Details.category に初期化されていますか? とにかく、インテント エクストラを使用する必要があります。

于 2012-09-29T18:46:26.933 に答える