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

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

新規登録して質問してみよう
ただいま回答率
85.48%
HTTP

HTTP(Hypertext Transfer Protocol)とはweb上でHTML等のコンテンツを交換するために使われるアプリケーション層の通信プロトコルです。

POST

POSTはHTTPプロトコルのリクエストメソッドです。ファイルをアップロードしたときや入力フォームが送信されたときなど、クライアントがデータをサーバに送る際に利用されます。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Q&A

解決済

2回答

7160閲覧

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

ferretdayo

総合スコア13

HTTP

HTTP(Hypertext Transfer Protocol)とはweb上でHTML等のコンテンツを交換するために使われるアプリケーション層の通信プロトコルです。

POST

POSTはHTTPプロトコルのリクエストメソッドです。ファイルをアップロードしたときや入力フォームが送信されたときなど、クライアントがデータをサーバに送る際に利用されます。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

0グッド

0クリップ

投稿2016/06/01 09:16

環境

  • 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)

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

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

Java

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

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

投稿2016/06/01 10:01

KoichiSugiyama

総合スコア3041

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

KoichiSugiyama

2016/06/01 16:19

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

2016/06/03 04:12

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

0

ベストアンサー

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

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

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

投稿2016/06/01 09:46

編集2016/06/01 10:55
yona

総合スコア18155

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ferretdayo

2016/06/01 15:53 編集

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

2016/06/01 22:24

適当なファイルパスの指定でファイルを送れるはず無いです。 どうやって作ったのかとどうやって中身を確認したのかを教えてください。
ferretdayo

2016/06/03 04:15 編集

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問