2015-02-06 83 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