繁体   English   中英

如何在以下代码中成功登录后开始新的活动?

[英]how to start new activity on successful login in the following code?

我在我的应用程序中有以下课程,我正在向远程服务器发送用户名和密码,并在服务器端发送其匹配值并发送响应。 一切正常。 我想问一下登录成功后如何启动新活动。 我希望消息消失时开始新的活动。 QnActivity是我要开始的活动,LoActivity是我当前的活动。 我已经尝试了很多,但没有成功。 我还添加了

startActivity(new Intent(LoActivity.this, QnActivity.class));

public void Move_to_next()方法中,但public void Move_to_next()

Java代码

 public class LoActivity extends Activity {

        Intent i;
        Button signin;
        TextView error;
        CheckBox check;
        String name="",pass="";
        byte[] data;
        HttpPost httppost;
        StringBuffer buffer;
        HttpResponse response;
        HttpClient httpclient;
        InputStream inputStream;
        SharedPreferences app_preferences ;
        List<NameValuePair> nameValuePairs;
        EditText editTextId, editTextP;

        @Override
        public void onCreate (Bundle savedInstanceState)
        {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.login);
            signin = (Button) findViewById (R.id.signin);
            editTextId = (EditText) findViewById (R.id.editTextId);
            editTextP = (EditText) findViewById (R.id.editTextP);
            app_preferences = PreferenceManager.getDefaultSharedPreferences(this);
            check = (CheckBox) findViewById(R.id.check);
            String Str_user = app_preferences.getString("username","0" );
            String Str_pass = app_preferences.getString("password", "0");
            String Str_check = app_preferences.getString("checked", "no");
            if(Str_check.equals("yes"))
            {
                editTextId.setText(Str_user);
                editTextP.setText(Str_pass);
                check.setChecked(true);
            }

            signin.setOnClickListener(new View.OnClickListener()
            {
                public void onClick(View v)
                {
                    name = editTextId.getText().toString();
                    pass = editTextP.getText().toString();
                    String Str_check2 = app_preferences.getString("checked", "no");
                    if(Str_check2.equals("yes"))
                    {
                        SharedPreferences.Editor editor = app_preferences.edit();
                        editor.putString("username", name);
                        editor.putString("password", pass);
                        editor.commit();
                    }
                    if(name.equals("") || pass.equals(""))
                    {
                         Toast.makeText(Lo.this, "Blank Field..Please Enter", Toast.LENGTH_SHORT).show();
                    }
                    else
                    {

                    try {
                        httpclient = new DefaultHttpClient();
                        httppost = new HttpPost("http://abc.com/register.php");
                        // Add your data
                        nameValuePairs = new ArrayList<NameValuePair>(2);
                        nameValuePairs.add(new BasicNameValuePair("UserEmail", name.trim()));
                        nameValuePairs.add(new BasicNameValuePair("Password", pass.trim()));
                        httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
                        // Execute HTTP Post Request
                        response = httpclient.execute(httppost);
                        inputStream = response.getEntity().getContent();

                        data = new byte[256];

                        buffer = new StringBuffer();
                        int len = 0;
                        while (-1 != (len = inputStream.read(data)) )
                        {
                            buffer.append(new String(data, 0, len));
                        }

                        inputStream.close();
                    }

                    catch (Exception e)
                    {
                        Toast.makeText(LoActivity.this, "error"+e.toString(), Toast.LENGTH_SHORT).show();
                    }
                    if(buffer.charAt(0)=='Y')
                    {
                        Toast.makeText(LoActivity.this, "login successfull", Toast.LENGTH_SHORT).show();
                    }
                    else
                    {
                        Toast.makeText(LoActivity.this, "Invalid Username or password", Toast.LENGTH_SHORT).show();
                    }
                    }
                }
            });

        check.setOnClickListener(new View.OnClickListener()
        {
            public void onClick(View v)
            {
                // Perform action on clicks, depending on whether it's now checked
                SharedPreferences.Editor editor = app_preferences.edit();
                if (((CheckBox) v).isChecked())
                {
                     editor.putString("checked", "yes");
                     editor.commit();
                }
                else
                {
                     editor.putString("checked", "no");
                     editor.commit();
                }
        }
        });
        }
         public void Move_to_next()
         {
             startActivity(new Intent(LoActivity.this, QnActivity.class));

         }
    }

您正在ui线程上运行网络实现的操作。 使用线程或异步任务

  response = httpclient.execute(httppost);

如果您在ui线程上运行与网络相关的操作,则会在蜂窝状结构后得到NetworkOnMainThreadException

并确保您在代码中调用Move_to_next()

在ui线程上调用AsyncTask

   new TheTask().execute();

异步任务

   class TheTask extends AsyncTask<Void,Void,Void>
   {
       @Override
       protected void onPreExecute()
       {
               super.onPreExecute();
               // dispaly progress dialog 
       } 
       @Override
       protected void doInbackground(Void... params)
       {
           // do network related operation here
           // do not update ui here
          return null; // return result here
       } 
       @Override
       protected void onPostExecute(Void result) // result of background computation received
       {
           super.onPostExecute(result);
            // dimiss dialog
           // update ui here     
       } 
   }  

它很难说为什么 ,因为你还没有告诉我们如何不工作也不能正常工作。 但是,您应该将网络调用移至另一个Thread 将其放在AsyncTask doInBackground()做网络工作。

然后,在网络工作结束后,如果登录成功,则可以将结果发送到onPostExecute()并从那里调用startActivity()

AsyncTask文件

AsyncTask示例

我的猜测是,您永远不会调用方法Move_to_next()

我建议一旦您从服务器获得良好的响应就调用它,但是,您也应该接受@Ragunandan的建议,并在单独的线程上运行请求。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM