質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

88.35%

AndroidからサーバにテキストファイルをPOST送信したい

解決済

回答 2

投稿

  • 評価
  • クリップ 0
  • VIEW 4,318

ferretdayo

score 13

 環境

  • Android Studio
  • httpclient 4.5.2
  • httpcore 4.5.2
  • httpmime 4.4.4

 現在のソースコード

(new Thread(new Runnable() {
                    @Override
                    public void run() {
                        String filename = "target.csv";
                        try {
                            HttpClient httpClient = new DefaultHttpClient();
                            HttpPost httpPost = new HttpPost("phpファイル");
                            ResponseHandler<String> responseHandler = new BasicResponseHandler();
                            MultipartEntity multipartEntity = new MultipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE);

                            File file = new File(filename);
                            FileBody fileBody = new FileBody(file);
                            multipartEntity.addPart("file", fileBody);
                            httpPost.setEntity(multipartEntity);
                            httpClient.execute(httpPost, responseHandler);
                        } catch (MalformedURLException e) {
                            e.printStackTrace();
                        } catch (IOException e) {
                            e.printStackTrace();
                        }
                    }
                })).start();


ここでのtarget.csvはAndroid上でファイルを作成しています。
もしかして、Android上で作成したファイルは送信できないとかあるのでしょうか?

 エラー

httpClient.execute(httpPost, responseHandler);
の時点でエラーとなっています。

06-01 18:13:35.422 15117-15189/com.example.hogehoge E/AndroidRuntime: FATAL EXCEPTION: Thread-2951
                                                                                       Process: com.example.hogehoge, PID: 15117
                                                                                       java.lang.NoSuchFieldError: No static field INSTANCE of type Lorg/apache/http/message/BasicHeaderValueFormatter; in class Lorg/apache/http/message/BasicHeaderValueFormatter; or its superclasses (declaration of 'org.apache.http.message.BasicHeaderValueFormatter' appears in /system/framework/ext.jar)
                                                                                           at org.apache.http.entity.ContentType.toString(ContentType.java:153)
                                                                                           at org.apache.http.entity.mime.MultipartFormEntity.<init>(MultipartFormEntity.java:56)
                                                                                           at org.apache.http.entity.mime.MultipartEntityBuilder.buildEntity(MultipartEntityBuilder.java:236)
                                                                                           at org.apache.http.entity.mime.MultipartEntity.getEntity(MultipartEntity.java:119)
                                                                                           at org.apache.http.entity.mime.MultipartEntity.isChunked(MultipartEntity.java:140)
                                                                                           at org.apache.http.protocol.RequestContent.process(RequestContent.java:79)
                                                                                           at org.apache.http.protocol.BasicHttpProcessor.process(BasicHttpProcessor.java:290)
                                                                                           at org.apache.http.protocol.HttpRequestExecutor.preProcess(HttpRequestExecutor.java:160)
                                                                                           at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:408)
                                                                                           at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:555)
                                                                                           at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:653)
                                                                                           at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:627)
                                                                                           at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:616)
                                                                                           at com.example.hogehoge.MainActivity$3$1.run(MainActivity.java:109)
                                                                                           at java.lang.Thread.run(Thread.java:818)


ファイルをサーバに送信するにはどうしたらいいでしょうか?よろしくお願いいたします。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

checkベストアンサー

0

ファイルシステムのルートにファイルがあるんですか?そこにファイルって作成できました?

ファイルパスの指定先が正しいかを調べてみたら良いと思います。

あとはContent-Typeの設定が無いことも気になります。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/06/02 00:39 編集

    Androidのアプリ内で作成したファイルなので,ちゃんとした場所を把握し切れていない状態です.
    CONTENT_TYPEにapplication/x-www-form-urlencoded;charset=UTF-8しても同じところで落ちました.
    一応ファイルの中身を表示するのは可能なのでファイルの作成は出来ていると思われます.
    やはりファイルの場所が間違ってるのでしょうかね・・・^;

    キャンセル

  • 2016/06/02 07:24

    適当なファイルパスの指定でファイルを送れるはず無いです。

    どうやって作ったのかとどうやって中身を確認したのかを教えてください。

    キャンセル

  • 2016/06/03 13:14 編集

    お返事ありがとうございます。
    色々と説明不足で申し訳ないです。
    アプリ上でファイル作成していて、SDにファイルを作成していない状態でした。SDカード上にファイルを作成して、パスを指定して送ると無事送ることが出来ました。
    教えていただきありがとうございました。

    キャンセル

0

HttpPost httpPost = new HttpPost("phpファイル");


ここ、何かのサンプルを丸写ししたのでしょうか、送信先のURLが入るべき場所にちゃんとしたURLが入っていません。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/06/02 00:21

    回答ありがとうございます.
    phpファイルに関しては,http://~/~.phpでしっかり入れております.
    実際の値を入れるのを避けるためにphpファイルと書いていました.分かりづらく書いてしまい,申し訳ありません.

    キャンセル

  • 2016/06/02 01:19

    そうでしたか、勘違いして済みません。
    ちなみに、Androidアプリでファイルを保存した場合、「/data/data/(パッケージ名)/files/(ファイル名)」というように保存されるそうです。フルパスを指定して送信してみると上手くいくかもしれません。

    キャンセル

  • 2016/06/03 13:12

    返事ありがとうございます。
    フルパスでやってみたのですが、上手くいかなかったです。
    いろいろやってみて、アプリ上でファイルを作って送るのではなく、SDカード上にファイル作って送るようにすると無事送れるようになりました。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 88.35%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る