0

AndroidアプリでデータをPHPファイルに投稿し、PHPファイルがそのデータをデータベースに書き込むようにしようとしていますが、少し問題があります。

このエラーが発生しますが、強制終了などではありません。

Logcat出力:

08-13 20:29:42.859: I/postData(11950): HTTP/1.1 200 OK
08-13 20:29:42.859: E/log_tag(11950): Error in http connectionjava.lang.IllegalStateException: Content has been consumed

これが私のHTTPPOSTのすべてを実行している問題のコードであり、Android側のものです。

SubmitWord task = new SubmitWord(); 
task.execute(new String[] { "http://www.hanged.comli.com/main.php" });

上記のコードは、この非同期タスクを呼び出します。

          private class SubmitWord extends AsyncTask<String, Void, String> 
    {
        @Override
        protected String doInBackground(String... urls) 
        {
          String response = "";
          try
          {
            URL = urls[0];
            ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(4);
            nameValuePairs.add(new BasicNameValuePair("victim",myId));
            nameValuePairs.add(new BasicNameValuePair("rival",newname));
            nameValuePairs.add(new BasicNameValuePair("word","HELLOHOMO"));
            nameValuePairs.add(new BasicNameValuePair("won","0"));

              HttpClient httpclient = new DefaultHttpClient();
              HttpPost httppost = new      
              HttpPost(URL);
              httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));

              HttpResponse execute = httpclient.execute(httppost);
              HttpEntity entity = execute.getEntity();
              InputStream is = entity.getContent();

             Log.i("postData", execute.getStatusLine().toString());
             //HttpEntity entity = response.getEntity();
              is = entity.getContent();
          }
          catch(Exception e)
          {
                  Log.e("log_tag", "Error in http connection"+e.toString());
          }
                return response;
            } 

        @Override
        protected void onPostExecute(String result) 
        {
          mText.setText("DONE");
        }

      }

これがPHP側のことです。

<?php

 /// REMOVED DATABASE DETAILS

$connect = mysql_connect("$mysql_host", "$mysql_user", "$mysql_password")or die("cannot   connect");
 mysql_select_db("$mysql_database", $connect)or die("cannot select DB");

session_start();

$victim = $_POST['victim'];
$rival = $_POST['rival'];
$word = $_POST['word'];
$won = $_POST['won'];

mysql_query("INSERT INTO currentgames (victim, rival, wordguess, won) VALUES('$victim',       '$rival', '$word', '$won'))");

私が間違っているのはJava/Androidの部分だけだとかなり確信していますが、私が間違っていることを一生理解することはできません。データをPOSTするさまざまな方法を試し、 HTTPOSTの使用に関するチュートリアルの数。たぶん私は正しく理解していないだけです。

4

1 に答える 1

2

犯人はあなたがgetContent();二度呼んでいるということです。

javadocによる

エンティティのコンテンツストリームを返します。繰り返し可能なエンティティは、このメソッドの呼び出しごとにInputStreamの新しいインスタンスを作成することが期待されているため、複数回消費される可能性があります。再現性のないエンティティは、同じInputStreamインスタンスを返すことが期待されているため、複数回消費することはできません。

于 2012-08-13T20:39:10.950 に答える