0

我创建登录页面。此登录页面从服务器数据库验证。如果网络可用意味着单击登录按钮表示它工作正常。如果我禁用网络然后单击登录按钮意味着它显示错误应用程序没有响应..如何使用我的代码避免此错误

      i try this code
          login.setOnClickListener(new View.OnClickListener()
    {

        public void onClick(View v)
        {
            name = username.getText().toString();
            pass = password.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(Main.this, "Please Enter Username and Password", Toast.LENGTH_LONG).show();
            }

            else

            try {
                httpclient = new DefaultHttpClient();
                httppost = new HttpPost("url/login.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 (IOException e) {
                 System.out.println(e);

                 //alertDialog.cancel();

            }
            if(buffer.charAt(0)=='Y')
            {

                Intent intent=new Intent(getApplicationContext(),another.class);
                startActivity(intent);
            }
            else
            {
                 System.out.println("Invalid username and password")
            }         

        }
    });
4

3 回答 3

1

首先,您不应该在主线程中执行网络任务,这看起来就像您在 OnClick 中执行的那样。

为避免连接挂起,您需要设置连接超时。为了方便使用 http 操作,我在 github 中整理了一个 http 库,您可以将此代码用作示例参考,也可以将其用作库

https://github.com/nareshsvs/android-libraries

于 2012-04-13T09:47:58.933 回答
0

同意 Naresh 不要为您的每项任务使用主线程。使用ServiceAsyncTask执行您长时间运行的网络任务。

于 2012-04-13T09:58:41.257 回答
0

在这里添加一个空检查..

response = httpclient.execute(httppost);

    if(response != null){
    inputStream = response.getEntity().getContent();

                    data = new byte[256];

因为当服务器连接失败时execute()返回 null 并且您需要查看并确保它不为 null .. 就像 Naresh 说的那样,不要在 MainThtread 中进行服务器通信.. 请参阅AsyncTasks这将派上用场..

于 2012-04-13T09:45:51.400 回答