onclick监听器的Android Null指针异常

时间:2014-12-19 05:54:05

标签: java android nullpointerexception

以下代码给出了空指针异常,即使我找不到代码有什么问题。尝试评论它似乎工作。但仍然无法找出代码有什么问题?我试图自己解决注释代码等问题,现在下面的代码给了我nullpointer异常

Log Cat

> 12-19 05:49:14.833: E/AndroidRuntime(3392): Caused by:
> java.lang.NullPointerException: Attempt to invoke virtual method 'void
> android.widget.Button.setOnClickListener(android.view.View$OnClickListener)'
> on a null object reference 12-19 05:49:14.833: E/AndroidRuntime(3392):
>   at
> com.techiequickie.bharath.boadraf.newBet_activity.onCreate(newBet_activity.java:80)

代码:

package com.techiequickie.bhr.boadraf;

import android.content.Intent;
import android.os.AsyncTask;
import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.view.Gravity;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.SeekBar;
import android.widget.Toast;

import org.json.JSONException;
import org.json.JSONObject;

import databasehandler.DatabaseHandler;
import databasehandler.UserFunctions;

/**
 * Created by YP on 17-Nov-14.
 */
public class newBet_activity extends ActionBarActivity
{
    EditText inputBetname, inputBetbrief, inputBetdescription;
    SeekBar valueSeekbar; //= null;
    Button placeBet;


    // JSON Response node names
    private static String KEY_SUCCESS = "success";
    @SuppressWarnings("unused")
    private static String KEY_ERROR = "error";
    @SuppressWarnings("unused")
    private static String KEY_ERROR_MSG = "error_msg";
    //private static String KEY_UID = "uid";
    private static String KEY_BETNAME = "bet_name";
    private static String KEY_BETBRIEF = "bet_brief";
    private static String KEY_BETDESCRIPTION = "bet_description";
    private static String KEY_BETVALUE = "bet_value";
   // private static String KEY_CREATED_AT = "created_at";


    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.newbet);
        // Importing all assets like buttons, text fields
        inputBetname = (EditText) findViewById(R.id.betName_et);
        inputBetbrief = (EditText) findViewById(R.id.betBriefDescription_et);
        inputBetdescription = (EditText) findViewById(R.id.betDescription_et);
        placeBet = (Button) findViewById(R.id.btn_newbet);

        //valueSeekbar = (SeekBar) findViewById(R.id.betValue_bar);

        /*
        valueSeekbar.setOnSeekBarChangeListener
       (

         new SeekBar.OnSeekBarChangeListener()
        {
            int progressChanged = 0;

            public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
                progressChanged = progress;
            }

            public void onStartTrackingTouch(SeekBar seekBar) {
                // TODO Auto-generated method stub
            }

            public void onStopTrackingTouch(SeekBar seekBar) {
                Toast.makeText(newBet_activity.this, "seek bar progress:" + progressChanged, Toast.LENGTH_SHORT).show();
            }
        }
       );*/


        placeBet.setOnClickListener(new View.OnClickListener()
         {


            public void onClick(View view)
            {
                String betname = inputBetname.getText().toString();
                String betBrief = inputBetbrief.getText().toString();
                String betDescription = inputBetdescription.getText().toString();
                //StringBuilder betValue = ((toString()) valueSeekbar.getProgress());

                //new BetRegisterTask().execute(betname,betBrief,betDescription);
            }
         }
        );


    }

/*
        class BetRegisterTask extends AsyncTask<String, Void, String>
        {

            @Override
            protected String doInBackground(String... params)
            {

                UserFunctions userFunction = new UserFunctions();
                JSONObject json = userFunction.createBet(params[0], params[1], params[2]);

                // check for login response
                try
                {
                    if (json.getString(KEY_SUCCESS) != null)
                    {

                        String res = json.getString(KEY_SUCCESS);
                        if (Integer.parseInt(res) == 1)
                        {
                            // user successfully registred
                            // Store user details in SQLite Database
                            DatabaseHandler db = new DatabaseHandler(getApplicationContext());
                            JSONObject json_user = json.optJSONObject("user");

                            // Clear all previous data in database
                            userFunction.logoutUser(getApplicationContext());
                            db.newBet(json_user.getString(KEY_BETNAME), json_user.getString(KEY_BETBRIEF), json.getString(KEY_BETDESCRIPTION));
                            return "1";

                        }

                    }
                } catch (JSONException e)
                {
                    e.printStackTrace();
                }

                return "0";
            }

            @Override
            protected void onPostExecute(String s)
            {
                super.onPostExecute(s);
                if (s.equals("1"))
                {

                    // Launch Dashboard Screen
                    Intent dashboard = new Intent(getApplicationContext(), Loginactivity.class);
                    // Close all views before launching Dashboard
                    dashboard.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                    startActivity(dashboard);
                    // Close Registration Screen
                    finish();
                    showToastforSucessfulBetCreation();

                }
                else
                {
                    // Error in registration
                    //registerErrorMsg.setText("Error occurred in registration");
                    showToastforUnsucessfulBetCreation();
                }
            }
        }*/

    public void showToastforSucessfulBetCreation() {
        Toast toast = Toast.makeText(this, "Registration Sucessfull", Toast.LENGTH_LONG);
        toast.setGravity(Gravity.BOTTOM, 0, 30);
        toast.show();

    }


    public void showToastforUnsucessfulBetCreation() {
        Toast toast = Toast.makeText(this, "Registration UnSucessfull", Toast.LENGTH_LONG);
        toast.setGravity(Gravity.BOTTOM, 0, 30);
        toast.show();

    }

}

package com.techiequickie.bhr.boadraf; import android.content.Intent; import android.os.AsyncTask; import android.os.Bundle; import android.support.v7.app.ActionBarActivity; import android.view.Gravity; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.SeekBar; import android.widget.Toast; import org.json.JSONException; import org.json.JSONObject; import databasehandler.DatabaseHandler; import databasehandler.UserFunctions; /** * Created by YP on 17-Nov-14. */ public class newBet_activity extends ActionBarActivity { EditText inputBetname, inputBetbrief, inputBetdescription; SeekBar valueSeekbar; //= null; Button placeBet; // JSON Response node names private static String KEY_SUCCESS = "success"; @SuppressWarnings("unused") private static String KEY_ERROR = "error"; @SuppressWarnings("unused") private static String KEY_ERROR_MSG = "error_msg"; //private static String KEY_UID = "uid"; private static String KEY_BETNAME = "bet_name"; private static String KEY_BETBRIEF = "bet_brief"; private static String KEY_BETDESCRIPTION = "bet_description"; private static String KEY_BETVALUE = "bet_value"; // private static String KEY_CREATED_AT = "created_at"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.newbet); // Importing all assets like buttons, text fields inputBetname = (EditText) findViewById(R.id.betName_et); inputBetbrief = (EditText) findViewById(R.id.betBriefDescription_et); inputBetdescription = (EditText) findViewById(R.id.betDescription_et); placeBet = (Button) findViewById(R.id.btn_newbet); //valueSeekbar = (SeekBar) findViewById(R.id.betValue_bar); /* valueSeekbar.setOnSeekBarChangeListener ( new SeekBar.OnSeekBarChangeListener() { int progressChanged = 0; public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { progressChanged = progress; } public void onStartTrackingTouch(SeekBar seekBar) { // TODO Auto-generated method stub } public void onStopTrackingTouch(SeekBar seekBar) { Toast.makeText(newBet_activity.this, "seek bar progress:" + progressChanged, Toast.LENGTH_SHORT).show(); } } );*/ placeBet.setOnClickListener(new View.OnClickListener() { public void onClick(View view) { String betname = inputBetname.getText().toString(); String betBrief = inputBetbrief.getText().toString(); String betDescription = inputBetdescription.getText().toString(); //StringBuilder betValue = ((toString()) valueSeekbar.getProgress()); //new BetRegisterTask().execute(betname,betBrief,betDescription); } } ); } /* class BetRegisterTask extends AsyncTask<String, Void, String> { @Override protected String doInBackground(String... params) { UserFunctions userFunction = new UserFunctions(); JSONObject json = userFunction.createBet(params[0], params[1], params[2]); // check for login response try { if (json.getString(KEY_SUCCESS) != null) { String res = json.getString(KEY_SUCCESS); if (Integer.parseInt(res) == 1) { // user successfully registred // Store user details in SQLite Database DatabaseHandler db = new DatabaseHandler(getApplicationContext()); JSONObject json_user = json.optJSONObject("user"); // Clear all previous data in database userFunction.logoutUser(getApplicationContext()); db.newBet(json_user.getString(KEY_BETNAME), json_user.getString(KEY_BETBRIEF), json.getString(KEY_BETDESCRIPTION)); return "1"; } } } catch (JSONException e) { e.printStackTrace(); } return "0"; } @Override protected void onPostExecute(String s) { super.onPostExecute(s); if (s.equals("1")) { // Launch Dashboard Screen Intent dashboard = new Intent(getApplicationContext(), Loginactivity.class); // Close all views before launching Dashboard dashboard.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); startActivity(dashboard); // Close Registration Screen finish(); showToastforSucessfulBetCreation(); } else { // Error in registration //registerErrorMsg.setText("Error occurred in registration"); showToastforUnsucessfulBetCreation(); } } }*/ public void showToastforSucessfulBetCreation() { Toast toast = Toast.makeText(this, "Registration Sucessfull", Toast.LENGTH_LONG); toast.setGravity(Gravity.BOTTOM, 0, 30); toast.show(); } public void showToastforUnsucessfulBetCreation() { Toast toast = Toast.makeText(this, "Registration UnSucessfull", Toast.LENGTH_LONG); toast.setGravity(Gravity.BOTTOM, 0, 30); toast.show(); } }

2 个答案:

答案 0 :(得分:1)

placeBet尚未初始化,这就是它给出空指针异常的原因

检查以下行

 palceBet=findViewId(R.id.btn_newbet);

答案 1 :(得分:0)

您似乎没有在.xml文件中创建带有id btn_newbet的Button。 所以要找到你是否在xml文件中定义这个按钮,你应该把光标放在btn_newbet上   placeBet =(Button)findViewById(R.id.btn_newbet); 如果点击,它将重定向到正确的xml。