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

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

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

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

POST

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

Android

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

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

解決済

AndroidStudioからサーバへのファイル送信で「問題が発生したため、~を終了します。」と出ます。

m2cha
m2cha

総合スコア0

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

POST

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

Android

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

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

2回答

0評価

1クリップ

5044閲覧

投稿2016/09/16 09:38

編集2022/01/12 10:58

###前提・実現したいこと

AndroidStudioでpicture.pngというpngの画像ファイルを

サーバにPOST送信するメソッドをsubActivityクラスに作りました。

(色んなサイトのコードを参考に、というかコピペして作りました…(:_;))

ですがMainActivityでsubActivityをextendsして

メソッドを実行しようとすると、

「問題が発生したため、~を終了します。」という

メッセージが表示され、アプリが強制終了してしまいます。

###発生している問題・エラーメッセージ

問題が発生したため、~(アプリ名)を終了します。

###参考にしたページ

Androidから動画ファイルをアップロード
http://wiki\.toridge\.com/index\.php\?android-%E3%82%A2%E3%83%83%E3%83%97%E3%83%AD%E3%83%BC%E3%83%89\(okHttp3\)

OkHttp3を学ぶ。①AsyncTaskで画像を連続取得
http://qiita\.com/kmry2045/items/870127b1dc6b25bbcbdf

###該当のソースコード

↓subActivity.java

Java

import android\.app\.Activity; import android\.os\.AsyncTask; import android\.os\.Environment; import android\.util\.Log; import android\.widget\.TextView; import java\.io\.File; import java\.io\.IOException; import okhttp3\.Headers; import okhttp3\.MediaType; import okhttp3\.MultipartBody; import okhttp3\.OkHttpClient; import okhttp3\.Request; import okhttp3\.RequestBody; import okhttp3\.Response; import okio\.Buffer; /\*\* \* Created by m2cha on 2016/09/16\. \*/ public class subActivity extends Activity { private String TAG = "Activity"; private TextView mtextView; int RESULT_PICK_FILENAME = 1; protected void send\(\){ String path = Environment\.getExternalStorageDirectory\(\)\.getPath\(\); path = path \+ "/picturedir/picture\.png"; //文字列の取得 getRequestWithPOST\(path\);//POST //Toast\.makeText\( this, picturePath, Toast\.LENGTH_LONG\)\.show\(\); } public void getRequestWithPOST\(final String filePath\) { Log\.d\(TAG, filePath\); //Log\.i\(TAG,category\); new AsyncTask<Void, Void, String>\(\) { @Override protected String doInBackground\(Void\.\.\. params\) { String result = null; // リクエストボディを作る final MediaType TEXT = MediaType\.parse\("text/plain; charset=utf-8"\); final MediaType IMAGE = MediaType\.parse\("image/png"\); final String BOUNDARY = String\.valueOf\(System\.currentTimeMillis\(\)\); RequestBody requestBody = new MultipartBody\.Builder\(BOUNDARY\)\.setType\(MultipartBody\.FORM\) \.addPart\(Headers\.of\("Content-Disposition", "form-data; name=\\"category\\""\), RequestBody\.create\(TEXT, "IMAGE"\) \) \.addFormDataPart\("upfile", "upfile\.png", RequestBody\.create\(IMAGE, new File\(filePath\)\)\) \.build\(\); // Content-Length の作成 不要ならいらない。okio\.Buffer オブジェクトを利用。 Buffer buffer = new Buffer\(\); String CONTENT_LENGTH; try { requestBody\.writeTo\(buffer\); CONTENT_LENGTH = String\.valueOf\(buffer\.size\(\)\); } catch \(IOException e\) { e\.printStackTrace\(\); CONTENT_LENGTH = "-1"; } finally { buffer\.close\(\); } // リクエストオブジェクトを作る。\.post\(\) Request request = new Request\.Builder\(\) \.addHeader\("Content-Length", CONTENT_LENGTH\) \.url\("送信先URL"\) \.post\(requestBody\) \.build\(\); // クライアントオブジェクトを作る。 OkHttpClient client = new OkHttpClient\(\); // 実行。リクエストして結果を受け取る。 try { Response response = client\.newCall\(request\)\.execute\(\); result = response\.body\(\)\.string\(\); } catch \(IOException e\) { e\.printStackTrace\(\); } // 返す return result; } @Override protected void onPostExecute\(String result\) { mtextView\.setText\(result\); Log\.d\(TAG, result\); } }\.execute\(\); } }

↓MainActivity.java

Java

import android\.os\.Bundle; public class MainActivity extends subActivity { @Override protected void onCreate\(Bundle savedInstanceState\) { super\.onCreate\(savedInstanceState\); setContentView\(R\.layout\.activity_main\); send\(\); } }

↓Projectsファイルの中のappの中のbuild.gradleのdependencies
post通信ではokhttp3のライブラリを使っています。

dependencies { compile fileTree\(dir: 'libs', include: \['\*\.jar'\]\) testCompile 'junit:junit:4\.12' compile 'com\.android\.support:appcompat-v7:24\.2\.1' compile 'com\.github\.kevinsawicki:http-request:5\.6' compile 'com\.koushikdutta\.ion:ion:2\.\+' compile 'com\.squareup\.okhttp3:okhttp:3\.2\.0' compile 'com\.mcxiaoke\.volley:library:1\.0\.19' compile 'com\.loopj\.android:android-async-http:1\.4\.9' }

↓Manifestに追加したpermission

<uses-permission android:name="android\.permission\.INTERNET" /> <uses-permission android:name="android\.permission\.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android\.permission\.READ_EXTERNAL_STORAGE"/>

###試したこと
いろいろやりすぎて
何を試したかすらも覚えていません…orz
ちなみに、AsyncTaskの中の

@Override protected void onPostExecute\(String result\) { mtextView\.setText\(result\); Log\.d\(TAG, result\); }

は非同期通信が終わった後も実行されていない?みたいです。

あと

}\.execute\(\);

};//\.execute\(\);

にしてAsyncTaskを実行させないように?したら、
非同期通信されずアプリも落ちませんでした。
ということはAsyncTask内の処理に問題があるんですかね?
実際、サンプルコードをいじったのはAsyncTaskの中身だし…(><)

###補足情報(言語/FW/ツール等のバージョンなど)
Android/AndroidStudio

###最後に…

Androidの開発を初めて半年程度の超初心者ですので、
専門的な知識が拙く変な文章の部分もあると思いますm(_ _)mすみません…

解決方法がお分かりの方は回答をお願いしますm(_ _)m

良い質問の評価を上げる

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

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

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

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

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

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

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

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

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

yona
yona

2016/09/16 10:52

エラーログを追記してください。
m2cha
m2cha

2016/09/16 11:22 編集

LogcutのErrorのログです。 09-16 20:10:17\.049 32630-32710/com\.m2cha\.sendtest E/AndroidRuntime: FATAL EXCEPTION: AsyncTask #1 Process: com\.m2cha\.sendtest, PID: 32630 java\.lang\.RuntimeException: An error occurred while executing doInBackground\(\) at android\.os\.AsyncTask\$3\.done\(AsyncTask\.java:309\) at java\.util\.concurrent\.FutureTask\.finishCompletion\(FutureTask\.java:354\) at java\.util\.concurrent\.FutureTask\.setException\(FutureTask\.java:223\) at java\.util\.concurrent\.FutureTask\.run\(FutureTask\.java:242\) at android\.os\.AsyncTask\$SerialExecutor\$1\.run\(AsyncTask\.java:234\) at java\.util\.concurrent\.ThreadPoolExecutor\.runWorker\(ThreadPoolExecutor\.java:1113\) at java\.util\.concurrent\.ThreadPoolExecutor\$Worker\.run\(ThreadPoolExecutor\.java:588\) at java\.lang\.Thread\.run\(Thread\.java:818\) Caused by: java\.lang\.IllegalArgumentException: unexpected url: 送信先URL at okhttp3\.Request\$Builder\.url\(Request\.java:143\) at com\.m2cha\.sendtest\.subActivity\$1\.doInBackground\(subActivity\.java:77\) at com\.m2cha\.sendtest\.subActivity\$1\.doInBackground\(subActivity\.java:42\) at android\.os\.AsyncTask\$2\.call\(AsyncTask\.java:295\) at java\.util\.concurrent\.FutureTask\.run\(FutureTask\.java:237\) at android\.os\.AsyncTask\$SerialExecutor\$1\.run\(AsyncTask\.java:234\) at java\.util\.concurrent\.ThreadPoolExecutor\.runWorker\(ThreadPoolExecutor\.java:1113\) at java\.util\.concurrent\.ThreadPoolExecutor\$Worker\.run\(ThreadPoolExecutor\.java:588\) at java\.lang\.Thread\.run\(Thread\.java:818\)
m2cha
m2cha

2016/09/16 11:24 編集

すみません、ごちゃごちゃしたので質問の本文を編集して 最下部にもう一度書きます。

まだ回答がついていません

会員登録して回答してみよう

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

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

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

POST

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

Android

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

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。