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

ここにnullチェックを追加します。

response = httpclient.execute(httppost);

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

                    data = new byte[256];

サーバー接続に障害が発生するとnullがexecute()返されるため、nullでないことを確認して確認する必要があります。Nareshが言ったように、MainThtreadでサーバー通信を行わないでください。便利なAsyncTasksを参照してください。

于 2012-04-13T09:45:51.400 に答える
0

Naresh は、すべてのタスクにメイン スレッドを使用しないことに同意しました。Serviceまたはを使用AsyncTaskして、実行時間の長いネットワーク タスクを実行します。

于 2012-04-13T09:58:41.257 に答える