简体   繁体   中英

Error while sending data through volley, NullPointerException

the error is in the way im getting the IMEI of the device. the length or the procedure of that is giving me troubles. suggest a better way?

here is the error log: followed by the code.

E/Volley: [353] NetworkDispatcher.run: Unhandled exception 
java.lang.NullPointerException: Attempt to invoke virtual method 'int 
java.lang.String.length()' on a null object reference
      java.lang.NullPointerException: Attempt to invoke virtual method 'int 
java.lang.String.length()' on a null object reference
          at libcore.net.UriCodec.encode(UriCodec.java:132)
          at java.net.URLEncoder.encode(URLEncoder.java:57)
          at com.android.volley.Request.encodeParameters(Request.java:450)
          at com.android.volley.Request.getBody(Request.java:436)
          at 
   com.android.volley.toolbox.HurlStack.addBodyIfExists(HurlStack.java:260)
           at 

com.android.volley.toolbox.HurlStack.setConnectionParametersForRequest(HurlStack.java:234) at com.android.volley.toolbox.HurlStack.performRequest(HurlStack.java:107) at com.android.volley.toolbox.BasicNetwork.performRequest(BasicNetwork.java:96) at com.android.volley.NetworkDispatcher.run(NetworkDispatcher.java:112)


package com.medref;
import android.Manifest;
import android.content.Intent;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.design.widget.FloatingActionButton;
import android.support.v4.content.ContextCompat;
import android.support.v7.app.AlertDialog;
import android.support.v7.app.AppCompatActivity;
import android.telephony.TelephonyManager;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.RadioButton;
import android.widget.RadioGroup;
import android.widget.Spinner;
import android.widget.Toast;

import com.android.volley.AuthFailureError;
import com.android.volley.Request;
import com.android.volley.RequestQueue;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.StringRequest;
import com.android.volley.toolbox.Volley;

import java.util.ArrayList;
import java.util.Calendar;
import java.util.HashMap;
import java.util.Map;

public class Signup extends AppCompatActivity{

    Spinner spinner, date, month, year;
    EditText Username, Password, Phnumber;
    FloatingActionButton Signup;
    RadioGroup radioGroup;
    RadioButton radioButton;

    String Selecteddates, Selectedyear;
    String Dob;
    String m_deviceId;

    String Bloodgroups[] = new String[]{"Not Known","O+","O-","A+","A-","B+","B-","AB+","AB-"};
    String dates[] = new String[]{"Day","31", "30", "29","28", "27", "26", "25", "24", "23", "22", "21", "20", "19", "18",
    "17", "16", "15", "14", "13", "12", "11", "10", "9", "8", "7", "6", "5", "4", "3", "2", "1"};

    String months[] = new String[]{"Month","01", "02", "03", "04", "05", "06", "07", "08",
    "09", "10", "11", "12"};

    ArrayAdapter<String> adapter, dayAdapter, MonthAdapter;
    String userName, phNumber, password, gender, bloodGroup;
    String monthtonumber = "";

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

        try{
            TelephonyManager TelephonyMgr = (TelephonyManager)getSystemService(TELEPHONY_SERVICE);
            m_deviceId = TelephonyMgr.getDeviceId();
        }catch (Exception e){}

        spinner = (Spinner) findViewById(R.id.spinner);
        date = (Spinner) findViewById(R.id.date);
        month = (Spinner) findViewById(R.id.month);
        year = (Spinner) findViewById(R.id.year);

        Username = (EditText) findViewById(R.id.Username);
        Password = (EditText) findViewById(R.id.Password);
        Phnumber = (EditText) findViewById(R.id.PhNumber);

        radioGroup = (RadioGroup) findViewById(R.id.gender);

        Signup = (FloatingActionButton) findViewById(R.id.Signup);

        adapter = new ArrayAdapter(Signup.this, R.layout.support_simple_spinner_dropdown_item, Bloodgroups);
        spinner.setAdapter(adapter);

        dayAdapter = new ArrayAdapter(Signup.this, R.layout.support_simple_spinner_dropdown_item, months);
        date.setAdapter(dayAdapter);

        MonthAdapter = new ArrayAdapter(Signup.this, R.layout.support_simple_spinner_dropdown_item, dates);
        month.setAdapter(MonthAdapter);

        ////////adding years to the array through a loop
        ArrayList<String> years = new ArrayList<>();
        years.add("Year");
        int thisYear = Calendar.getInstance().get(Calendar.YEAR);
        for (int i = 1960; i <= thisYear; i++) {
            years.add(Integer.toString(i));
        }

        ArrayAdapter<String> adapter = new ArrayAdapter<>(this, android.R.layout.simple_spinner_item, years);
        year.setAdapter(adapter);

        Signup.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if(getVerification()){
                    //Getting RadioButton Id
                    int id = radioGroup.getCheckedRadioButtonId();
                    radioButton = (RadioButton) findViewById(id);
                    gender = radioButton.getText().toString();

                    /////COncatinating DOb
                    Dob = Selectedyear+"-"+Selecteddates+"-"+monthtonumber;

                    //Getting all the field valuesn
                    userName = Username.getText().toString().trim();
                    phNumber = Phnumber.getText().toString().trim();
                    password = Password.getText().toString().trim();

                    try {
                        //Now we have everything, lets send the data to our database
                        String url = "http://192.168.1.9/loginfiles/sendvalues.php";

                        StringRequest stringRequest = new StringRequest(Request.Method.POST, url,
                                new Response.Listener<String>() {
                                    @Override
                                    public void onResponse(String response) {

                                        if (response.equals("10")) {
                                            Toast.makeText(Signup.this, "No connection"
                                                    , Toast.LENGTH_SHORT).show();
                                        } else {
                                            Intent i = new Intent(com.medref.Signup.this, MainActivity.class);
                                            startActivity(i);
                                        }
                                    }
                                }, new Response.ErrorListener() {
                            @Override
                            public void onErrorResponse(VolleyError error) {
                                Toast.makeText(Signup.this, error.getMessage(), Toast.LENGTH_SHORT).show();
                            }
                        }) {
                            @Override
                            protected Map<String, String> getParams() throws AuthFailureError {

                                Map<String, String> params = new HashMap<>();
                                params.put("name", userName);
                                params.put("number", phNumber);
                                params.put("password", password);
                                params.put("dob", Dob);
                                params.put("gender", gender);
                                params.put("bloodGroup", bloodGroup);
                                params.put("deviceid", m_deviceId);
                                return params;
                            }
                        };

                        RequestQueue requestQueue = Volley.newRequestQueue(Signup.this);
                        requestQueue.add(stringRequest);
                    }catch (Exception e){
                        Toast.makeText(com.medref.Signup.this, e.getMessage(),Toast.LENGTH_LONG).show();
                    }

                }else{
                    Toast.makeText(Signup.this, "Please fill out the form", Toast.LENGTH_SHORT).show();
                }
            }
        });

        spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
            @Override
            public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
                bloodGroup = parent.getItemAtPosition(position).toString();
            }

            @Override
            public void onNothingSelected(AdapterView<?> parent) {

            }
        });

        date.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
            @Override
            public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
                Selecteddates = parent.getItemAtPosition(position).toString();
            }

            @Override
            public void onNothingSelected(AdapterView<?> parent) {

            }
        });

        month.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
            @Override
            public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
               monthtonumber = parent.getItemAtPosition(position).toString();
            }

            @Override
            public void onNothingSelected(AdapterView<?> parent) {

            }
        });

        year.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
            @Override
            public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
                Selectedyear= parent.getItemAtPosition(position).toString();
            }

            @Override
            public void onNothingSelected(AdapterView<?> parent) {

            }
        });
    }

    protected boolean getVerification(){
        if(Username.getText().toString().trim().equals("")){
            Username.setError("Empty");
            return false;
        }else if(Phnumber.getText().toString().trim().equals("")){
            Phnumber.setError("Empty");
            return false;
        }else if(Password.getText().toString().trim().equals("")){
            Password.setError("Empty");
            return false;
        }else if(Selecteddates.equals("") || Selectedyear.equals("")){
            return false;
        }else{
            return true;
        }
    }
}    

You can't compare your response String with '10'. Firstly you should declare

JSONObject jObj = new JSONObject(response);

and then get your JSON values used getString method.

String variable = jObj.getString("some_var");
if (variable.equals("10")) { ... }

Anyway it's still not a reason why your error occurs.

Try to deletle this line and check the error still appears:

Toast.makeText(Signup.this, error.getMessage(), Toast.LENGTH_SHORT).show();

Please edit your question and add full error logs.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM