-2

我已经为我的应用程序开发了登录和重新注册活动,但是当我单击或注册以将输入存储到数据库时,应用程序崩溃并出现以下错误

我在这里和其他地方检查过类似的错误,但没有一个给我我正在寻找的东西,这是精确的解决方案。我希望能得到一个。

03-16 00:19:33.783 32002-32002/com.example.lecevaluation E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.example.lecevaluation, PID: 32002
    java.lang.NullPointerException
        at com.example.lecevaluation.RegisterActivity.submitForm(RegisterActivity.java:91)
        at com.example.lecevaluation.RegisterActivity.access$000(RegisterActivity.java:26)
        at com.example.lecevaluation.RegisterActivity$1.onClick(RegisterActivity.java:61)
        at android.view.View.performClick(View.java:4508)
        at android.view.View$PerformClick.run(View.java:18675)
        at android.os.Handler.handleCallback(Handler.java:733)
        at android.os.Handler.dispatchMessage(Handler.java:95)
        at android.os.Looper.loop(Looper.java:136)
        at android.app.ActivityThread.main(ActivityThread.java:5590)
        at java.lang.reflect.Method.invokeNative(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:515)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1280)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1096)
        at dalvik.system.NativeStart.main(Native Method)

当我单击登录按钮时,它会出现此错误。

03-16 00:23:51.875 3027-3027/com.example.lecevaluation E/LoginActivity: Login Error: java.net.ConnectException: failed to connect to /127.0.0.1 (port 443) after 2500ms: isConnected failed: ECONNREFUSED (Connection refused)
03-16 00:23:51.985 3027-3027/com.example.lecevaluation E/ViewRootImpl: sendUserActionEvent() mView == null

这是我的 RegisterActivity.java

package com.example.lecevaluation;

import android.app.ProgressDialog;
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.WindowManager;
import android.widget.Button;
import android.widget.EditText;
import android.widget.RadioGroup;
import android.widget.Toast;

import com.android.volley.Request;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.StringRequest;

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

import java.util.HashMap;
import java.util.Map;

public class RegisterActivity extends AppCompatActivity {

    private static final String TAG = "RegisterActivity";
    private static final  String URL_FOR_REGISTRATION = "http://127.0.0.1/android_login/register.php";
    ProgressDialog progressDialog;

    private EditText SignupInputFirstName,SignupInputLastName,SignupInputRegNo, SignupInputEmail, SignupInputPassword;
    private Button btnSignup;
    private Button btnLinkLogin;
    private RadioGroup genderRadioGroup;

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

        //To avoid auto popping of the keyboard
        this.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);

        //process Dialog
        progressDialog = new ProgressDialog(this);
        progressDialog.setCancelable(false);

        SignupInputFirstName = (EditText) findViewById(R.id.signup_input_FirstName);
        SignupInputLastName = (EditText) findViewById(R.id.signup_input_LastName);
        SignupInputRegNo = (EditText) findViewById(R.id.signup_input_regNo);
        SignupInputEmail = (EditText) findViewById(R.id.signup_input_email);

        btnLinkLogin = (Button) findViewById(R.id.btn_link_login);
        btnSignup = (Button) findViewById(R.id.btn_signup);

        genderRadioGroup = (RadioGroup) findViewById(R.id.gender_radio_group);
        btnSignup.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                submitForm();
            }
        });
        btnLinkLogin.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent i = new Intent(getApplicationContext(),MainActivity.class);
                startActivity(i);
            }
        });



    }

    private void submitForm(){

        int selectedId = genderRadioGroup.getCheckedRadioButtonId();
        String gender;
        if (selectedId == R.id.female_radio_btn)
                gender = "Female";
        else
            gender = "Male";

        registerUser(
                SignupInputFirstName.getText().toString(),
                SignupInputLastName.getText().toString(),
                SignupInputRegNo.getText().toString(),
                SignupInputEmail.getText().toString(),
                gender,
                SignupInputPassword.getText().toString());
    }

    private void registerUser(final String first_name, final String last_name,final String reg_no,
                              final String email, final String password, final String gender){
        //Tag used to cancel the request
        String cancel_req_tag = "register";

        progressDialog.setMessage("Registering you...");
        showDialog();

        StringRequest strReq = new StringRequest(Request.Method.POST,
                URL_FOR_REGISTRATION, new Response.Listener<String>() {
            @Override
            public void onResponse(String response) {
                Log.d(TAG, "Response: " + response.toString());
                hideDialog();

                try {
                    JSONObject jObj = new JSONObject(response);
                    boolean error = jObj.getBoolean("error");

                    if (!error) {
                        String user = jObj.getJSONObject("user").getString("first_name");
                        Toast.makeText(getApplicationContext(), "Hello " + user + ", You are successfully Registered!", Toast.LENGTH_SHORT).show();

                        // Launch login activity
                        Intent intent = new Intent(
                                RegisterActivity.this,
                                MainActivity.class);
                        startActivity(intent);
                        finish();
                    } else {

                        String errorMsg = jObj.getString("error_msg");
                        Toast.makeText(getApplicationContext(),
                                errorMsg, Toast.LENGTH_LONG).show();
                    }
                } catch (JSONException e) {
                    e.printStackTrace();
                }
            }
        }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                Log.e(TAG,"Registration Error: " + error.getMessage());
                Toast.makeText(getApplicationContext(),
                        error.getMessage(), Toast.LENGTH_LONG).show();
                hideDialog();
            }
        }) {
            @Override
            protected Map<String, String> getParams() {
                // Posting params to register url
                Map<String, String> params = new HashMap<String, String>();
                params.put("F_name", first_name);
                params.put("L_name", last_name);
                params.put("reg_no", reg_no);
                params.put("email", email);
                params.put("password", password);
                params.put("gender", gender);
                return params;
            }
        };
        //Adding request to request queue
        AppSingleton.getInstance(getApplicationContext()).addToRequestQueue(strReq, cancel_req_tag);
    }

    private void showDialog(){
        if (!progressDialog.isShowing())
            progressDialog.show();
    }

    private void hideDialog(){
        if (progressDialog.isShowing())
            progressDialog.dismiss();
    }
}

这是我的登录页面 MainActivity.java

package com.example.lecevaluation;

import android.app.ProgressDialog;
import android.content.Intent;
import android.graphics.Color;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.WindowManager;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;

import com.android.volley.Request;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.StringRequest;

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

import java.util.HashMap;
import java.util.Map;

public class MainActivity extends AppCompatActivity {

    private static final String TAG = "LoginActivity";
    private static final String URL_FOR_LOGIN = "https://127.0.0.1/android_login/login.php";
    /**
     * the url is  C:\xampp/htdocs\android_login\login.php
     */

    ProgressDialog progressDialog;
    private EditText loginInputregNo, loginInputPassword;
    private Button btnlogin;
    private Button btnLinkSignup;
    TextView textView;
    int counter = 3;

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

        loginInputregNo = (EditText) findViewById(R.id.login_input_regNo);
        loginInputPassword = (EditText) findViewById(R.id.login_input_password);
        btnlogin = (Button) findViewById(R.id.btn_login);
        btnLinkSignup = (Button) findViewById(R.id.btn_link_signup);
        textView = (TextView)findViewById(R.id.textView3);
        textView.setVisibility(View.GONE);

        //Progress Dialog
        progressDialog = new ProgressDialog(this);
        progressDialog.setCancelable(false);

        //To avoid auto popping of the keyboard
        this.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);

        btnlogin.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                loginUser(loginInputregNo.getText().toString(),
                        loginInputPassword.getText().toString());
            }
        });

        btnLinkSignup.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent i = new Intent(getApplicationContext(), RegisterActivity.class);
                startActivity(i);
            }
        });
    }

    private void loginUser(final String reg_no, final String password){
        //Tag used to cancel the request
        String cancel_req_tag = "login";
        progressDialog.setMessage("Logging you in ...");
        showDialog();
        StringRequest strReq = new StringRequest(Request.Method.POST,
                URL_FOR_LOGIN, new Response.Listener<String>() {
            @Override
            public void onResponse(String response) {
                Log.d(TAG, "Register Response: " + response.toString()
                );
                hideDialog();
                try {
                    JSONObject jObj = new JSONObject(response);
                    boolean error = jObj.getBoolean("error");

                    if (!error){
                        String User = jObj.getJSONObject("user").getString("reg_no");

                        /**
                         * Launch User Activity
                         * Reached Here
                         */Intent intent = new Intent(
                                MainActivity.this,
                                UserActivity.class);
                        intent.putExtra("reg_no" //or regNo or username
                                , User);
                        startActivity(intent);
                        finish();
                    } else {

                        String errorMsg = jObj.getString("error_msg");
                        Toast.makeText(getApplicationContext(),
                                errorMsg, Toast.LENGTH_LONG).show();

                        textView.setVisibility(View.VISIBLE);
                        textView.setBackgroundColor(Color.RED);
                        counter--;
                        textView.setText(Integer.toString(counter));

                        if (counter == 0) {
                            btnlogin.setEnabled(false);
                        }
                    }
                } catch (JSONException e) {
                    e.printStackTrace();
                }

            }
        }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                Log.e(TAG, "Login Error: " + error.getMessage());
                Toast.makeText(getApplicationContext(),
                        error.getMessage(), Toast.LENGTH_LONG).show();
                hideDialog();
            }
        }) {
            @Override
            protected Map<String, String> getParams() {
                // Posting params to login url
                Map<String, String> params = new HashMap<String, String>();
                params.put("reg_no", reg_no);
                params.put("password", password);
                return params;
            }
        };
        // Adding request to request queue
        AppSingleton.getInstance(getApplicationContext()).addToRequestQueue(strReq,cancel_req_tag);
    }

    private void showDialog() {
        if (!progressDialog.isShowing())
            progressDialog.show();
    }
    private void hideDialog() {
        if (progressDialog.isShowing())
            progressDialog.dismiss();
    }
}
4

1 回答 1

1

对于将来遇到此错误的任何人,经过数小时的搜索后,我得到了解决方案。

下面的错误通常是由于 url 连接问题造成的。

java.net.ConnectException: failed to connect to /127.0.0.1 (port 443) after 2500ms: isConnected failed: ECONNREFUSED (Connection refused)

如果您使用的是本地服务器,请确保 url 中的 IP 地址与您连接的 IP 地址相同。

  • 对于窗户使用:ipconfig
  • 对于任何 debian 发行版,请使用:ifconfig

对于 url,在您的 Java 活动中,确保它是http而不是https

例子;

private static final  String URL_FOR_REGISTRATION = "http://192.168.168.1/android_login/register.php";

希望有帮助。它对我有用。

于 2019-03-18T11:56:06.847 回答