2016-04-15 2 views
0

Я новичок в android.I потратил слишком много времени на решение этой проблемы без успеха.Невозможно получить доступ к переменным из Async Task

У меня есть сервис Serv.java.

public class Serv extends Service { 
private String a = "aa"; 
private String b = "bb"; 
private String c = "100"; 

//called by some class. 
public void setcc(String s) { 
c=s;//c="cc" 
} 

//Using alarm manager to start the service. 
//I call function callMe from OnStart. 

void callMe(Context context){ 
//which calls an async task 
new VAsyncTask().execute(""); 
} 

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

    protected void onPreExecute() { 

    } 

    protected Void doInBackground(String... urls) { 
    //I am able to access a and b.(aa and bb) 
    //but not c.(It still shows 100 and not cc) 
    } 
    ........ 
    } 

Но когда я снова запустить ту же услугу он показывает правильное значение с (см) .Есть проблема, когда я доступ в первый раз.

EDIT- поток работает отлично, если я делаю частную строку c частным статическим строком c. И я поместил журналы в свои onCreate и onStartCommand. Они не печатают последнее значение переменной c.so нет необходимости использовать последнюю (переменную) переменную c для создания или создания конструктора в aysnctask (потому что я все еще получаю старое значение переменной с).

Пожалуйста, помогите. Спасибо.

+0

Почему вы не можете установить параметры, которые когда-либо хотите, используя метод 'Preexecute' в' Asynctask'? – jgm

+1

Не зная процесса немного больше и понимая, как вы используете все, что я могу предположить, это состояние гонки или что-то в этом роде. – zgc7009

+0

Привет, пожалуйста, посмотрите на это [link] (https://stackoverflow.com/questions/36689841/cannot-access-values-first-time) –

ответ

0

его трудно сказать, не зная, откуда и что и как ваш поток?

вы можете переопределить конструктор и передать значения как параметр задачи async.

*

private class VerifyCPIAsyncTask extends AsyncTask<String, Void, Void> 
{ 
    int cc 
    VerifyCPIAsyncTask (int a) { 
     cc= a; 
    } 
    protected void onPreExecute() { 
    } 
}* 

и позвонить асинхронной задачу как новый VAsyncTask (куб.см) .Execute ("");

это более безопасный подход.

+0

Привет, пожалуйста, посмотрите на это [link] (https://stackoverflow.com/questions/36689841/cannot-access-values-first-time) –