2015-03-13 65 views
0

這是logcat的轉換結果java.lang.NullPointerException的錯誤:lock == null,爲什麼這個錯誤?

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 

這是我的JAVA代碼

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; 
       } 
     } 

} 

我的JSON解析器是

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; 

    } 
} 
+0

作爲一個方面說明:在Java中,比較像'method ==「POST」'和'method ==「GET」'不適用於字符串。見[這裏](http://stackoverflow.com/questions/513832/how-do-i-compare-strings-in-java)爲什麼這樣。 – 2015-03-13 06:48:54

回答

1

如果你在你的Android設備使用localhost它指的是實際的設備,如果您想訪問本地計算機,請使用您的局域網IP地址,如果您的設備連接到您的局域網,或者您的互聯網IP噸。

另一方面,如果您正在使用Android模擬器,請將localhost更改爲10.0.2.2

PS:您可能會遺失網址中的端口,具體取決於您如何配置服務器。

這應該做的伎倆

+0

感謝隊友,這個本地東西讓我很困惑回到 – 2015-03-13 06:33:06

0

在你的代碼json對象指定爲null,因爲makeHttpRequest要麼返回null或無法進行連接。

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

所以當你調用由指向空任何引用任何方法這一行會拋出異常。

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

+1

謝謝Mr.Prasanth – Aswanth 2015-03-13 10:00:20

0

localhost替換爲localhost:你的監聽端口號(如:8080)

如果您在模擬器 運行你的應用程序替換localhost來10.0.2.2:your監聽端口號

  1. 在單獨的線程中運行makeHttpRequest()
  2. 確保將Internet權限添加到您的manifest.xml文件中