0

私は、Android上のアプリケーションからphpファイル(ローカルでホストされている)にJSONオブジェクトを送信するのに少し苦労しています。Wiresharkは私のアプリケーション(Eclipse / ADKでのエミュレーション)からのアクティビティを記録していないため、phpビットは私の問題とは無関係であり、ほぼ確実に私の送信方法と関係があります。

      try {
        JSONObject json = new JSONObject();
        json.put("id", "5");
        json.put("time", "3:00");
        json.put("date", "03.04.12");
        HttpParams httpParams = new BasicHttpParams();
        HttpClient client = new DefaultHttpClient(httpParams);
        //
        //String url = "http://10.0.2.2:8080/sample1/webservice2.php?" + 
        //             "json={\"UserName\":1,\"FullName\":2}";
        String url = "http://localhost/datarecieve.php";

        HttpPost request = new HttpPost(url);
        request.setEntity(new ByteArrayEntity(json.toString().getBytes(
                "UTF8")));
        request.setHeader("json", json.toString());
        HttpResponse response = client.execute(request);
        HttpEntity entity = response.getEntity();
        // If the response does not enclose an entity, there is no need
        if (entity != null) {
            InputStream instream = entity.getContent();

        }
    } catch (Throwable t) {
        Toast.makeText(this, "Request failed: " + t.toString(),
                Toast.LENGTH_LONG).show();
    }

私が見つけた例からこれを変更したので、私はいくつかの完全に良いコードを取り、それを壊したと確信しています。私はマルチスレッドの要件を理解しているので、アプリケーションがハングして死ぬことはありませんが、その実装については確信がありません。Asynctaskを使用するとこの問題が修正されますか、それとも他の重要なことを見逃しましたか?

あなたが提供できるどんな助けにも感謝します。

4

2 に答える 2

1

エミュレーターを使用してコードをテストしていると仮定するとlocalhost、エミュレートされた環境を指します。コンピューターでホストされているphpにアクセスする必要がある場合は、IP10.0.2.2または192.168.1.3などのLANIPを使用する必要があります。エミュレートされた環境からローカルホストを参照するをチェックします

AsyncTaskで長時間実行される操作を実行する方法については、 「アプリの応答性を維持する」を参照してください。

于 2013-01-24T06:45:32.580 に答える
1

Android の上位バージョンでは、UI スレッドからのネットワーク操作のような長時間実行されるタスクが許可されないため、asynctask またはスレッドを使用する必要があります。

ここに詳細な説明へのリンクがあります

于 2013-01-24T05:50:01.663 に答える