我无法解决此错误。请帮我。我有这两种方法:
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
答案 0 :(得分:1)
getText()
。正在后台线程上调用doInBackground()
。
从EditText
中获取值,并在执行任务之前将其提供给AsyncTask
(例如,通过构造函数)。
答案 1 :(得分:1)
在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 ;
.
.
.
}
所以希望它有所帮助!如果有效,请告诉我。
答案 2 :(得分:0)
AsyncTask的doInBackground()
始终在非UI工作线程中运行,这意味着您无法访问EditText
中的TextView
,doInBackground()
等UI元素。那么,如果你想在doInBackground()
中访问它们,那么你可以在AsyncTask的构造函数中传递它们并使用它们,或者最好的方法是传递EmailEditText.getText().toString()
和{{1} } MdpEditText.getText().toString()
execute()
方法中的params。
因此,如果您的AsyncTask
名称是&#34; AsyncTask
&#34;,那么当您启动ProcessTask
时,请写下:
AsyncTask
在这种情况下,您的AsyncTask应该更改为:
new ProcessTask().execute(EmailEditText.getText().toString(), MdpEditText.getText().toString());
答案 3 :(得分:0)
您的错误在于方法doInBackground()
您正在调用2个对象EmailEditText和MdpEditText,它们是另一个线程内的UI线程的一部分。 因此,您被要求从UI线程调用“EmailEditText.getText()。toString()”。
您要尝试做的事情并不完全清楚您发布的片段。
但是这个例子可能会有所帮助: 在您的OnCreate()中有这样的东西
protected void onCreate(Bundle savedInstanceState) {
...
String parameters= new String[2];//make this global if you aren't calling your AsyncTask in onCreate()
parameters[1]=EmailEditText.getText().toString();
parameters[2]=MdpEditText.getText().toString();
...
}
并像这样调用你的AsyncTask:
new YourTask().execute(parameters);
虽然你的AsyncTask的声明是这样的:
private class YourTask extends AsyncTask<String, Void, String> {
...
@Override
protected String doInBackground(String... params) {
String email = params[0];
String mdp= params[1];
int success = 0;
String result = "";
JSONObject json ;
WebCalls webCalls = new WebCalls();
JSONObject jsonUser;
User tempUser ;
if (isFieldsEmpty(email,mdp)){
result = "Empty_Field";
return result ;
}else if (!isEmailValid(email.trim())){
result = "Wrong_mail";
return result ;
}
return null;
}
...
}
希望这有帮助!!