首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Android登录界面-内容已被消耗

Android登录界面-内容已被消耗
EN

Stack Overflow用户
提问于 2015-01-29 06:52:15
回答 2查看 326关注 0票数 3

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

我的逻辑猫:

代码语言:javascript
复制
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类:

代码语言:javascript
复制
    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();


    }
}

我的PHP文件:

代码语言:javascript
复制
<?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代码:

代码语言:javascript
复制
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();

                InputStream instream = response.getEntity().getContent();
                if(instream!=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().execute();
                        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();
        }


    }

更新的LOGCAT:

代码语言:javascript
复制
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)
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-01-29 07:15:46

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

因为您不止一次调用getContent()方法。

正如您所看到的,getContent ()

如果此实体不可重复且流已在以前获得,则为IllegalStateException。

将其修正为:

代码语言:javascript
复制
InputStream instream = response.getEntity().getContent();
if(instream!=null){
  //... your code here
}
票数 0
EN

Stack Overflow用户

发布于 2015-01-29 06:58:43

代码语言:javascript
复制
You need to take AsynkTask class for server work then it will work fine.
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28208603

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档