首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >方法getText()必须从UI线程调用

方法getText()必须从UI线程调用
EN

Stack Overflow用户
提问于 2016-03-07 22:20:57
回答 4查看 307关注 0票数 0

我解决不了这个错误。请帮帮我。我有两种方法:

代码语言:javascript
运行
复制
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

代码语言:javascript
运行
复制
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()中,我得到了以下错误:

代码语言:javascript
运行
复制
Method getText() must called from UI thread, currently inferred thread is worker
EN

Stack Overflow用户

发布于 2016-03-07 23:12:46

错误存在于方法doInBackground()中

您正在调用两个对象EmailEditText和MdpEditText,它们是另一个线程中UI线程的一部分。因此,您被要求从UI线程调用"EmailEditText.getText().toString()“。

你想要做的是,从你发布的片段中看不清楚。

但是这个例子可能有帮助:在您的OnCreate()中有这样的东西

代码语言:javascript
运行
复制
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:

代码语言:javascript
运行
复制
new YourTask().execute(parameters);

虽然AsyncTask的声明如下所示:

代码语言:javascript
运行
复制
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;
    }
    ...
}

希望这能帮上忙!

票数 0
EN
查看全部 4 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35855277

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档