30秒ごとにコードを作成して送信するアプリケーションを設定しようとしています。コードはWebサービス経由でデータベースに送られます。 私はアプリを実行するたびに、それは最初の時間を動作しますが、30秒の期限が切れた場合、それは次のようなエラー与える:ラインで一定の間隔で非同期タスクを実行する
app E/AndroidRuntime: FATAL EXCEPTION: AsyncTask #3
java.lang.RuntimeException: An error occured while executing doInBackground()
at android.os.AsyncTask$3.done(AsyncTask.java:299)
at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:352)
at java.util.concurrent.FutureTask.setException(FutureTask.java:219)
at java.util.concurrent.FutureTask.run(FutureTask.java:239)
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573)
at java.lang.Thread.run(Thread.java:856)
Caused by: java.lang.ArrayIndexOutOfBoundsException: length=0; index=0
at andreea.example.com.mobileapp.CodeGeneratorActivity$HttpAsyncTask.doInBackground(CodeGeneratorActivity.java:196)
at andreea.example.com.mobileapp.CodeGeneratorActivity$HttpAsyncTask.doInBackground(CodeGeneratorActivity.java:181)
at android.os.AsyncTask$2.call(AsyncTask.java:287)
at java.util.concurrent.FutureTask.run(FutureTask.java:234)
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573)
at java.lang.Thread.run(Thread.java:856)
を:
1. String post = POST(urls[0], my_code);
2. private class HttpAsyncTask extends AsyncTask<String, Void, String>
私はの作品を含めています私が使用するコード:
public void timer_code() {
final Random rand = new Random();
n = rand.nextInt(999999)+100000;
code_gen.setText(String.valueOf(n));
mytask = new HttpAsyncTask();
test = my_url_builder();
// mytask.execute(test);
//System.out.println(nativePRNG.toString()+"Try code");
new CountDownTimer(30000,1000){
@Override
public void onTick(long millisUntilFinished) {
timer.setText(String.format(String.valueOf(TimeUnit.MILLISECONDS.toSeconds(millisUntilFinished))));
}
public void onFinish()
{
n = rand.nextInt(999999)+100000;
code_gen.setText(String.valueOf(n));
//mytask = new HttpAsyncTask();
callAsynchronousTask();
// mytask.execute(test);
this.start();
}
}.start();
}
public void callAsynchronousTask() {
Timer timer = new Timer();
TimerTask doAsynchronousTask = new TimerTask() {
@Override
public void run() {
try {
HttpAsyncTask mytask = new HttpAsyncTask();
// PerformBackgroundTask this class is the class that extends AsynchTask
mytask.execute();
} catch (Exception e) {
// TODO Auto-generated catch block
}
}
};
timer.schedule(doAsynchronousTask, 0, 30000); //execute in every 50000 ms
}
01:
//POST request to add new user
public String POST(String url, CodeClass code)
{
String result = "";
InputStream inputStream = null;
try{
HttpClient httpclient;
HttpPost httppost;
ArrayList<NameValuePair>postParameters;
httpclient = new DefaultHttpClient();
httppost = new HttpPost(url);
postParameters = new ArrayList<>();
postParameters.add(new BasicNameValuePair("code", code_gen.getText().toString()));
httppost.setEntity(new UrlEncodedFormEntity(postParameters));
HttpResponse httpresponse = httpclient.execute(httppost);
inputStream = httpresponse.getEntity().getContent();
if(inputStream != null)
{
result = convertInputStreamToString(inputStream);
}
else
{
result = "Did not work";
}
}catch (Exception e)
{
e.getLocalizedMessage();
}
return result;
}
private static String convertInputStreamToString(InputStream inputStream) throws IOException {
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
String line = "";
String result = "";
while((line = bufferedReader.readLine()) != null)
result += line;
inputStream.close();
return result;
}
private class HttpAsyncTask extends AsyncTask<String, Void, String> {
String auxcode = code_gen.getText().toString();
final String url = my_url_builder();
@Override
protected String doInBackground(String... urls) {
final ServiceHandler sh = new ServiceHandler();
jsonStr = sh.makeServiceCall(url, ServiceHandler.POST);
my_code = new CodeClass();
my_code.setCode(auxcode); //HERE!!
String post = POST(urls[0], my_code);
System.out.println(urls[0]+" This is the urls0");
count++;
return post;
}
// onPostExecute displays the results of the AsyncTask.
protected void onPostExecute(String result) {
HttpAsyncTask new_instance = new HttpAsyncTask();
//new_instance.execute();
Toast.makeText(getBaseContext(), "Yup", Toast.LENGTH_SHORT).show();
}
}
IとしてHttpAsyncTaskを実行します
ログを更新します。 –
あなたの完全なログを投稿してください – Jas
'urls'が空であるようです...定期的な仕事のためには、ScheduledExecutorServiceを使う方が良いかもしれません。 – Fildor