使用线程在条件操作中使用Toast

时间:2013-08-08 06:51:15

标签: android multithreading toast

我已经创建了一个登录应用程序,它来自sql server的登录ID和密码 它适用于正确的登录ID,密码,并为空登录字段提供吐司

但是如果输入错误的字段。它没有显示出所需的吐司。也许我在错误的地方吃吐司。 我的代码是

public void onClick(View v) {

            // TODO Auto-generated method stub
            ResultSet rs=null;
            String id=uid.getText().toString();
            String upass=pass.getText().toString();
            final String uid1=null;
            final ProgressDialog pd=new ProgressDialog(MainActivity.this);
            pd.setTitle("Processing");
            pd.setMessage("Processing is going on..plz be patient...");         
            pd.show();
            if(id.equals("")&&upass.equals("")){

                Toast.makeText(getApplicationContext(), "empty id or password", Toast.LENGTH_SHORT).show();
            }


            new Thread(){
                public void run(){
                    //defining task for progress dialog for busy.
                    try{
                        ResultSet rs=null;
                        String id=uid.getText().toString();
                        String upass=pass.getText().toString();
                        String uid1=null;


                        if(!id.isEmpty()&&!upass.isEmpty())
                            try{
                            initilize();
                            Statement statement=connect.createStatement();
                            rs=statement.executeQuery("LOGIN '"+id+"', '"+upass+"'");
                            List<String>data=new ArrayList<String>();
                            if(rs.next()){

                                uid1=rs.getString("PA_NAME");
                                pd.dismiss();
                                Intent i=new Intent(getApplicationContext(),SecondActivity.class);
                                i.putExtra("a", uid1);
                                startActivity(i);
                            }






                            }catch(Exception e){
                                e.printStackTrace();
                            }

                        else
                            Toast.makeText(MainActivity.this, "invalid id or password", Toast.LENGTH_LONG).show();pd.dismiss();





                    }catch(Exception e){                        
                    }
                    pd.dismiss();
                }}.start();

如果有人建议我在哪个地方放置不正确的登录ID。在条件声明中。这很紧急。

5 个答案:

答案 0 :(得分:1)

您只能在主线程上创建UI对象。这包括祝酒词。最简单的方法是使用Activity#runOnUiThread来展示你的祝酒词。您还应该查看Handler课程。

答案 1 :(得分:0)

Using runOnUiThread method:

new Thread() {
    public void run() {
        activity.runOnUiThread(new Runnable() {
            public void run() {
                Toast.makeText(MainActivity.this, "invalid id or password", Toast.LENGTH_LONG).show();
            }
        });
    }
}.start();

Using Handler:

final Handler mHandler = new Handler();
final Runnable mUpdateResults = new Runnable() {
    public void run() {
        Toast.makeText(MainActivity.this, "invalid id or password", Toast.LENGTH_LONG).show();
    }

new Thread() {
    public void run() {
        mHandler.post(mUpdateResults);
    }
}.start();

答案 2 :(得分:0)

你应该总是在UIthread中显示吐司。修改代码如下所示:

runOnUiThread(new Runnable() {

            @Override
            public void run() {
                Toast.makeText(MainActivity.this, "invalid id or password", Toast.LENGTH_LONG).show();
                pd.dismiss();

            }
        });

答案 3 :(得分:0)

尝试这样做:

MainActivity.runOnUiThread(new Runnable() {
    public void run() {
        Toast.makeText(MainActivity, "Toast on the main Activity", Toast.LENGTH_SHORT).show();
    }
});

答案 4 :(得分:0)

最好的方法是在主活动(UI线程)中编写处理程序。在处理程序中显示吐司。从线程发布消息到该处理程序。