I got struck because of IllegalStateException in the following code. Can anybody please help me? Code:
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; import java.util.ArrayList; import java.util.List; import org.apache.http.HttpEntity; import org.apache.http.HttpResponse; import org.apache.http.NameValuePair; import org.apache.http.ParseException; import org.apache.http.client.ClientProtocolException; import org.apache.http.client.HttpClient; import org.apache.http.client.entity.UrlEncodedFormEntity; import org.apache.http.client.methods.HttpPost; import org.apache.http.impl.client.DefaultHttpClient; import org.apache.http.message.BasicNameValuePair; import org.apache.http.protocol.HTTP; import org.apache.http.util.EntityUtils; import org.json.JSONObject; import android.app.Activity; import android.os.Bundle; import android.telephony.gsm.GsmCellLocation; import android.util.Log; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.EditText; import android.widget.Toast; public class Login extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.login); Button bt = (Button) findViewById(R.id.logbt); final EditText user = (EditText) findViewById(R.id.loguser); final EditText pw = (EditText) findViewById(R.id.logpw); bt.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { if (user.getText().toString() != "" && pw.getText().toString() != "") { Thread t = new Thread() { public void run() { try { HttpClient client = new DefaultHttpClient(); String postURL = "http://surfkid.redio.de/login"; HttpPost post = new HttpPost(postURL); ArrayList<NameValuePair> params = new ArrayList<NameValuePair>(); params.add(new BasicNameValuePair("username", user.getText().toString())); params.add(new BasicNameValuePair("password", md5(pw.getText().toString()))); UrlEncodedFormEntity ent = new UrlEncodedFormEntity(params, HTTP.UTF_8); post.setEntity(ent); HttpResponse responsePOST = client.execute(post); HttpEntity resEntity = responsePOST.getEntity(); final JSONObject jObject = new JSONObject(EntityUtils.toString(resEntity)); Log.e("XXX", EntityUtils.toString(resEntity)); } catch (Exception e) { Log.e("XXX", e.toString()); } } }; t.start(); // Log.e("XXX",s); } } }); } private String md5(String in) { MessageDigest digest; try { digest = MessageDigest.getInstance("MD5"); digest.reset(); digest.update(in.getBytes()); byte[] a = digest.digest(); int len = a.length; StringBuilder sb = new StringBuilder(len << 1); for (int i = 0; i < len; i++) { sb.append(Character.forDigit((a[i] & 0xf0) >> 4, 16)); sb.append(Character.forDigit(a[i] & 0x0f, 16)); } return sb.toString(); } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } return null; } } Logcat message:
01-18 18:39:53.383: ERROR/XXX(7113): java.lang.IllegalStateException: Content has been consumed
You can consume Content only at once from an Entity
in the line :
final JSONObject jObject = new JSONObject(EntityUtils.toString(resEntity));
you have consumed content and again you are using the same at here:
Log.e("XXX",EntityUtils.toString(resEntity));
That why it is causing IllegalStateException: Content has been consumed
So the solution is here:
String _response=EntityUtils.toString(resEntity); // content will be consume only once final JSONObject jObject=new JSONObject(_response); Log.e("XXX",_response);
it's also happens if you are writing the consuming statement in the Expressions of the debugger!!!
(e.g if you are doing "watch" to something like EntityUtils.toString(resEntity))
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With