2012-04-09 107 views
0

我需要帮助..我试图从我的android客户端应用程序调用php webservices,并且我无法从主线程调用它,因为SDK是15,并且我在网上搜索并我发现这个问题的解决方案是使用Asynktask ..但它不与我工作,我不知道为什么..任何帮助,请您..ThankAsynctask与android中的webservices

public class CustomWebConnection extends AsyncTask<Void, Void, String> { 
private final String     uri = "http://localhost/mywebservices.php?op=GetAllRest"; 
private ArrayList<NameValuePair>  mParams; 
private OnPostExecuteListener  mPostExecuteListener = null; 

public static interface OnPostExecuteListener{ 
    void onPostExecute(String result); 
} 

CustomWebConnection(ArrayList<NameValuePair> nameValuePairs, 
    OnPostExecuteListener postExecuteListener) throws Exception { 

    mParams = nameValuePairs; 
    mPostExecuteListener = postExecuteListener; 
    if (mPostExecuteListener == null) 
     throw new Exception("Param cannot be null."); 
} 

@Override 
protected String doInBackground(Void... params) { 

     JSONObject param=null; 
     String result = null; 
     HttpClient httpClient = new DefaultHttpClient(); 
     HttpHost httpHost = new HttpHost("localhost",80); 
     HttpPost httpPost = new HttpPost(uri); 
     httpPost.addHeader("Content-Type", "application/json; charset=utf-8"); 


     try 
     { 
      //HttpEntity bodyEntity = new StringEntity(param.toString(), "utf8"); 
      //httpPost.setEntity(bodyEntity); 
      HttpResponse response = httpClient.execute(httpPost); 
      HttpEntity entity = response.getEntity(); 

      if (entity != null) { 
       InputStream instream = entity.getContent(); 
       BufferedReader reader = new BufferedReader(
        new InputStreamReader(instream)); 
       StringBuilder sb = new StringBuilder(); 


       String line = null; 
       while ((line = reader.readLine()) != null) 
        sb.append(line + "\n"); 


       result = sb.toString(); 
       instream.close();   
      } 
     } 

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


    httpPost.abort(); 
    return result ; 
} 

@Override 
protected void onPostExecute(String result) { 
    if (mPostExecuteListener != null){ 
     try { 
      JSONObject json = new JSONObject(result); 
      mPostExecuteListener.onPostExecute(result); 
     } catch (JSONException e){ 
      e.printStackTrace(); 
     } 
    } 
} 

,它是抛出此异常

 04-09 16:31:37.393: E/AndroidRuntime(2284): FATAL EXCEPTION: main 
    04-09 16:31:37.393: E/AndroidRuntime(2284): java.lang.NullPointerException 
     04-09 16:31:37.393: E/AndroidRuntime(2284): at org.json.JSONTokener.nextCleanInternal(JSONTokener.java:116) 
    04-09 16:31:37.393: E/AndroidRuntime(2284): at org.json.JSONTokener.nextValue(JSONTokener.java:94) 
     04-09 16:31:37.393: E/AndroidRuntime(2284): at org.json.JSONObject.<init>(JSONObject.java:154) 
    04-09 16:31:37.393: E/AndroidRuntime(2284): at org.json.JSONObject.<init>(JSONObject.java:171) 
    04-09 16:31:37.393: E/AndroidRuntime(2284): at com.vtab.CustomWebConnection.onPostExecute(CustomWebConnection.java:92) 
04-09 16:31:37.393: E/AndroidRuntime(2284): at com.vtab.CustomWebConnection.onPostExecute(CustomWebConnection.java:1) 
04-09 16:31:37.393: E/AndroidRuntime(2284): at android.os.AsyncTask.finish(AsyncTask.java:602) 
04-09 16:31:37.393: E/AndroidRuntime(2284): at android.os.AsyncTask.access$600(AsyncTask.java:156) 
04-09 16:31:37.393: E/AndroidRuntime(2284): at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:615) 
04-09 16:31:37.393: E/AndroidRuntime(2284): at android.os.Handler.dispatchMessage(Handler.java:99) 
04-09 16:31:37.393: E/AndroidRuntime(2284): at android.os.Looper.loop(Looper.java:137) 
    04-09 16:31:37.393: E/AndroidRuntime(2284): at android.app.ActivityThread.main(ActivityThread.java:4424) 
    04-09 16:31:37.393: E/AndroidRuntime(2284): at java.lang.reflect.Method.invokeNative(Native Method) 
    04-09 16:31:37.393: E/AndroidRuntime(2284): at java.lang.reflect.Method.invoke(Method.java:511) 
    04-09 16:31:37.393: E/AndroidRuntime(2284): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784) 
    04-09 16:31:37.393: E/AndroidRuntime(2284): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551) 
04-09 16:31:37.393: E/AndroidRuntime(2284): at dalvik.system.NativeStart.main(Native Method) 

HttpResponse response = httpClient.execute(httpPost);

错误

,这是从服务器

[{"rest_id":"1","rest_name":"Al Dabke","cuisine":"Lebanese","no_tables":"15","bg_img":"lebanon","rest_logo":"dabke"},{"rest_id":"4","rest_name":"MY KIND OF PLACE","cuisine":null,"no_tables":"10","bg_img":"kindofplacebg","rest_logo":"mykindofplacelogo"},{"rest_id":"5","rest_name":"LANTANIA","cuisine":"Thai","no_tables":"10","bg_img":"lantaniabg","rest_logo":"lantanialogo"},{"rest_id":"6","rest_name":"LEONARDO","cuisine":"italian","no_tables":"10","bg_img":"leonardobg","rest_logo":"leonardologo"},{"rest_id":"7","rest_name":"LE MARCHE ","cuisine":"French","no_tables":"10","bg_img":"lemarchebg","rest_logo":"lemarchelogo"},{"rest_id":"8","rest_name":"Marias","cuisine":"mexican","no_tables":"10","bg_img":"mariang","rest_logo":"marialogo"},{"rest_id":"9","rest_name":"NOBLE HOUSE","cuisine":"chinese","no_tables":"10","bg_img":"noblehousebg","rest_logo":"noblehouselogo"}] 

JSON响应任何帮助,请

回答

1

我最近也遇到过这个问题,我发现HttpClient是Android ICS中的问题,,,我使用的简单黑客就是将min SDK版本从15改为7,但它不是一个合适的解决方案。我遇到了博客的代码

StrictMode.ThreadPolicy policy = new StrictMode. 
ThreadPolicy.Builder().permitAll().build(); 
StrictMode.setThreadPolicy(policy); 

把这个放在onCreate()方法已经解决了我的问题。可能是它可以帮助你。我仍然在寻找更多的选择。

+0

我得到这个错误,我这就是为什么NullPointerException出现..我得到这个org.apache.http.conn.HttpHostConnectException:连接到http:// localhost拒绝..并且我不从我使用的模拟器运行一个设备..我该如何解决这个问题..谢谢 – Basant 2012-04-16 12:13:53

0

它看起来像在解析JSON的错误,虽然你没有得到一个JSONException。

+0

那么如何解决它或如何以正确的方式解析JSON – Basant 2012-04-09 14:57:14

+0

如果您发布了JSON来验证该怎么办?解决这个问题的正确方法是确保服务器是否发送有效的JSON,如果确实发生了这种情况。 – MikeHelland 2012-04-09 15:10:04

+0

我发布的JSON,它是有效的..我不知道什么是问题 – Basant 2012-04-09 20:57:51