2016-11-14 10 views
2

ファイルをアップロードするアプリを開発したいと思います。私はソースコードを手に入れました。しかし、それは画像のためだけに働いています。また、2 MB以下のサイズの画像ファイルしかアップロードできません。私はすべてのタイプのファイルをアップロードしたいと思います。私を助けてください。私のコードは以下の通りです。Android Retrofit 2ファイルのアップロードが機能していません

MainActivity.java

public class MainActivity extends AppCompatActivity { 
Service service; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    Button btn = (Button) findViewById(R.id.btn_upload); 

    HttpLoggingInterceptor interceptor = new HttpLoggingInterceptor(); 
    interceptor.setLevel(HttpLoggingInterceptor.Level.BODY); 
    OkHttpClient client = new OkHttpClient.Builder().addInterceptor(interceptor).build(); 

    // Change base URL to your upload server URL. 
    service = new Retrofit.Builder().baseUrl("http://192.168.1.4/work/filesharing/").client(client).build().create(Service.class); 

    if (btn != null) { 
     btn.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 

       String filePath1 = "/storage/emulated/0/gt.png"; 

       File file = new File(filePath1); 

       RequestBody reqFile = RequestBody.create(MediaType.parse("*/*"), file); 
       MultipartBody.Part body = MultipartBody.Part.createFormData("uploaded_file", file.getName(), reqFile); 
       RequestBody name = RequestBody.create(MediaType.parse("text/plain"), "upload_test"); 



       retrofit2.Call<okhttp3.ResponseBody> req = service.postImage(body, name); 
       req.enqueue(new Callback<ResponseBody>() { 
        @Override 
        public void onResponse(Call<ResponseBody> call, Response<ResponseBody> response) { } 

        @Override 
        public void onFailure(Call<ResponseBody> call, Throwable t) { 
         t.printStackTrace(); 

         Log.d("failure", "message = " + t.getMessage()); 
         Log.d("failure", "cause = " + t.getCause()); 
        } 
       }); 

      } 
     }); 
    } 
} 

} 

2メガバイト以上のzipファイルをアップロードする際にエラーが表示されます。

11-14 17:09:14.369 13895-13960/app3.acs.com.file_upload2 D/OpenGLRenderer: Enabling debug mode 0 
11-14 17:09:16.068 13895-13993/app3.acs.com.file_upload2 D/OkHttp: --> POST http://192.168.1.4/work/filesharing/6.php HTTP/1.1 
11-14 17:09:16.068 13895-13993/app3.acs.com.file_upload2 D/OkHttp: Content-Type: multipart/form-data; boundary=b2c1d03e-f7a5-4e3f-89e1-d1c20358f7dc 
11-14 17:09:16.070 13895-13993/app3.acs.com.file_upload2 D/OkHttp: Content-Length: 20862337 
11-14 17:09:16.934 13895-13919/app3.acs.com.file_upload2 W/art: Suspending all threads took: 30.363ms 
11-14 17:09:16.935 13895-13993/app3.acs.com.file_upload2 I/art: Alloc partial concurrent mark sweep GC freed 20318(40MB) AllocSpace objects, 0(0B) LOS objects, 35% free, 28MB/44MB, paused 644us total 49.776ms 
11-14 17:09:18.272 13895-13993/app3.acs.com.file_upload2 I/art: Alloc sticky concurrent mark sweep GC freed 8(256B) AllocSpace objects, 0(0B) LOS objects, 10% free, 68MB/76MB, paused 1.012ms total 6.892ms 
11-14 17:09:18.293 13895-13993/app3.acs.com.file_upload2 I/art: Alloc partial concurrent mark sweep GC freed 6(192B) AllocSpace objects, 0(0B) LOS objects, 18% free, 68MB/84MB, paused 1.310ms total 18.796ms 
11-14 17:09:18.330 13895-13993/app3.acs.com.file_upload2 I/art: Alloc concurrent mark sweep GC freed 6(12KB) AllocSpace objects, 0(0B) LOS objects, 18% free, 68MB/84MB, paused 627us total 34.490ms 
11-14 17:09:18.332 13895-13993/app3.acs.com.file_upload2 I/art: Forcing collection of SoftReferences for 36MB allocation 
11-14 17:09:18.371 13895-13993/app3.acs.com.file_upload2 I/art: Alloc concurrent mark sweep GC freed 11(344B) AllocSpace objects, 0(0B) LOS objects, 18% free, 68MB/84MB, paused 569us total 38.975ms 
11-14 17:09:18.373 13895-13993/app3.acs.com.file_upload2 E/art: Throwing OutOfMemoryError "Failed to allocate a 38772598 byte allocation with 16777120 free bytes and 27MB until OOM" 
11-14 17:09:18.381 13895-13993/app3.acs.com.file_upload2 E/AndroidRuntime: FATAL EXCEPTION: OkHttp Dispatcher 
                     Process: app3.acs.com.file_upload2, PID: 13895 
                     java.lang.OutOfMemoryError: Failed to allocate a 38772598 byte allocation with 16777120 free bytes and 27MB until OOM 
                      at java.lang.String.<init>(String.java:332) 
                      at java.lang.String.<init>(String.java:371) 
                      at okio.Buffer.readString(Buffer.java:579) 
                      at okio.Buffer.readString(Buffer.java:562) 
                      at okhttp3.logging.HttpLoggingInterceptor.intercept(HttpLoggingInterceptor.java:195) 
                      at okhttp3.RealCall$ApplicationInterceptorChain.proceed(RealCall.java:187) 
                      at okhttp3.RealCall.getResponseWithInterceptorChain(RealCall.java:160) 
                      at okhttp3.RealCall.access$100(RealCall.java:30) 
                      at okhttp3.RealCall$AsyncCall.execute(RealCall.java:127) 
                      at okhttp3.internal.NamedRunnable.run(NamedRunnable.java:32) 
                      at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112) 
                      at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587) 
                      at java.lang.Thread.run(Thread.java:818) 
11-14 17:09:20.069 13895-13993/app3.acs.com.file_upload2 I/Process: Sending signal. PID: 13895 SIG: 9 

答えて

0

ログレベルを下げるか、一緒に

を、それをすべて削除してくださいJakeWhartonを見ては、あなたが迫られてい.setLogLevel(RestAdapter.LogLevel.FULL)を呼び出すことで、」このリンクをhttps://github.com/square/retrofit/issues/540

を返信持っていますデバッグ時にのみこのようなロギングを有効にする必要があります。 "#:。

+0

私は正しい答えを得られませんでした。私を助けてください。 –

+0

ロギングインターセプタを削除します –

+0

これらの行を削除します HttpLoggingInterceptorインターセプタ=新しいHttpLoggingInterceptor(); interceptor.setLevel(HttpLoggingInterceptor.Level.BODY); –

0

この問題と関連しているものhttps://github.com/square/retrofit/issues/540 インターセプターLevel.BODYを無効にすることができます。 他のタイプのファイルで試しましたか?すべてのタイプのファイルで動作しますか?あなたはここから参照することができ

+0

はい私はそれが2メガバイト以下の画像のみをサポートする他のタイプのファイルを試しました。 –

+0

このインターセプタロギングを次のように変更しようとしましたか: HttpLoggingInterceptor.Level.NONE –

+0

はい。しかし、それは動作していません。ファイルをアップロードしていません。また、ログには何も表示されません。 –

0

をアップロードするのに役立ちます。これはxamppサーバーの問題です。今私は大きなファイルを送ることができます。私はこのリンクから答えを得た How to Increase Import Size Limit in phpMyAdmin using Xampp server?

しかし速度は遅いです。それはどんな形でも問題なく動作します。

関連する問題