0

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;
        }
    }
}    
  • post the error log & the line where it gets NullPointerException – Solaiman Hossain May 25 '17 at 20:02
  • Volley: [359] 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 – basit tahir May 25 '17 at 20:19
  • i haven't used any string.length() methods in this class, but seems to be an error with the network dispatcher. – basit tahir May 25 '17 at 20:20
  • Have you tested this same URL outside of android? – OneCricketeer May 25 '17 at 20:46
  • kindly follow this thread [here](https://stackoverflow.com/questions/33017832/volleyplus-networkdispatcher-run-unhandled-exception-java-lang-nullpointerexc) – Solaiman Hossain May 25 '17 at 20:50
  • yes the URL works and is returning a JSON formatted data. – basit tahir May 25 '17 at 20:56
  • reference this link https://stackoverflow.com/questions/3802644/will-telephonymanger-getdeviceid-return-device-id-for-tablets-like-galaxy-tab Hope Help you – VictorPanda May 25 '17 at 23:07
  • hi victor, i was able to solve the error, it was a logical one. my phone was not allowing me to get the PHONES IMEI info. that there was a null object. so the params funtion of the VOLLEY was giving the error. – basit tahir May 26 '17 at 12:53

1 Answers1

-1

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.

Michał B
  • 62
  • 1
  • 6
  • i have made the edit, can you look at it, been fussing over this for 5 hours. – basit tahir May 25 '17 at 20:42
  • You should check if `response` is empty before making it a JSONObject. Also, how do you know JSON is returned? – OneCricketeer May 25 '17 at 20:44
  • json is returning for other classes that i have implimented. they are all using almost the same code. – basit tahir May 25 '17 at 20:49
  • When I answered there were no error log. You can use some postman app for check yours http request's. I like to used https://chrome.google.com/webstore/detail/advanced-rest-client/hgmloofddffdnphfgcellkdfbfbjeloo – Michał B May 26 '17 at 06:49