简体   繁体   中英

Error converting result java.lang.NullPointerException: lock == null, Why tthis error?

This is the logcat

  D/request!(1826): [mtd=empLog, request[cmp_id]=, request[user_name]=sureshsk_cepl, request[password]=ceplvalrep2014, request[remember]=1, Phone_type=Android]
    I/Choreographer(1826): Skipped 39 frames!  The application may be doing too much work on its main thread.
    I/art(1826): Background sticky concurrent mark sweep GC freed 1612(81KB) AllocSpace objects, 0(0B) LOS objects, 19% free, 829KB/1026KB, paused 4.407ms total 114.250ms
    W/System.err(1826): org.apache.http.conn.HttpHostConnectException: Connection to http://localhost refused
    W/System.err(1826):     at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:183)
    W/System.err(1826):     at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:164)
    W/System.err(1826):     at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:119)
    W/System.err(1826):     at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:360)
    W/System.err(1826):     at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:555)
    W/System.err(1826):     at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487)
    W/System.err(1826):     at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:465)
    W/System.err(1826):     at com.cepl.valrep.adapter.JSONParser.makeHttpRequest(JSONParser.java:52)
    W/System.err(1826):     at com.cepl.valrep.MainActivity$Login.doInBackground(MainActivity.java:120)
    W/System.err(1826):     at com.cepl.valrep.MainActivity$Login.doInBackground(MainActivity.java:1)
    W/System.err(1826):     at android.os.AsyncTask$2.call(AsyncTask.java:288)
    W/System.err(1826):     at java.util.concurrent.FutureTask.run(FutureTask.java:237)
    W/System.err(1826):     at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
    W/System.err(1826):     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
    W/System.err(1826):     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
    W/System.err(1826):     at java.lang.Thread.run(Thread.java:818)
    W/System.err(1826): Caused by: java.net.ConnectException: failed to connect to /127.0.0.1 (port 80): connect failed: ECONNREFUSED (Connection refused)
    W/System.err(1826):     at libcore.io.IoBridge.connect(IoBridge.java:124)
    W/System.err(1826):     at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:183)
    W/System.err(1826):     at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:456)
    W/System.err(1826):     at java.net.Socket.connect(Socket.java:882)
    W/System.err(1826):     at org.apache.http.conn.scheme.PlainSocketFactory.connectSocket(PlainSocketFactory.java:119)
    W/System.err(1826):     at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:144)
    W/System.err(1826):     ... 15 more
    W/System.err(1826): Caused by: android.system.ErrnoException: connect failed: ECONNREFUSED (Connection refused)
    W/System.err(1826):     at libcore.io.Posix.connect(Native Method)
    W/System.err(1826):     at libcore.io.BlockGuardOs.connect(BlockGuardOs.java:111)
    W/System.err(1826):     at libcore.io.IoBridge.connectErrno(IoBridge.java:137)
    W/System.err(1826):     at libcore.io.IoBridge.connect(IoBridge.java:122)
    W/System.err(1826):     ... 20 more
    E/Buffer Error(1826): Error converting result java.lang.NullPointerException: lock == null
    E/JSON Parser(1826): Error parsing data org.json.JSONException: End of input at character 0 of 
    W/System.err(1826): java.lang.NullPointerException: Attempt to invoke virtual method 'int org.json.JSONObject.getInt(java.lang.String)' on a null object reference
    W/System.err(1826):     at com.cepl.valrep.MainActivity$Login.doInBackground(MainActivity.java:126)
    W/System.err(1826):     at com.cepl.valrep.MainActivity$Login.doInBackground(MainActivity.java:1)
    W/System.err(1826):     at android.os.AsyncTask$2.call(AsyncTask.java:288)
    W/System.err(1826):     at java.util.concurrent.FutureTask.run(FutureTask.java:237)
    W/System.err(1826):     at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
    W/System.err(1826):     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
    W/System.err(1826):     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
    W/System.err(1826):     at java.lang.Thread.run(Thread.java:818)
    I/System.out(1826): Some error occurs

This is my JAVA code

public class MainActivity extends Activity implements OnClickListener{

    private EditText Edit_UserName,Edit_Password;
    private Button Login;
    private RadioButton Remember;
    TextView textview;

    HttpPost httppost;
    StringBuffer buffer;
    HttpResponse response;
    HttpClient httpclient;
    List<NameValuePair> nameValuePairs;
    ProgressDialog dialog = null;

    JSONParser jsonParser = new JSONParser(); 
    private static String url_login = "http://localhost/valrep/php/request.php?c=employee";
    private static final String TAG_SUCCESS = "success";
    private static final String TAG_MESSAGE = "message";

    static String mtd;
    static String cmp_id;
    static String login_username;
    static String login_password;
    String remember="0";

    AsyncTask<Void, Void, Void> mRegisterTask;

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

        Edit_UserName = (EditText)findViewById(R.id.txtUserName);
        Edit_Password = (EditText)findViewById(R.id.txtDate);
        Login = (Button) findViewById(R.id.btnLogin);       
        Remember = (RadioButton)findViewById(R.id.btnCheckin);
        textview = (TextView)findViewById(R.id.textView1);

//      Remember.setOnClickListener(this);
        Login.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {

        switch (v.getId()) {
        case R.id.btnLogin:
            login_username = Edit_UserName.getText().toString();
            login_password = Edit_Password.getText().toString();

            if (Remember.isChecked()) {
                remember = "1";
            }else {
                remember = "0";
            }

            new Login().execute();

//          httpclient=new DefaultHttpClient();
//          httppost= new HttpPost(url_login);
        }
    }   
        class Login extends AsyncTask<String, String, String>{

             boolean failure = false;
             private JSONArray jsonarray=null;

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

                    int success;

                    try{
                        nameValuePairs = new ArrayList<NameValuePair>();
                        List<NameValuePair> params = new ArrayList<NameValuePair>();
                        params.add(new BasicNameValuePair("mtd", "empLog"));
                        params.add(new BasicNameValuePair("request[cmp_id]", ""));
                        params.add(new BasicNameValuePair("request[user_name]", login_username));
                        params.add(new BasicNameValuePair("request[password]", login_password));
                        params.add(new BasicNameValuePair("request[remember]", remember));
                        params.add(new BasicNameValuePair("Phone_type", "Android"));
//                      httppost.setEntity(new UrlEncodedFormEntity(params));

                        Log.d("request!", params.toString());

                        JSONObject json = jsonParser.makeHttpRequest(url_login, "POST", params);

//                      HttpResponse response = httpclient.execute(httppost);
//                      
//                      Log.d("request!",json.toString());

                        success = json.getInt(TAG_SUCCESS);

                        if (success == 1) {

                            Toast.makeText(getApplicationContext(), "Successfully loggedIn", Toast.LENGTH_LONG).show();
                            }
                        else {

                            Toast.makeText(getApplicationContext(), "Wrong username or password", Toast.LENGTH_LONG).show();
                        }

                    }catch (Exception e) {
                        e.printStackTrace();
                        System.out.println("Some error occurs");
                    }

                    // TODO Auto-generated method stub
                    return null;
                }
        }

}

My JSON parser is

public class JSONParser
{
    static InputStream is = null;
    static JSONObject jObj = null;
    static String json = "";

    // constructor
    public JSONParser() {

    }

    // function get json from url
    // by making HTTP POST or GET mehtod
    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 {
            //Log.d("response string",json);
            jObj = new JSONObject(json);
        } catch (JSONException e) {
            Log.e("JSON Parser", "Error parsing data " + e.toString());
        }

        // return JSON String
        return jObj;

    }
}

If you use localhost in your android device it is referring to the actual device, if you want to access to your local computer, use your LAN IP address if your device is connected to your LAN network, or your internet IP if not.

If on the other hand, you are using Android emulator, change localhost to 10.0.2.2 .

PS: You are possibly missing a port in your url, depending on how you have configurated your server.

That should do the trick

in your code json object is assigned as null because makeHttpRequest is either returning null or failed to make connection.

JSONObject json = jsonParser.makeHttpRequest(url_login, "POST", params);

so this line will throw exception when you call any method by any reference that is pointing to null.

success = json.getInt(TAG_SUCCESS); // because json = null

replace localhost to localhost:your listening port number(ex:8080)

if your are running your app in emulator replace localhost to 10.0.2.2:your listening port number

  1. run makeHttpRequest() in separate thread
  2. make sure internet permission is added to your manifest.xml file

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