Basant
Basant

Reputation: 305

Asynctask with webservices in android

i need help.. i'm trying to call php webservices from my android client application ,and i couldn't call it from main thread coz the SDK is 15 ,and I search on the web and I found the solution for this problem is to use the Asynktask .. but it doesn't work with me i don't know why .. any help please ..Thank you

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

and it's throw this 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)

the error at HttpResponse response = httpClient.execute(httpPost);

and this is the JSON response from the server

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

any help please

Upvotes: 0

Views: 691

Answers (2)

Nishant Rajput
Nishant Rajput

Reputation: 2063

I have also face this issue recently and i found that HttpClient is problem in Android ICS ,,, The simple hack i used is to change min SDK version to 7 from 15. But its isnt a proper solution. i come across the code from a blog

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

Putting this in onCreate() method has solved my problem. May be it can help you. still i am looking for some more options.

Upvotes: 1

MikeHelland
MikeHelland

Reputation: 1159

It looks like the error was in parsing the JSON, although you're not getting a JSONException.

Upvotes: 0

Related Questions