NullPointerException:尝试在空对象引用上调用虚方法'boolean java.lang.String.equals(java.lang.Object)'

时间:2015-03-05 02:05:37

标签: java android nullpointerexception

  

我在运行项目时遇到此错误。

     

java.lang.NullPointerException:尝试调用虚方法   空对象上的'boolean java.lang.String.equals(java.lang.Object)'   参考               在com.example.arhen.tugasrplii.Register $ InputData.onPostExecute(Register.java:100)

这是完整日志:

03-05 03:22:02.822    2575-2575/com.example.arhen.tugasrplii E/AndroidRuntime﹕ FATAL EXCEPTION: main
    Process: com.example.arhen.tugasrplii, PID: 2575
    **java.lang.NullPointerException: Attempt to invoke virtual method 'boolean java.lang.String.equals(java.lang.Object)' on a null object reference
            at com.example.arhen.tugasrplii.Register$InputData.onPostExecute(Register.java:100)**
            at com.example.arhen.tugasrplii.Register$InputData.onPostExecute(Register.java:54)
            at android.os.AsyncTask.finish(AsyncTask.java:632)
            at android.os.AsyncTask.access$600(AsyncTask.java:177)
            at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:645)
            at android.os.Handler.dispatchMessage(Handler.java:102)
            at android.os.Looper.loop(Looper.java:135)
            at android.app.ActivityThread.main(ActivityThread.java:5221)
            at java.lang.reflect.Method.invoke(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:372)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)

这是我在Register.java上的完整代码:

/**  * Created by arhen on 05/03/15.  */ 
public class Register extends Activity{
    ProgressDialog pDialog;
    JSONParser jsonParser = new JSONParser();

    EditText first_name,last_name,email,username,password;

    private static String url = "http://127.0.0.1/login/register.php";

    Button register;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        setContentView(R.layout.register);

        register   = (Button)findViewById(R.id.btn_register);
        first_name = (EditText)findViewById(R.id.fld_first);
        last_name  = (EditText)findViewById(R.id.fld_last);
        email      = (EditText)findViewById(R.id.fld_email);
        username   = (EditText)findViewById(R.id.fld_username);
        password   = (EditText)findViewById(R.id.fld_pwd);

        register.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View arg0) {
                // TODO Auto-generated method stub
                new InputData().execute();
            }
        });
    }

    public class InputData extends AsyncTask<String, String, String>{
        String success;
        @Override
        protected void onPreExecute() {
            super.onPreExecute();
            pDialog = new ProgressDialog(Register.this);
            pDialog.setMessage("Registering Account...");
            pDialog.setIndeterminate(false);
            pDialog.show();
        }

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

            String strfirst_name    = first_name.getText().toString();
            String strlast_name     = last_name.getText().toString();
            String stremail         = email.getText().toString();
            String strusername      = username.getText().toString();
            String strpassword      = password.getText().toString();

            List<NameValuePair> params = new ArrayList<NameValuePair>();
            params.add(new BasicNameValuePair("first_name",strfirst_name));
            params.add(new BasicNameValuePair("last_name",strlast_name));
            params.add(new BasicNameValuePair("email",stremail));
            params.add(new BasicNameValuePair("username",strusername));
            params.add(new BasicNameValuePair("password",strpassword));

            JSONObject json =
                    jsonParser.makeHttpRequest(url,
                            "POST", params);
            try {
                success = json.getString("success");
            } catch (Exception e) {
                runOnUiThread(new Runnable() {
                    public void run() {
                        Toast.makeText(getApplicationContext(), "Error", Toast.LENGTH_SHORT).show();
                    }
                });
            }
            return null;
        }

        protected void onPostExecute(String file_url) {
            // dismiss the dialog once done
            pDialog.dismiss();
            if (success.equals("1")) {
                Toast.makeText(getApplicationContext(),"Registration Succesfully",Toast.LENGTH_LONG).show();
            }else{
                Toast.makeText(getApplicationContext(),"Registration Failed",Toast.LENGTH_LONG).show();
            }
        }
    }

    @Override
    public void onBackPressed(){
        Intent i = new Intent(getApplicationContext(),Login.class);
        i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
        startActivity(i);
        finish();
    } }

我认为来自JSONParser.java的错误,这个代码:

/**
 * Created by arhen on 04/03/15.
 */
public class JSONParser {
    static InputStream is = null;
    static JSONObject jObj = null;
    static String json = "";
    // constructor
    public JSONParser() {
    }
    public JSONObject getJSONFromUrl(String url) {
// Making HTTP request
        try {
// defaultHttpClient
            DefaultHttpClient httpClient = new DefaultHttpClient();
            HttpPost httpPost = new HttpPost(url);
            HttpResponse httpResponse = httpClient.execute(httpPost);
            HttpEntity httpEntity = httpResponse.getEntity();
            is = httpEntity.getContent();
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        } catch (ClientProtocolException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        try {
            BufferedReader reader = new BufferedReader(new
                    InputStreamReader(
                    is, "iso-8859-1"), 8);
            StringBuilder sb = new StringBuilder();
            String line = null;
            while ((line = reader.readLine()) != null) {
                sb.append(line + "\n");
            }
            is.close();
            json = sb.toString();
        } catch (Exception e) {
            Log.e("Buffer Error", "Error converting result " +
                    e.toString());
        }
// try parse the string to a JSON object
        try {
            jObj = new JSONObject(json);
        } catch (JSONException e) {
            Log.e("JSON Parser", "Error parsing data " + e.toString());
        }
// return JSON String
        return jObj;
    }
    public JSONObject makeHttpRequest(String url, String method,
                                      List<NameValuePair> params) {
// Making HTTP request
        try {
// check for request method
            if (method == "POST") {
// request method is POST
// defaultHttpClient
                DefaultHttpClient httpClient = new
                        DefaultHttpClient();
                HttpPost httpPost = new HttpPost(url);
                httpPost.setEntity(new
                        UrlEncodedFormEntity(params));
                HttpResponse httpResponse =
                        httpClient.execute(httpPost);
                HttpEntity httpEntity = httpResponse.getEntity();
                is = httpEntity.getContent();
            } else if (method == "GET") {
// request method is GET
                DefaultHttpClient httpClient = new
                        DefaultHttpClient();
                String paramString =
                        URLEncodedUtils.format(params, "utf-8");
                url += "?" + paramString;
                HttpGet httpGet = new HttpGet(url);
                HttpResponse httpResponse =
                        httpClient.execute(httpGet);
                HttpEntity httpEntity = httpResponse.getEntity();
                is = httpEntity.getContent();
            }
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        } catch (ClientProtocolException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        try {
            BufferedReader reader = new BufferedReader(new
                    InputStreamReader(
                    is, "iso-8859-1"), 8);
            StringBuilder sb = new StringBuilder();
            String line = null;
            while ((line = reader.readLine()) != null) {
                sb.append(line + "\n");
            }
            is.close();
            json = sb.toString();
        } catch (Exception e) {
            Log.e("Buffer Error", "Error converting result " +
                    e.toString());
        }
// try parse the string to a JSON object
        try {
            jObj = new JSONObject(json);
        } catch (JSONException e) {
            Log.e("JSON Parser", "Error parsing data " + e.toString());
        }
// return JSON String
        return jObj;
    }
} 

这是我的register.php代码:

<?php
    $first_name = $_POST['first_name'];
    $last_name = $_POST['last_name'];
    $email = $_POST['email'];
    $username = $_POST['username'];
    $pwd = $_POST['password'];

    include 'koneksi.php';
    $namaTabel = "akun";

    header('Content-Type:text/xml');

    $query = "INSERT INTO $namaTabel VALUES('','$first_name','$last_name','$email','$username','$pwd')";
    $hasil = mysql_query($query);

    if($hasil)
    {
        $response["success"] = "1";
        $response["message"] = "Data has Input";
        echo json_encode($response);
    }
    else
        {$response["success"] = "0";
        $response["message"] = "Upss, Something Happens! Try again";
        // echoing JSON response
        echo json_encode($response);
}

?>

我看过这篇文章: What is a NullPointerException, and how do I fix it?

我试着给成功一个字符串:

String success ="";

但它没有工作..它给我的代码激活了这个语句错误:

runOnUiThread(new Runnable() {
                    public void run() {
                        Toast.makeText(getApplicationContext(), "Error", Toast.LENGTH_SHORT).show();
                    }
                });

我不知道。请帮助.. 非常感谢...

2 个答案:

答案 0 :(得分:0)

如果String success = ""不起作用,则此行可能会返回null:

success = json.getString("success");

您是否检查了要解析的JSON并验证了“成功”字段是否符合预期并且格式正确?

答案 1 :(得分:-3)

try {

    success = json.getString("success"); 
    int successFlag = Integer.parseInt(success);
    ...

使用此successFlag来比较0 / 1,然后执行进一步操作。