2015-08-11 4 views
0

Я пытаюсь сделать приложение, чтобы показать текущее время эпохи, которое обновляется в реальном времени при запуске кнопки, а другая кнопка останавливает его. Я пытаюсь использовать задачу Async для этой цели, но я застрял в ошибках, поскольку не выполняется в async-задании, не может быть применен к java.lang.string. Пожалуйста, помогите.android эпохи время с использованием Async Задача

package com.example.sangeeta.epochtimer; 


import android.support.v7.app.ActionBarActivity; 
import android.os.Bundle; 
import android.view.Menu; 
import android.view.MenuItem; 
import android.view.View; 
import android.widget.Button; 
import android.widget.TextView; 
import android.os.AsyncTask; 
import android.provider.Settings.System; 
import android.os.SystemClock; 

import java.util.Calendar; 


public class MainActivity extends ActionBarActivity { 

TextView textonee; 
Button start, stop; 
long epochtime; 
boolean pressstate; 

@Override 

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    pressstate = false; 
    start = (Button) findViewById(R.id.button1); 
    stop = (Button) findViewById(R.id.button2); 



    start.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      pressstate = true; 
      new Operation().execute(""); 


     } 
    }); 

    stop.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      //shutdown(); 

      pressstate = false; 


     } 
    }); 
} 


@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    // Inflate the menu; this adds items to the action bar if it is  present. 
    getMenuInflater().inflate(R.menu.menu_main, menu); 
    return true; 
} 

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    // Handle action bar item clicks here. The action bar will 
    // automatically handle clicks on the Home/Up button, so long 
    // as you specify a parent activity in AndroidManifest.xml. 
    int id = item.getItemId(); 

    //noinspection SimplifiableIfStatement 
    if (id == R.id.action_settings) { 
     return true; 
    } 

    return super.onOptionsItemSelected(item); 
} 


private class Operation extends AsyncTask<String, Void, String> { 

    @Override 
    protected String doInBackground(String... params) { 


     while (pressstate) { 
      Calendar rightNow = Calendar.getInstance(); 

      // offset to add since we're not UTC 

      //long offset = rightNow.get(Calendar.ZONE_OFFSET) + 
        //rightNow.get(Calendar.DST_OFFSET); 

      //long sinceMidnight = (rightNow.getTimeInMillis() + offset) % 
        //(24 * 60 * 60 * 1000); 

      epochtime=rightNow.getTimeInMillis(); 
      this.publishProgress(""+epochtime); 
     } 
     return null; 
    } 

    protected void onPostExecute(String result) { 
     textonee = (TextView) findViewById(R.id.textViewepo); 
     //textonee.setText("" + epochtime); // txt.setText(result); 
     // might want to change "executed" for the returned string passed 
     // into onPostExecute() but that is upto you 
     super.onProgressUpdate(result); 
     textonee.setText(result[0]); 
    } 
} 


}; 
+0

Не могли бы вы перечислить ошибки, которые вы получаете? –

+0

Привет! Как предложил Чарльз Дарем, я попытался переопределить onProgressUpdate. Получение этих ошибок: оценил бы вашу помощь..thanx Ошибка: (85, 9) error: метод не переопределяет или не реализует метод из супертипа Ошибка: (83, 13) error: MainActivity.Operation не является абстрактным и не переопределяет абстрактный метод doInBackground (String ...) в AsyncTask –

+0

Ошибка: (86, 24) error: doInBackground (String ...) в MainActivity.Operation не может переопределить doInBackground (Params ...) в AsyncTask return type void не совместим с Void, где Params, Result являются переменными типа: Params extends Object объявлен в классе AsyncTask Result extends Object объявлен в классе AsyncTask Ошибка: (111, 36) error: требуется массив, но найденная строка Примечание: D: \ Users \ sangeeta \ AndroidStudioProjects \ EpochTimer \ app \ src \ main \ java \ com \ example \ sangeeta \ epochtimer \ MainActivity.java использует или переопределяет устаревший API. –

ответ

0

Вы должны переопределить onProgressUpdate вместо onPostExecute для того, чтобы правильно публиковать прогресс.

private class Operation extends AsyncTask<String, String, Void> { 

@Override 
protected void doInBackground(String... params) { 


    while (pressstate) { 
     Calendar rightNow = Calendar.getInstance(); 

     // offset to add since we're not UTC 

     //long offset = rightNow.get(Calendar.ZONE_OFFSET) + 
       //rightNow.get(Calendar.DST_OFFSET); 

     //long sinceMidnight = (rightNow.getTimeInMillis() + offset) % 
       //(24 * 60 * 60 * 1000); 

     epochtime=rightNow.getTimeInMillis(); 
     this.publishProgress(""+epochtime); 
    } 
} 

protected void onProgressUpdate(String result) { 
    textonee = (TextView) findViewById(R.id.textViewepo); 
    //textonee.setText("" + epochtime); // txt.setText(result); 
    // might want to change "executed" for the returned string passed 
    // into onPostExecute() but that is upto you 
    super.onProgressUpdate(result); 
    textonee.setText(result[0]); 
} 

protected void onPostExecute(Void... voids) { 
// NO-OP 
} 
+0

Привет! Большое спасибо за ответ ... Я изменил и выполнил снова, но получил эти ошибки: Ошибка: (85, 9) error: метод не отменяет или не реализует метод из супертипа Ошибка: (83, 13) error: MainActivity.Operation не является абстрактным и не переопределяет абстрактный метод doInBackground (String ...) в AsyncTask Примечание: перекомпилируйте с -Xlint: устаревшее для деталей. –

+0

Ошибка: (86, 24) error: doInBackground (String ...) в MainActivity.Operation не может переопределить doInBackground (Params ...) в AsyncTask return type void не совместим с Void где Params, Result являются переменными типа : Параметр extends Объект, объявленный в классе AsyncTask Результат extends Объект, объявленный в классе AsyncTask Ошибка: (111, 36) error: требуется массив, но найденная строка Примечание: D: \ Users \ sangeeta \ AndroidStudioProjects \ EpochTimer \ app \ src \ main \ java \ com \ example \ sangeeta \ epochtimer \ MainActivity.java использует или переопределяет устаревший API. –

+0

Поблагодарили бы за вашу помощь..thanx –

0
private class Operation extends AsyncTask<String, String, String> { 

@Override 
protected void onPreExecute() { 
    super.onPreExecute(); 
} 
@Override 
protected String doInBackground(String... params) { 


    while (pressstate) { 
     Calendar rightNow = Calendar.getInstance(); 

     // offset to add since we're not UTC 

     //long offset = rightNow.get(Calendar.ZONE_OFFSET) + 
       //rightNow.get(Calendar.DST_OFFSET); 

     //long sinceMidnight = (rightNow.getTimeInMillis() + offset) % 
       //(24 * 60 * 60 * 1000); 

     epochtime=rightNow.getTimeInMillis(); 
     this.publishProgress(""+epochtime); 
    } 
    return null; 
} 

protected void onPostExecute(String result) { 
    textonee = (TextView) findViewById(R.id.textViewepo); 
    //textonee.setText("" + epochtime); // txt.setText(result); 
    // might want to change "executed" for the returned string passed 
    // into onPostExecute() but that is upto you 
    super.onProgressUpdate(result); 
    textonee.setText(result); 
} 

}

Попробуйте

+0

Использовал ее, нет никакой ошибки, но приложение не будет отображать что-либо на textview .. –

Смежные вопросы