我解决不了这个错误。请帮帮我。我有两种方法:
public boolean isEmailValid(String email) {
boolean flag;
CharSequence inputStr = email.trim();
Pattern pattern = Pattern.compile(EXPRESSION,
Pattern.CASE_INSENSITIVE);
Matcher matcher = pattern.matcher(inputStr);
if (matcher.matches())
flag = true;
else {
flag = false;
}
return flag;
}
public boolean isFieldsEmpty(String login, String mdp) {
Boolean result = true;
if (login.equals("") || mdp.equals("")) {
result = true;
} else {
result = false;
}
return result;
}
class LoginUser extends AsyncTask<String, String, String> {
@Override
protected void onPreExecute(){
super.onPreExecute();
progressBar.setVisibility(View.VISIBLE);
prefs = getSharedPreferences("PFE_Prefs",MODE_PRIVATE);
}
@Override
protected void onPostExecute(String s) {
super.onPostExecute(s);
progressBar.setVisibility(View.GONE);
switch (s) {
case "Champs_vides":
Toast.makeText(getApplicationContext(), "Merci de bien vouloir remplir tous les champs, svp", Toast.LENGTH_SHORT).show();
EmailEditText.setText("");
MdpEditText.setText("");
break;
case "Email_incorrect":
Toast.makeText(getApplicationContext(),"Merci de bien vouloir verifier votre adresse email, svp", Toast.LENGTH_SHORT ).show();
EmailEditText.setText("");
MdpEditText.setText("");
break;
case "Success": //Appel a l'activité Tableau de bord
Intent toDashBord = new Intent(getApplicationContext(), DashBoardActivity.class);
startActivity(toDashBord);
LoginActivity.this.finish();
break;
case "Echoué" :
Toast.makeText(getApplicationContext(),"Merci de bien vouloir verifier votre connexion, svp", Toast.LENGTH_SHORT ).show();
EmailEditText.setText("");
MdpEditText.setText("");
break;
}
}在方法上,doInBackground
protected String doInBackground(String... params) {
int success = 0;
String result = "";
JSONObject json ;
WebCalls webCalls = new WebCalls();
JSONObject jsonUser;
User tempUser ;
if (isFieldsEmpty(EmailEditText.getText().toString(),MdpEditText.getText().toString())){
result = "Empty_Field";
return result ;
}else if (!isEmailValid(EmailEditText.getText().toString().trim())){
result = "Wrong_mail";
return result ;
}
return null;
}我的问题是在EmailEditText.getText().toString()中,我得到了以下错误:
Method getText() must called from UI thread, currently inferred thread is worker发布于 2016-03-07 22:44:29
调用getText()函数在onCreate中或在AsyncTask之前的某个地方,并将返回值分配给公共值。这样你就能找到他们了。
public String MyeMail;
public String MyMDP;
onCreate()...
{
MyeMail= EmailEditText.getText().toString();
MyMDP = MdpEditText.getText().toString()
.
.
.
}它不一定在onCreate中,但必须是在用户输入EditText字段之后。您可以在单击按钮之后进行这些操作。不管怎样,现在在AsyncTask的doInBackground中
doInBackground...
{
if (isFieldsEmpty(MyeMail,)) {
result = "Empty_Field";
return result ;
.
.
.
}所以希望它能帮上忙!如果有用的话请告诉我。
发布于 2016-03-07 22:22:45
必须在主应用程序线程上调用getText()。在后台线程上正在调用doInBackground()。
从EditText中获取值,并在执行任务之前将它们提供给AsyncTask (例如,通过构造函数)。
发布于 2016-03-07 22:47:32
AsyncTask的doInBackground()总是在一个非UI工作线程中运行,这意味着您不能访问诸如EditText、doInBackground()中的TextView这样的UI元素。因此,如果您想在doInBackground()中访问这些,那么您可以传递AsyncTask构造函数中的这些值并使用它们,或者最好的方法是在execute()方法AsyncTask中将EmailEditText.getText().toString()和MdpEditText.getText().toString()作为params传递。因此,假设您的AsyncTask名称是"ProcessTask",那么在启动AsyncTask时,请写以下内容:
new ProcessTask().execute(EmailEditText.getText().toString(), MdpEditText.getText().toString());在这种情况下,您的AsyncTask应该更改为:
class ProcessTask extends AsyncTask<String,Void,Void >{
@Override
protected File doInBackground(String... params) {
String emailEditText = params[0];
String mdpEditText = params[1];
int success = 0;
String result = "";
JSONObject json ;
WebCalls webCalls = new WebCalls();
JSONObject jsonUser;
User tempUser ;
if (isFieldsEmpty(emailEditText,mdpEditText)){
result = "Empty_Field";
return result ;
}else if (!isEmailValid(emailEditText.trim())){
result = "Wrong_mail";
return result ;
}
return null;
}https://stackoverflow.com/questions/35855277
复制相似问题