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

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

ただいまの
回答率

88.80%

非同期通信でのアップロードエラー

解決済

回答 3

投稿

  • 評価
  • クリップ 0
  • VIEW 3,578

gammaAI

score 10

こんにちは、Androidでプログラミングを行っているものです。
レンタルサーバを借りてそこの指定のディレクトリにandroid上のsdcard/0の内部ストレージにあるzipファイルを入れたいと思っています。

どれが必要なのかわからないので、調べて使いそうなjarはいれておきました
httpclient-4.5.1.jar
httpcore-4.4.3.jar
httpmime-4.5.1.jar
apache-mime4j-0.6.jar
commons-codec-1.9.jar
commons-logging1.2.jar

web上のサンプルコード↓を利用してやっています

mport java.io.File;
import java.io.IOException;

import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.ResponseHandler;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.mime.HttpMultipartMode;
import org.apache.http.entity.mime.MultipartEntity;
import org.apache.http.entity.mime.content.FileBody;
import org.apache.http.impl.client.BasicResponseHandler;
import org.apache.http.impl.client.DefaultHttpClient;

//import android.app.Activity;
import android.os.AsyncTask;
import android.util.Log;
public class Upload extends AsyncTask<File, Integer, String> {

    @SuppressWarnings("deprecation")
    @Override
    protected String doInBackground(File... params) {
        File filename = params[0];
        try {
            HttpClient httpClient = new DefaultHttpClient();
            // ポスト先のファイルを指定
            HttpPost httpPost = new HttpPost("送り先");
            ResponseHandler<String> responseHandler = new BasicResponseHandler();
            MultipartEntity multipartEntity = new MultipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE);

            // ファイル名&パスを指定
            File file = new File(filename.toString());
            Log.d("fileの中身",file.toString());
            FileBody fileBody = new FileBody(file);
            // KEYとファイルを指定
            multipartEntity.addPart("upfile", fileBody);

            httpPost.setEntity(multipartEntity);
            httpClient.execute(httpPost, responseHandler);
        } catch (ClientProtocolException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return null;


このまま動くと思うのですが、以下のようなエラーが発生しました。
Uploadクラスの41行目、すなわち httpClient.execute(httpPost, responseHandler);という処理が原因?なのかわかりませんが、このエラーの原因を探してみても解決策が得られませんでした。
どうすればよいのかご存知の方がおられましたら教えていただけないでしょうか。よろしくお願いします。

11-05 17:56:18.584: E/AndroidRuntime(5046): FATAL EXCEPTION: AsyncTask #2
11-05 17:56:18.584: E/AndroidRuntime(5046): Process: (), PID: 5046
11-05 17:56:18.584: E/AndroidRuntime(5046): java.lang.RuntimeException: An error occured while executing doInBackground()
11-05 17:56:18.584: E/AndroidRuntime(5046):     at android.os.AsyncTask$3.done(AsyncTask.java:304)
11-05 17:56:18.584: E/AndroidRuntime(5046):     at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:355)
11-05 17:56:18.584: E/AndroidRuntime(5046):     at java.util.concurrent.FutureTask.setException(FutureTask.java:222)
11-05 17:56:18.584: E/AndroidRuntime(5046):     at java.util.concurrent.FutureTask.run(FutureTask.java:242)
11-05 17:56:18.584: E/AndroidRuntime(5046):     at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
11-05 17:56:18.584: E/AndroidRuntime(5046):     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
11-05 17:56:18.584: E/AndroidRuntime(5046):     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
11-05 17:56:18.584: E/AndroidRuntime(5046):     at java.lang.Thread.run(Thread.java:818)
11-05 17:56:18.584: E/AndroidRuntime(5046): Caused by: 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)
11-05 17:56:18.584: E/AndroidRuntime(5046):     at org.apache.http.entity.ContentType.toString(ContentType.java:153)
11-05 17:56:18.584: E/AndroidRuntime(5046):     at org.apache.http.entity.mime.MultipartFormEntity.<init>(MultipartFormEntity.java:53)
11-05 17:56:18.584: E/AndroidRuntime(5046):     at org.apache.http.entity.mime.MultipartEntityBuilder.buildEntity(MultipartEntityBuilder.java:236)
11-05 17:56:18.584: E/AndroidRuntime(5046):     at org.apache.http.entity.mime.MultipartEntity.getEntity(MultipartEntity.java:119)
11-05 17:56:18.584: E/AndroidRuntime(5046):     at org.apache.http.entity.mime.MultipartEntity.isChunked(MultipartEntity.java:138)
11-05 17:56:18.584: E/AndroidRuntime(5046):     at org.apache.http.protocol.RequestContent.process(RequestContent.java:84)
11-05 17:56:18.584: E/AndroidRuntime(5046):     at org.apache.http.protocol.BasicHttpProcessor.process(BasicHttpProcessor.java:295)
11-05 17:56:18.584: E/AndroidRuntime(5046):     at org.apache.http.protocol.HttpRequestExecutor.preProcess(HttpRequestExecutor.java:165)
11-05 17:56:18.584: E/AndroidRuntime(5046):     at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:413)
11-05 17:56:18.584: E/AndroidRuntime(5046):     at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:560)
11-05 17:56:18.584: E/AndroidRuntime(5046):     at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:658)
11-05 17:56:18.584: E/AndroidRuntime(5046):     at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:632)
11-05 17:56:18.584: E/AndroidRuntime(5046):     at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:621)
11-05 17:56:18.584: E/AndroidRuntime(5046):     at application.Upload.doInBackground(Upload.java:41)
11-05 17:56:18.584: E/AndroidRuntime(5046):     at application.Upload.doInBackground(Upload.java:1)
11-05 17:56:18.584: E/AndroidRuntime(5046):     at android.os.AsyncTask$2.call(AsyncTask.java:292)
11-05 17:56:18.584: E/AndroidRuntime(5046):     at java.util.concurrent.FutureTask.run(FutureTask.java:237)
11-05 17:56:18.584: E/AndroidRuntime(5046):     ... 4 more
11-05 17:56:19.282: E/WindowManager(5046): android.view.WindowLeaked: Activity jp.gr.java_conf.gss.Report has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView{255aca57 V.E..... R......D 0,0-1105,192} that was originally added here
11-05 17:56:19.282: E/WindowManager(5046):     at android.view.ViewRootImpl.<init>(ViewRootImpl.java:363)
11-05 17:56:19.282: E/WindowManager(5046):     at android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:271)
11-05 17:56:19.282: E/WindowManager(5046):     at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:85)
11-05 17:56:19.282: E/WindowManager(5046):     at android.app.Dialog.show(Dialog.java:298)
11-05 17:56:19.282: E/WindowManager(5046):     at application.Report.outputCommon(Report.java:635)
11-05 17:56:19.282: E/WindowManager(5046):     at application.Report.access$1(Report.java:577)
11-05 17:56:19.282: E/WindowManager(5046):     at application.Report$17.onClick(Report.java:531)
11-05 17:56:19.282: E/WindowManager(5046):     at com.android.internal.app.AlertController$ButtonHandler.handleMessage(AlertController.java:162)
11-05 17:56:19.282: E/WindowManager(5046):     at android.os.Handler.dispatchMessage(Handler.java:102)
11-05 17:56:19.282: E/WindowManager(5046):     at android.os.Looper.loop(Looper.java:135)
11-05 17:56:19.282: E/WindowManager(5046):     at android.app.ActivityThread.main(ActivityThread.java:5254)
11-05 17:56:19.282: E/WindowManager(5046):     at java.lang.reflect.Method.invoke(Native Method)
11-05 17:56:19.282: E/WindowManager(5046):     at java.lang.reflect.Method.invoke(Method.java:372)
11-05 17:56:19.282: E/WindowManager(5046):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)
11-05 17:56:19.282: E/WindowManager(5046):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)

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

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

回答 3

checkベストアンサー

0

Android組込みのHttpComponent(HttpClient)の正しい使い方といくつかのtips
こちらの使い方を試してみてはいかがでしょうか。

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2015/11/14 13:57

    少し忙しく返信遅れてしまいました。
    Androidのバージョンがアップデートされて、旧実装方法が検索エンジンで上位に表示される問題はなんとかしてほしいとも思いました。記事内で張られた別のページによるとhttpコンポーネントが2つのみでいいと書いてあり、入れ直してページの内容をトレースしてみたところ無事に稼働しました。ありがとうございました!

    キャンセル

0

非同期タスクをメインのアクティビティで行っているのが悪そうな気がします。
非同期処理は別スレッドを立てて行わないといけないはずです

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2015/11/06 14:22

    どこかの説明でdoInbackgroundで処理すればいけるような気がしましたが、それがいけないのでしょうか。。

    キャンセル

0

スタックトレースに書かれている
org.apache.http.message.BasicHeaderValueFormatter
で検索したところ、以下のリンクが見つかりました。
http://stackoverflow.com/questions/27366430/getting-nosuchfielderror-instance-org-apache-http-message-basicheadervalueparser

こちらを確認してみてはいかがでしょうか?

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2015/11/06 14:23

    jarのバージョンも関係ありそうなので整えてみます!

    キャンセル

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

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

関連した質問

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