マルチスレッドの手法を使用してWebコンテンツをダウンロードしようとしています。私は自分のコードが正しいと信じているように、オンラインアンドロイド開発チュートリアルサービスに従っています(完全なアンドロイドWeb開発コース第5章)。しかし、要求に応じてWebページの一部をログに表示した後、次のメッセージが表示されます。Android - ダウンロードWebコンテンツエラー - スキップしたXフレーム!アプリケーションがメインスレッドであまりにも多くの作業をしている可能性があります
"I/Choreographer:743フレームをスキップしました!アプリケーションがメインスレッドで処理している可能性があります。
私はAsynTaskを使用していますが、まだ運がありません。
public class MainActivity extends AppCompatActivity {
public class DownloadTask extends AsyncTask<String, Void, String> {
@Override
protected String doInBackground(String... urls) {/
String result = "";
URL url;
HttpURLConnection urlConnection = null;
try{
url = new URL(urls[0]);
urlConnection = (HttpURLConnection) url.openConnection();
InputStream in = urlConnection.getInputStream();
InputStreamReader reader = new InputStreamReader(in);
int data = reader.read();
while (data != -1) {
char current = (char) data;
result += current;
data = reader.read();
}
return result;
}
catch(Exception e) {
e.printStackTrace();
return "Failed";
}
}
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
DownloadTask task = new DownloadTask();
String result = null;
try {
result = task.execute("http://www.w3schools.com/html/tryit.asp?filename=tryhtml_basic_document").get();
} catch (InterruptedException e) {
e.printStackTrace();
} catch (ExecutionException e) {
e.printStackTrace();
}
Log.i("Contents of URL", result);
}
}
は、このコードはコンパイルあなたは確かにいますか? Executeは結果の型ではなく、それ自身を返します。したがって、resultへの代入はコンパイルエラーを引き起こすはずです。結果の型を返す場合、非同期ではありません。 – deekay