2016-07-04 4 views
0

画像をサーバーに送信するが、受信クライアントに問題がある可能性があります。ログキャットはThe application may be doing too much work on its main threadと表示されます。私はこれを解決する方法を知らない。ここに私のコード画像を処理しようとすると「アプリケーションが主スレッドで処理しすぎている可能性があります」

のonCreate

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); 
    imageView = (ImageView) findViewById(R.id.IV); 
    BitmapImage.execute((Runnable)imageView); 
} 

画像受信と表示さ

public class BitmapImage extends AsyncTask<Object, Void, Bitmap> { 
    private ImageView bmImage; 
    DataInputStream dis; 
    OutputStream fos; 

    int len; 
    int size = 8012; 
    byte[] data = new byte[size]; 
    @Override 
    protected Bitmap doInBackground(Object... params) { 
     Bitmap size = null; 
     Bitmap mBitmap = null; 
     bmImage = (ImageView)params[0]; 

     try { 
      Log.d("TCP", "C: Connecting..."); 
      Socket server = new Socket(IPN, 2965); 
      fName = "img.TIFF"; 
      try { 
       PrintWriter out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(server.getOutputStream())), true); 
       out.println(command); 
       dirPath = getFilesDir().getAbsolutePath(); 
       File filepath = new File(dirPath); 
       if (!filepath.isDirectory()) { 
        filepath.mkdirs(); 
        Log.i("tag", "디렉토리 생성"); 
       } 

       Log.i("tag", "m : " + "파일 생성"); 
       dis = new DataInputStream(server.getInputStream()); 
       rf = new File(filepath + "/" + fName); 
       fos = openFileOutput(fName, Context.MODE_PRIVATE); 

       while ((len = dis.read(data)) != -1) { 
        fos.write(data, 0, len); 
        Log.i("tag", "tag : " + "수신중"); 
       } 
       Log.i("tag", "tag : " + "수신 완료"); 
      } catch (Exception e) { 
       Log.e("tag", "err : " + e); 
       e.printStackTrace(); 
      } finally { 
       fos.flush(); 
       fos.close(); 
       dis.close(); 
      } 
     } catch (Exception e) { 
      Log.e("TCP", "C: Error", e); 
     } 

     try { 
      ParcelFileDescriptor pfd = getContentResolver().openFileDescriptor(Uri.fromFile(rf), "r"); 
      mBitmap = BitmapFactory.decodeFileDescriptor(pfd.getFileDescriptor()); 
      size = Bitmap.createScaledBitmap(mBitmap, (S*mBitmap.getWidth()), (S*mBitmap.getHeight()), true); 

      Log.i("tag", "출력 완료"); 
     } catch (Exception e) { 
      Log.e("tag", "오류났당 -> " + e); 
     } 
     return size; 
    } 

    @Override 
    protected void onPostExecute(Bitmap bitmap) { 
     super.onPostExecute(bitmap); 
     bmImage.setImageBitmap(bitmap); 
    } 
} 

である私は、ファイルのサイズが、私は、ファイル形式を変更するので、問題であると思ったが、それはこの問題を解決しませんでした。ディスナイト受信部と出力部とを含む。これも解決できません。

最後に、私はいくつかの2番目のアプリケーションを受け取りたいと思います。私はアンドロイドのリモートPCを使用します。

+0

「受信クライアントに問題がありますか」??私は送付するクライアントに問題があると思う。 – greenapps

+0

あなたは間違ったファイルをチェックしていると思います。バックグラウンドスレッドでの呼び出しの切断以降、そのgonaがUIスレッドをブロックすることはありません。 – Muthu

+0

BitmapImage.execute((Runnable)imageView); '。それはコンパイルされますか?あなたのインスタンスは、そのクラスと同じ名前を持っています。奇妙な。 'new'を使ってclasインスタンスをどこで作成していますか? – greenapps

答えて

1

は、それが画像をロード中にメモリの問題を解決するのに役立ちますアプリケーション

<application 
     android:largeHeap="true" > 
</application> 

下マニフェストにこの行を追加します。

+0

ありがとうしかし、私は解決しなかったそのように.. –

関連する問題