-1

我有一个按钮 n 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并且您尝试访问其方法之一时,会发生 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);

您只是试图访问一个变量mDb并使用.query(). 但是mDbnull您从未初始化过它。因此出现 NullPointerException。

回答
您需要 mDb = ...在尝试查询之前使用初始化数据库。

于 2012-09-30T16:39:41.527 回答
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 回答
0

做一件事,你可以全局声明变量并从oncreate而不是onclick初始化,

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);

因为我认为当您选择单选按钮时,单选按钮为空。或者请在此处发布您的整个 Activity java 类以获得确切的解决方案。

于 2012-09-29T18:53:20.607 回答