2012-04-09 4 views
0

J'ai besoin d'aide .. J'essaie d'appeler les services web PHP à partir de mon application client android, et je ne pouvais pas l'appeler du fil principal coz le SDK est 15, et je recherche sur le web et J'ai trouvé la solution à ce problème est d'utiliser le Asynktask .. mais il ne fonctionne avec moi, je ne sais pas pourquoi .. aucune aide s'il vous plaît vous ..ThankAsynctask avec webservices en android

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

et il est jeter cette exception

 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) 

l'erreur à HttpResponse response = httpClient.execute(httpPost);

et c'est la réponse JSON du serveur

[{"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"}] 

toute aide s'il vous plaît

Répondre

1

J'ai également fait face à ce problème récemment et j'ai trouvé que HttpClient est problème dans Android ICS ,,, Le hack simple que j'ai utilisé est de changer la version min SDK à 7 de 15. Mais ce n'est pas une bonne solution. Je rencontre le code d'un blog

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

Mettre ceci dans la méthode onCreate() a résolu mon problème. Peut être cela peut vous aider. Je cherche encore d'autres options.

+0

j'ai eu cette erreur et je ceci c'est pourquoi le NullPointerException est apparu .. j'ai eu ce org.apache.http.conn.HttpHostConnectException: La connexion à http: // localhost a refusé ..et je ne cours pas de l'émulateur que j'ai employé un appareil .. comment puis-je résoudre ce problème .. merci – Basant

0

Il ressemble à l'erreur était dans l'analyse syntaxique du JSON, même si vous n'êtes pas obtenir un JSONException.

+0

alors comment y remédier ou comment analyser le JSON dans le bon sens – Basant

+0

Que faire si vous avez posté le JSON à vérifier? La bonne façon de le réparer serait de s'assurer que le serveur envoie un JSON valide, si c'est bien ce qui se passe. – MikeHelland

+0

je publie le JSON et il est valide .. je ne sais pas quel est le problème – Basant