2015-02-06 120 views
0

我試圖將我從Facebook api獲得的用戶詳細信息存儲到數據庫中,使用php.I使用JSONParser類來執行POST,它返回一個JSON對象。當我打電話給在另一個類的AsyncTask中使用JSONParser類中的makeHttpRequest方法,我得到一個空指針異常。我檢查了我傳遞的任何參數是否爲null,但他們不是,也不明白爲什麼我無法獲得響應。我試圖找到從SO問類似的問題的答案,但它在vain.Kindly幫助me.Thanks去AsyncTask的doInBackground()方法中的空指針異常

這是在試圖調用makeHTTPRequest方法JSONparser類的類中的AsyncTask:

private class CreateUser extends AsyncTask<String, String, String> { 

     @Override 
     protected void onPreExecute() { 
      super.onPreExecute(); 

      // Log.d("email", email); 
      pDialog = new ProgressDialog(FbProfileActivity.this); 
      pDialog.setMessage("Creating User..."); 
      pDialog.setIndeterminate(false); 
      pDialog.setCancelable(true); 
      pDialog.show(); 
     } 

     @Override 
     protected String doInBackground(String... args) { 
      // TODO Auto-generated method stub 
      // Check for success tag 
      int success; 

      try { 
       // Building Parameters 
     //  Log.d("param_username", username); 
       List<NameValuePair> params = new ArrayList<NameValuePair>(); 
       params.add(new BasicNameValuePair("username", username)); 
      // params.add(new BasicNameValuePair("age", age)); 
       params.add(new BasicNameValuePair("gender",gender)); 
       params.add(new BasicNameValuePair("email", email)); 
       // params.add(new BasicNameValuePair("location", location)); 
       Log.d("params","params" + params); 


       Log.d("JsonParser's URL", "params" +REGISTER_URL); 
       Log.d("request!", "starting",new Exception());     //Posting user data to script 
       JSONObject json = jsonParser.makeHttpRequest(REGISTER_URL, "POST", params); 

       // full json response 
       // Log.d("Registering attempt", json.toString()); 

       // json success element 
       success = json.getInt(TAG_SUCCESS); 
       if (success == 1) { 
        Log.d("User Created", json.toString());     
        finish(); 
        return json.getString(TAG_MESSAGE); 
       }else{ 
        Log.d("Registering Failure!", json.getString(TAG_MESSAGE)); 
        return json.getString(TAG_MESSAGE); 

       } 
      } catch (JSONException e) { 
       e.printStackTrace(); 
      } 

      return null; 

     } 

     protected void onPostExecute(String file_url) { 
      // dismiss the dialog once product deleted 
      pDialog.dismiss(); 
      if (file_url != null){ 
       Toast.makeText(FbProfileActivity.this, file_url, Toast.LENGTH_LONG).show(); 
      } 

} 
} 

而這正是我得到空指針異常的行:

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

這是從JSONParser類makeHttpRequest方法:

public JSONObject makeHttpRequest(String url, String method, 
     List<NameValuePair> params) { 
    Log.d(TAG,"makeHttpRequest() is called"); 
    // 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 { 
     jObj = new JSONObject(json); 
    } catch (JSONException e) { 
     Log.e("JSON Parser", "Error parsing data " + e.toString()); 
    } 

    // return JSON String 
    return jObj; 

} 

堆棧跟蹤:

02-06 19:28:13.720: D/request!(2247): starting 
02-06 19:28:13.720: D/request!(2247): java.lang.Exception 
02-06 19:28:13.720: D/request!(2247): at  com.example.letschatindia.FbProfileActivity$CreateUser.doInBackground(FbProfileActivity.java:448) 
02-06 19:28:13.720: D/request!(2247): at com.example.letschatindia.FbProfileActivity$CreateUser.doInBackground(FbProfileActivity.java:1) 
02-06 19:28:13.720: D/request!(2247): at android.os.AsyncTask$2.call(AsyncTask.java:288) 
02-06 19:28:13.720: D/request!(2247): at java.util.concurrent.FutureTask.run(FutureTask.java:237) 
02-06 19:28:13.720: D/request!(2247): at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231) 
02-06 19:28:13.720: D/request!(2247): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112) 
02-06 19:28:13.720: D/request!(2247): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587) 
02-06 19:28:13.720: D/request!(2247): at java.lang.Thread.run(Thread.java:841) 
02-06 19:28:13.721: W/dalvikvm(2247): threadid=19: thread exiting with uncaught exception (group=0x4165fd40) 
02-06 19:28:13.723: E/AndroidRuntime(2247): FATAL EXCEPTION: AsyncTask #5 
02-06 19:28:13.723: E/AndroidRuntime(2247): Process: com.example.letschatindia, PID: 2247 
02-06 19:28:13.723: E/AndroidRuntime(2247): java.lang.RuntimeException: An error occured while executing doInBackground() 
02-06 19:28:13.723: E/AndroidRuntime(2247):  at android.os.AsyncTask$3.done(AsyncTask.java:300) 
02-06 19:28:13.723: E/AndroidRuntime(2247):  at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:355) 
02-06 19:28:13.723: E/AndroidRuntime(2247):  at java.util.concurrent.FutureTask.setException(FutureTask.java:222) 
02-06 19:28:13.723: E/AndroidRuntime(2247):  at java.util.concurrent.FutureTask.run(FutureTask.java:242) 
02-06 19:28:13.723: E/AndroidRuntime(2247):  at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231) 
02-06 19:28:13.723: E/AndroidRuntime(2247):  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112) 
02-06 19:28:13.723: E/AndroidRuntime(2247):  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587) 
02-06 19:28:13.723: E/AndroidRuntime(2247):  at java.lang.Thread.run(Thread.java:841) 
02-06 19:28:13.723: E/AndroidRuntime(2247): Caused by: java.lang.NullPointerException 
02-06 19:28:13.723: E/AndroidRuntime(2247):  at com.example.letschatindia.FbProfileActivity$CreateUser.doInBackground(FbProfileActivity.java:449) 
02-06 19:28:13.723: E/AndroidRuntime(2247):  at com.example.letschatindia.FbProfileActivity$CreateUser.doInBackground(FbProfileActivity.java:1) 
02-06 19:28:13.723: E/AndroidRuntime(2247):  at android.os.AsyncTask$2.call(AsyncTask.java:288) 
02-06 19:28:13.723: E/AndroidRuntime(2247):  at java.util.concurrent.FutureTask.run(FutureTask.java:237) 
+1

什麼是FbProfileActivity.java中的行號'449'? – 2015-02-06 15:00:43

+0

我已經在CreateUser類下面張貼了一行,請檢查一下。 – 2015-02-06 15:06:02

+0

你在哪裏聲明瞭jsonParser對象? – Muthu 2015-02-06 15:06:29

回答

1

我認爲jsonParser是null它必須在使用它之前實例化。

0

你jsonParser爲null。我看不到你在哪裏實例化它,所以檢查你的代碼以避免在創建對象之前使用它。

+0

檢查它說它已被聲明爲其他軟件的評論。 – Muthu 2015-02-06 15:21:52

+0

我明白了,但使用尚未初始化的對象顯然是一個問題,我不禁要看看其餘的代碼。 – 2015-02-06 15:26:47

+0

我宣佈它,但未能創建一個實例。 Muthu首先在評論中指出,所以接受了他的回答。謝謝。 – 2015-02-06 16:27:42