Java Android登录界面-内容已被使用

Java Android登录界面-内容已被使用,java,android,Java,Android,大家好,我正在尝试执行以下代码,这是我在用于登录身份验证的应用程序教程中看到的代码,但我在执行时遇到以下错误,有人能帮我解决吗?我已经读过其他相关的文章,但我要么找不到解决方案,要么我的编程技能无法很好地解释和解决它 我的日志: 01-29 01:26:26.997: I/System.out(2250): MessageContent has been consumed 01-29 01:26:26.997: W/System.err(2250): java.lang.IllegalState

大家好,我正在尝试执行以下代码,这是我在用于登录身份验证的应用程序教程中看到的代码,但我在执行时遇到以下错误,有人能帮我解决吗?我已经读过其他相关的文章,但我要么找不到解决方案,要么我的编程技能无法很好地解释和解决它

我的日志:

01-29 01:26:26.997: I/System.out(2250): MessageContent has been consumed
01-29 01:26:26.997: W/System.err(2250): java.lang.IllegalStateException: Content has been consumed
01-29 01:26:26.997: W/System.err(2250):     at org.apache.http.entity.BasicHttpEntity.getContent(BasicHttpEntity.java:84)
01-29 01:26:27.007: W/System.err(2250):     at org.apache.http.conn.BasicManagedEntity.getContent(BasicManagedEntity.java:100)
01-29 01:26:27.007: W/System.err(2250):     at com.example.kibria.MainActivity.onClick(MainActivity.java:90)
01-29 01:26:27.007: W/System.err(2250):     at android.view.View.performClick(View.java:4438)
01-29 01:26:27.007: W/System.err(2250):     at android.view.View$PerformClick.run(View.java:18422)
01-29 01:26:27.007: W/System.err(2250):     at android.os.Handler.handleCallback(Handler.java:733)
01-29 01:26:27.007: W/System.err(2250):     at android.os.Handler.dispatchMessage(Handler.java:95)
01-29 01:26:27.007: W/System.err(2250):     at android.os.Looper.loop(Looper.java:136)
01-29 01:26:27.017: W/System.err(2250):     at android.app.ActivityThread.main(ActivityThread.java:5017)
01-29 01:26:27.017: W/System.err(2250):     at java.lang.reflect.Method.invokeNative(Native Method)
01-29 01:26:27.017: W/System.err(2250):     at java.lang.reflect.Method.invoke(Method.java:515)
01-29 01:26:27.017: W/System.err(2250):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
01-29 01:26:27.017: W/System.err(2250):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
01-29 01:26:27.017: W/System.err(2250):     at dalvik.system.NativeStart.main(Native Method
我的Java类:

    public class MainActivity extends ActionBarActivity implements OnClickListener {

        EditText etUser, etPass;
        Button bLogin;
        String username, password;
        HttpClient httpclient;
        HttpPost httppost;
        ArrayList<NameValuePair> nameValuePairs;
        HttpResponse response;
        HttpEntity entity;

        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().build();
            StrictMode.setThreadPolicy(policy);
            setContentView(R.layout.activity_main);
        etUser = (EditText) findViewById(R.id.etUser);
        etPass = (EditText) findViewById(R.id.etPass);
        bLogin = (Button) findViewById(R.id.bSubmit);

        bLogin.setOnClickListener(this);

        }

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub

            httpclient = new DefaultHttpClient();

            httppost = new HttpPost("http://10.0.2.2:8080/kibria/index.php");

            username = etUser.getText().toString();
            password = etPass.getText().toString();


            try{

                nameValuePairs = new ArrayList<NameValuePair>();

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



                httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
                response = httpclient.execute(httppost);

                if(response.getStatusLine().getStatusCode()==200){


                    entity = response.getEntity();


                    if(entity.getContent()!=null){


                        InputStream instream = response.getEntity().getContent();

                        JSONObject jsonResponse = new JSONObject(convertStreamToString(instream));


                        String retUser = jsonResponse.getString("user");
                        String retPass = jsonResponse.getString("pass");

                        if(username.equals(retUser)&& password.equals(retPass)){

                            SharedPreferences sp = getSharedPreferences("logindetails", 0);

                            SharedPreferences.Editor spedit = sp.edit();

                            spedit.putString("user", username);
                            spedit.putString("pass", password);

                            spedit.commit();

                            Toast.makeText(getBaseContext(), "SUCCESS!", Toast.LENGTH_SHORT).show();


                        }else {
                            Toast.makeText(getBaseContext(), "Invalid Login Details", Toast.LENGTH_SHORT).show();
                        }
                    }

            }
            }catch (Exception e){
                System.out.println("Message"+e.getMessage());
                e.printStackTrace();
                Toast.makeText(getBaseContext(), "Connection Error!!!", Toast.LENGTH_SHORT).show();
            }


        }

        private static String convertStreamToString(InputStream is) {
            BufferedReader reader = new BufferedReader(new InputStreamReader(is));

        StringBuilder sb = new StringBuilder();

        String line = null;
        try{
            while ((line = reader.readLine()) !=null){

                sb.append(line + "\n");
            }
        }   catch(IOException e){
            e.printStackTrace();
        }   finally {
            try{
                is.close();
            }catch (IOException e){

                e.printStackTrace();
            }
        }

    return sb.toString();


    }
}
公共类MainActivity扩展了ActionBarActivity实现OnClickListener{
编辑文本etUser,etPass;
按钮博客;
字符串用户名、密码;
HttpClient-HttpClient;
HttpPost-HttpPost;
ArrayList名称值对;
HttpResponse响应;
http实体;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
StrictMode.ThreadPolicy policy=新建StrictMode.ThreadPolicy.Builder().build();
StrictMode.setThreadPolicy(策略);
setContentView(R.layout.activity_main);
etUser=(EditText)findViewById(R.id.etUser);
etPass=(EditText)findViewById(R.id.etPass);
bLogin=(按钮)findviewbyd(R.id.bSubmit);
setOnClickListener(this);
}
@凌驾
公共void onClick(视图v){
//TODO自动生成的方法存根
httpclient=新的DefaultHttpClient();
httppost=新的httppost(“http://10.0.2.2:8080/kibria/index.php");
username=etUser.getText().toString();
password=etPass.getText().toString();
试一试{
nameValuePairs=新的ArrayList();
添加(新的BasicNameValuePair(“用户名”,username));
添加(新的BasicNameValuePair(“密码”,password));
setEntity(新的UrlEncodedFormEntity(nameValuePairs));
response=httpclient.execute(httppost);
if(response.getStatusLine().getStatusCode()==200){
entity=response.getEntity();
if(entity.getContent()!=null){
InputStream instream=response.getEntity().getContent();
JSONObject jsonResponse=新的JSONObject(convertStreamToString(instream));
String retUser=jsonResponse.getString(“用户”);
String retPass=jsonResponse.getString(“pass”);
if(username.equals(retUser)和password.equals(retPass)){
SharedReferences sp=GetSharedReferences(“登录详细信息”,0);
SharedReferences.Editor spedit=sp.edit();
spedit.putString(“用户”,用户名);
spedit.putString(“pass”,密码);
提交();
Toast.makeText(getBaseContext(),“SUCCESS!”,Toast.LENGTH\u SHORT.show();
}否则{
Toast.makeText(getBaseContext(),“无效的登录详细信息”,Toast.LENGTH_SHORT.show();
}
}
}
}捕获(例外e){
System.out.println(“Message”+e.getMessage());
e、 printStackTrace();
Toast.makeText(getBaseContext(),“连接错误!!!”,Toast.LENGTH\u SHORT.show();
}
}
私有静态字符串convertStreamToString(InputStream为){
BufferedReader reader=新的BufferedReader(新的InputStreamReader(is));
StringBuilder sb=新的StringBuilder();
字符串行=null;
试一试{
而((line=reader.readLine())!=null){
sb.追加(第+行“\n”);
}
}捕获(IOE异常){
e、 printStackTrace();
}最后{
试一试{
is.close();
}捕获(IOE异常){
e、 printStackTrace();
}
}
使某人返回字符串();
}
}
我的PHP文件:

<?php
$dbhost = "localhost";
$dbuser = "root";
$dbpass = "";
$dbdb = "mobiledb";

$connect = mysqli_connect($dbhost, $dbuser, $dbpass)
or die("connection error");

mysqli_select_db($connect,$dbdb) or die ("database selection error");

$username = $_POST['username'];
$password = $_POST['password'];

$query = mysqli_query($connect, "SELECT * FROM androidlogin WHERE user = '$username'AND pass = '$password'");

$num = mysqli_num_rows($query);

if($num==1){

while($list=mysqli_fetch_assoc($query)){

$output = $list;
echo json_encode($output);
mysqli_close($connect);
}

}

java.lang.IllegalStateException:内容已被消费

因为您多次调用
getContent()
方法

如你所见:

如果此实体不可重复且流 以前已经获得过

将其固定为:

InputStream instream = response.getEntity().getContent();
if(instream!=null){
  //... your code here
}

谢谢你的回复。你的意思是说,如果可以的话,代码是什么?我只需要一个任务?严格的线程策略是否有助于它的执行?先生,我做了您提到的更改,但现在我得到了以下错误org.json.JSONException:字符0处输入结束of@Sid:什么错误?使用最新代码更新问题error@Sid:应用程序可能获取无效的json字符串。因此,请尝试检查您从这里的服务器得到的响应
convertStreamToString(instream)
对不起,先生,昨天我无法回复。您的回答解决了我关于内容被消费的问题&我一定会按照您的建议研究我的方法。谢谢
01-29 02:47:39.722: I/System.out(2081): MessageEnd of input at character 0 of 
01-29 02:47:39.722: W/System.err(2081): org.json.JSONException: End of input at character 0 of 
01-29 02:47:39.732: W/System.err(2081):     at org.json.JSONTokener.syntaxError(JSONTokener.java:450)
01-29 02:47:39.732: W/System.err(2081):     at org.json.JSONTokener.nextValue(JSONTokener.java:97)
01-29 02:47:39.742: W/System.err(2081):     at org.json.JSONObject.<init>(JSONObject.java:155)
01-29 02:47:39.742: W/System.err(2081):     at org.json.JSONObject.<init>(JSONObject.java:172)
01-29 02:47:39.742: W/System.err(2081):     at com.example.kibria.MainActivity.onClick(MainActivity.java:99)
01-29 02:47:39.742: W/System.err(2081):     at android.view.View.performClick(View.java:4438)
01-29 02:47:39.742: W/System.err(2081):     at android.view.View$PerformClick.run(View.java:18422)
01-29 02:47:39.742: W/System.err(2081):     at android.os.Handler.handleCallback(Handler.java:733)
01-29 02:47:39.742: W/System.err(2081):     at android.os.Handler.dispatchMessage(Handler.java:95)
01-29 02:47:39.752: W/System.err(2081):     at android.os.Looper.loop(Looper.java:136)
01-29 02:47:39.752: W/System.err(2081):     at android.app.ActivityThread.main(ActivityThread.java:5017)
01-29 02:47:39.752: W/System.err(2081):     at java.lang.reflect.Method.invokeNative(Native Method)
01-29 02:47:39.752: W/System.err(2081):     at java.lang.reflect.Method.invoke(Method.java:515)
01-29 02:47:39.752: W/System.err(2081):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
01-29 02:47:39.752: W/System.err(2081):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
01-29 02:47:39.752: W/System.err(2081):     at dalvik.system.NativeStart.main(Native Method)
You need to take AsynkTask class for server work then it will work fine.
InputStream instream = response.getEntity().getContent();
if(instream!=null){
  //... your code here
}