私はAndroidアプリケーションを開発しようとしています。アプリケーションが起動するたびに、サーバーからいくつかの詳細を取得する必要があります。私はそれにasynctask
を使用しており、私はそれをonCreate
の方法でアンドロイドで呼び出しています。サーバーが動作しているときには完全に動作しますが、サーバーが動作していないときは、アプリケーションがタイムアウトするのを待ってサーバーが動作していないことを知りたくありません。実装するためのより良い方法は何ですか?私の現在の方法では、タイムアウトが起こるまでアプリケーションは止まっています。Asynctaskがつまずく
0
A
答えて
0
私はasyncTask.execute()
に変更したときには、接続にタイムアウトを追加
0
あなたが
urlConnection.setReadTimeout(10000);
urlConnection.setConnectTimeout(15000);
完全なソースコードは以下のとおりである次のコードを使用してHttpURLConnection
にTIMOUTを追加することができます。歓声:)
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
new Test().execute();
}
//AsyncTask
class Test extends AsyncTask < String, Void, String > {
@Override
protected String doInBackground(String...params) {
InputStream in = null;
String queryResult = "";
URL url = new URL("http://www.android.com/");
HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
//add parameters
urlConnection.setReadTimeout(10000);
urlConnection.setConnectTimeout(15000);
urlConnection.setRequestMethod("POST");
urlConnection.setDoInput(true);
urlConnection.setDoOutput(true);
List<NameValuePair> params = new ArrayList<NameValuePair>();
params.add(new BasicNameValuePair("firstParam", paramValue1));
params.add(new BasicNameValuePair("secondParam", paramValue2));
params.add(new BasicNameValuePair("thirdParam", paramValue3));
try {
//write OutputStream
OutputStream os = urlConnection.getOutputStream();
BufferedWriter writer = new BufferedWriter(
new OutputStreamWriter(os, "UTF-8"));
writer.write(getQuery(params));
writer.flush();
writer.close();
os.close();
InputStream in = new BufferedInputStream(urlConnection.getInputStream());
queryResult = readStream(in);
} finally {
urlConnection.disconnect();
}
return queryResult;
}
private String readStream(InputStream iStream) throws IOException {
//Buffered reader allows us to read line by line
try (BufferedReader bReader =
new BufferedReader(new InputStreamReader(iStream))) {
StringBuilder builder = new StringBuilder();
String line;
while ((line = bReader.readLine()) != null) { //Read till end
builder.append(line);
}
return builder.toString();
}
}
private String getQuery(List<NameValuePair> params) throws UnsupportedEncodingException
{
StringBuilder result = new StringBuilder();
boolean first = true;
for (NameValuePair pair : params)
{
if (first)
first = false;
else
result.append("&");
result.append(URLEncoder.encode(pair.getName(), "UTF-8"));
result.append("=");
result.append(URLEncoder.encode(pair.getValue(), "UTF-8"));
}
return result.toString();
}
protected void onPostExecute(String data) {
// do further things
Toast toast = Toast.makeText(getApplicationContext(), data,
Toast.LENGTH_SHORT);
toast.show();
}
}
}
0
一度のコードの行の下に使用:
try {
URL url = new URL("http://192.168.1.1");
HttpURLConnection urlc = (HttpURLConnection) url.openConnection();
urlc.setConnectTimeout(5 * 1000);
urlc.connect();
if (urlc.getResponseCode() == 200) {
// condition for connection is fine , 200 = "OK"
return true;
} else {
return false;
}
} catch (MalformedURLException e1) {
return false;
} catch (IOException e) {
return false;
}
関連する問題
- 1. linuxkit gettyがつまずく
- 2. スクロールトップがつまずく
- 3. Java Android AsyncTask - いつAsyncTaskの実行が停止しますか?
- 4. DrawerLayoutがスワイプでつまずく
- 5. プルデータ式でつまずく
- 6. がAsyncTask
- 7. エスプレッソはAsyncTaskが完了するのを待たずに
- 8. AsyncTaskが正しくデータをロードしていません。
- 9. AsyncTaskについてのアドバイス
- 10. いくつかのクラスでAsynctaskを再利用
- 11. AsyncTaskに関するいくつかの質問
- 12. 1つのアクティビティに複数のasynctaskクラスがあります
- 13. Android AsyncTask inside AsyncTask
- 14. ダイアログがAsyncTask
- 15. IllegalStateExceptionがAsyncTask
- 16. asynctask asynctaskの使用
- 17. アンドロイド - AsyncTaskソケットがタイムアウト
- 18. SQLiteDatabase AsyncTask(Android)でDBを開く
- 19. AsyncTaskクラスの正しい方法が、別のAsyncTaskクラスがプロセスを終了するのを待つ方法
- 20. Androidの別のAsyncTaskでAsyncTask
- 21. ファイルが存在するのにAsyncTaskリターンファイルが見つかりません
- 22. いくつかのAsyncTaskまたはHandlerThread(パイプラインスレッド)を使用する方が良いでしょうか?
- 23. UIGestureRecognizerがうまく動作せず、アプリケーションが遅くなる
- 24. AsyncTask
- 25. asynctask
- 26. AsyncTaskのイベントが終了しました
- 27. doBackground AsyncTaskにエラーがありますか?
- 28. 関数が終了するまで(AsyncTask)
- 29. AsyncTaskでonProgressUpdate()が機能しません。
- 30. AsyncTaskのdoInBackgroundはAsyncTask :: executeが呼び出されたあと遅すぎます。
正常に動作します
asyncTask.execute().get();
を使用していましたか? AsyncTaskを使用している場合、アプリケーションはフリーズしません。コードを表示するように質問を編集 –使用してください、それはそれを処理します。 –
asynctaskの場合、なぜスタックされますか?あなたはoncreateでasynctaskの "get"を呼び出しますか?(それはその後、タスクを待っていて、止まってしまいます)それを避けて、それをonPostExecuteで行います – Riddim