2

以下に、インターネットに接続して php スクリプトにリクエストを送信するクラスを作成しました。4.0.4 で動作するように、メイン スレッドではなく同じように作成しましたAsyncTaskが、テストすると、2.2 では問題なく動作しますが、動作しません。何が問題か知っていますか?

class download extends AsyncTask<String, Integer, String> {

        protected String doInBackground(String s1, String s2) {
            String result = "";
            //http post

            ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
            nameValuePairs.add(new BasicNameValuePair("Vreme", s1));
            nameValuePairs.add(new BasicNameValuePair("Datum", s2));

            InputStream is = null;
            try {

                String adresa = "http://senzori.open.telekom.rs/script.php";
                HttpPost httppost = new HttpPost(adresa);
                httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
                HttpClient httpclient = new DefaultHttpClient();

                HttpResponse response = httpclient.execute(httppost);
                HttpEntity entity = response.getEntity();
                is = entity.getContent();
            } catch (Exception e) {
                Log.e("log_tag", "Error in http connection " + e.toString());
            }
            //convert response to string
            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();

                result = sb.toString();

            } catch (Exception e) {
                Log.e("log_tag", "Error converting result " + e.toString());
            }
            return result;
        }

        @Override
        protected String doInBackground(String... params) {
            // TODO Auto-generated method stub
            return null;
        }
    }
4

1 に答える 1

7

doInBackground をオーバーロードしたが、オーバーロードされたメソッドを呼び出していないため、おそらく機能していません。

元のメソッドが次のようになるように変更します。

@Override
protected String doInBackground(String... params) {

    return doInBackground (params[0], params[1]);
}

オーバーロードが役に立たなくなり、コードを overriden に戻すことに注意してdoInBackground (String... params)ください。また、 を呼び出すときにexecute()、引数として 2 つの文字列を指定する必要があります。

于 2013-01-11T22:25:14.960 に答える