2017-12-10 20 views
-1

アプリの起動時にサーバーから数MB(1MB〜10MB)のデータをダウンロードする必要があるアプリがあります。多くのデータをダウンロードすると反応しないアプリ

問題はアプリということである:(画面が黒いまま)

  • ダウンロードを開始する前にメインTextViewは表示されません

多かれ少なかれ応答しません

コードは次のとおりです。

public class Main extends Activity { 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     DoIt(); 
    } 

    private void DoIt() { 

     HttpClient httpClient = new DefaultHttpClient(); 

     TextView tv = (TextView)findViewById(R.id.textView); 
     tv.setText("Starting app..."); 

     try {   
      for (int i=1; i<100; i++) { 
       HttpPost request2 = new HttpPost("http://192.168.1.12:3000/bytes/data" + i);    
       HttpResponse response2 = httpClient.execute(request2); 

       // Do something with data. In some cases, it has to download 1MB data 
      } 
     } 

     // catch + finally ... 
    } 
} 

アプリが反応しないようにするにはどうすればよいですか?

+2

を動作するはずだと思います。 https://developer.android.com/training/articles/perf-anr.html – codeMagic

+0

@codeMagicしかし、stlil、なぜtv.setText( "Starting app ..."); 'が表示されていませんか? (ダウンロードが開始される前に表示されるはずです)。 – Basj

+0

@codeMagicが言っていることをして、あなたはテキストを設定します。あなたはAsynTaskで簡単にそれを行うことができます。 – Cristian

答えて

0

アプリは無責任になりますが、メインスレッドでファイルをダウンロードされますが、この

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    TextView tv = (TextView)findViewById(R.id.textView); 
    tv.setText("Starting app..."); 

    new Thread(new Runnable() { 
     @Override 
     public void run() { 
      DoIt(); 
     } 
    }).start(); 

} 

private void DoIt() { 

    HttpClient httpClient = new DefaultHttpClient(); 

    try {   
     for (int i=1; i<100; i++) { 
      HttpPost request2 = new HttpPost("http://192.168.1.12:3000/bytes/data" + i);    
      HttpResponse response2 = httpClient.execute(request2); 

      // Do something with data. In some cases, it has to download 1MB data 
     } 
    } 

    // catch + finally ... 
} 

のようなバックグラウンドスレッドを使用する必要がありますので、私は、これはあなたがネットワークの運用を行うために、バックグラウンドスレッドを使用する必要があり

+0

ありがとう!私はそれが始まるのを見て、テキストでTextViewを見ると、すぐに '残念なことに、appが停止しました。 'というメッセージが表示されます。何か案が? – Basj

+0

logcatのエラーは何ですか – Arvindo

+0

私は 'adb logcat'に何千もの行がありますが、私の(クラッシュする)アプリケーションのものだけを表示する方法はありますか? – Basj

関連する問題