priya
priya

Reputation: 15

I am dealing with my web service while getting response -how to get response from server side?

I have used post method to call web service and getting an error while calling the web service .

Logcat:

09-04 04:58:56.437: E/AndroidRuntime(803): FATAL EXCEPTION: AsyncTask #1
09-04 04:58:56.437: E/AndroidRuntime(803): java.lang.RuntimeException: An error occure while executing doInBackground()

the web service i am using is class AttemptLogin extends AsyncTask {

     /**
     * Before starting background thread Show Progress Dialog
     * */
    boolean failure = false;

    @Override
    protected void onPreExecute() {
         String username = user.getText().toString();
         String password = pass.getText().toString();
        super.onPreExecute(); 

        pDialog = new ProgressDialog(Loginpage.this);
        pDialog.setMessage("Attempting login...");
        pDialog.setIndeterminate(false);
        pDialog.setCancelable(true);
        pDialog.show();

    }

    @Override
    protected String doInBackground(String... args) {
        // TODO Auto-generated method stub
         // Check for success tag
        String username=args [0];
        String password=args[1];
        int success;

        try {
            // Building Parameters
            List<NameValuePair> params = new ArrayList<NameValuePair>();


            params.add(new BasicNameValuePair("username", username));
            params.add(new BasicNameValuePair("password", password));

            Log.d("request!", "starting");
            // getting product details by making HTTP request
            JSONObject json = jsonParser.makeHttpRequest(
                   LOGIN_URL, "POST", params);

            // check your log for json response
            Log.d("Login attempt", json.toString());

            // json success tag
            success = json.getInt(TAG_SUCCESS);
            if (success == 1) {
                Log.d("Login Successful!", json.toString());
                Intent i = new Intent(Loginpage.this, Propertyapp.class);
                finish();
                startActivity(i);
                return json.getString(TAG_MESSAGE);
            }else{
                Log.d("Login Failure!", json.getString(TAG_MESSAGE));
                return json.getString(TAG_MESSAGE);

            }
        } catch (JSONException e) {
            e.printStackTrace();
        } 
        return null;            
    }
    /**
     * After completing background task Dismiss the progress dialog
     * **/
    protected void onPostExecute(String file_url) {
        // dismiss the dialog once product deleted
        pDialog.dismiss();
        if (file_url != null){
            Toast.makeText(Loginpage.this, file_url, Toast.LENGTH_LONG).show();
        }

    }

}

public JSONObject makeHttpRequest(String url, String method, List params) {

    // 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;

}

Upvotes: 1

Views: 1227

Answers (5)

Lazy Ninja
Lazy Ninja

Reputation: 22527

Your problem

String username = user.getText().toString();
String password = pass.getText().toString();

You can not perform UI updates in the background thread. Move them out.
You can use onPreExecute() method for that, or just pass username and password to the AsyncTask().

public class YourAsyncTask extends AsyncTask<String, Integer, String>{

        @Override
        protected String doInBackground(String... params) {
            String username = params[0];
            String password = params[1];
                         ....
         }
}

Upvotes: 0

Bhoomika Brahmbhatt
Bhoomika Brahmbhatt

Reputation: 7415

Declare intent globally & initialize in oncreate(),

Intent i ;

i= new Intent(Loginpage.this, Propertyapp.class);

use it as per your requirement

            startActivity(i);

Upvotes: 0

Shadow
Shadow

Reputation: 6899

Hope this might help you.
 int sucess;//declare in global
 @Override

 protected String doInBackground(String... args)
   {

    // TODO Auto-generated method stub
     // Check for success tag

     String username = user.getText().toString();
     String password = pass.getText().toString();

        // Building Parameters
        List<NameValuePair> params = new ArrayList<NameValuePair>();
        params.add(new BasicNameValuePair("username", username));
        params.add(new BasicNameValuePair("password", password));
        // getting product details by making HTTP request
        JSONObject json = jsonParser.makeHttpRequest(
               LOGIN_URL, "POST", params);
        try
        {
        success = json.getInt(TAG_SUCCESS);
        }
        catch (Exception e) 
        {
    e.printStackTrace();
    }
        return null;
        }
        protected void onPostExecute(String file_url) {
    pDialog.dismiss();//progress dialog pDialog
        if (success == 1) {    
            Intent i = new Intent(Loginpage.this, Propertyapp.class);
            startActivity(i);
           finish();
        }
    } 

}

Upvotes: 0

Nizam
Nizam

Reputation: 5731

I think the lines String username = user.getText().toString(); String password = pass.getText().toString(); cause the problem.

You can't access or modify UI inside AsyncTask.

You can do this before it either inside onPreExecute() (Prefer to declare variables globally)

or before calling .execute("") and passing username and password as args ie, .execute(username,password);. Then inside doInBackground, you can get it as args[0] and args[1].

Upvotes: 0

KOTIOS
KOTIOS

Reputation: 11194

String username = user.getText().toString(); move this line in onPreExecute method ..u cannot handle Ui in doInBackground Method

Upvotes: 1

Related Questions