1

ログインページで起動するアプリケーションがあります。ユーザーがwifiを使用している場合は正常に動作しますが、データ接続に切り替えるとWebサービスが応答しません。この後、ユーザーがアプリケーションを手動で強制停止/再インストールすると、データ接続/wifi で再び動作しますが、上記と同じ動作になります。私のコードは次のとおりです。

public class Logg extends Activity {
    EditText log, pw, tfld;
    Button bt;
    String logg, pww, resp ;
    static String employidd;
    ProgressDialog p;
    private static String SOAP_ACTION = "MyName/CheckLogin"; // "http://tempuri.org/CheckLogin";
    private static String NAMESPACE = "MyName"; // "http://tempuri.org/";
    private static String METHOD_NAME = "CheckLogin";
    private static String URL = "http://timetracker.e-pspl.com/erm-login/";     //"http://tdsw025.pcsolutions.com/ERMWeb/";

    /* Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        log = (EditText) findViewById(R.id.logger1);
        pw = (EditText) findViewById(R.id.pwwrs);
        bt = (Button) findViewById(R.id.subb);
        bt.setOnClickListener(new OnClickListener() {

            public void onClick(View v) {
                // TODO Auto-generated method stub
                logg = log.getText().toString();
                pww = pw.getText().toString();
                if (logg.equals("")) {
                    Toast.makeText(Logg.this, "Login ID cannot be blank",
                            Toast.LENGTH_SHORT).show();
                }
                if (pww.equals("")) {
                    Toast.makeText(Logg.this, "Password cannot be blank",
                            Toast.LENGTH_SHORT).show();
                } else {

                    try {
                        new SoapLog().execute();
                    } catch (Exception e) {
                        Log.v("xcptn", e.toString());
                    }

                }
            }
        });
    }

    private class SoapLog extends AsyncTask<Void, Void, Void> {

        @Override
        protected Void doInBackground(Void... params) {
            // TODO Auto-generated method stub
            // Initialize soap request + add parameters
            SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);

            // Use this to add parameters
            request.addProperty("UserName", logg);
            request.addProperty("Pwd", pww);
            // Declare the version of the SOAP request
            SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(
                    SoapEnvelope.VER11);
            envelope.dotNet = true;
            envelope.setOutputSoapObject(request);
            Log.v("req", request + "");
            HttpTransportSE androidHttpTransport = new HttpTransportSE(URL);
            try {
                // this is the actual part that will call the webservice
                androidHttpTransport.call(SOAP_ACTION, envelope);
                Log.v("envelope", envelope + "");
            } catch (Exception e) {
                e.printStackTrace();
            }
            try{
                // Get the SoapResult from the envelope body.
                SoapObject result = (SoapObject) envelope.bodyIn;
                resp = result.toString();
                Log.v("respmain", resp);
            }catch(NullPointerException e){
                e.printStackTrace();
            }


            return null;

        }

        @Override
        protected void onPostExecute(Void result) {
            // TODO Auto-generated method stub
            super.onPostExecute(result);
            p.dismiss();
            if (resp != null) {

                // // if (resp.contains("true")) {
                // Intent one = new Intent(Logg.this, Second.class);
                // startActivity(one);
                // finish();
                // // }
                if (resp.contains("false")) {
                    Toast.makeText(Logg.this, "Invalid UserID/Password",
                            Toast.LENGTH_SHORT).show();
                    // StringTokenizer tokens = new StringTokenizer(resp, "=");
                    // String first = tokens.nextToken();
                    // String second = tokens.nextToken();
                    // Log.v("tag", first);
                    // Log.v("tag1", second);
                } else {
                    String str[] = resp.split("=");
                    String tempStr[] = str[1].split(";");
                    employidd = tempStr[0];
                    Log.v("id", employidd);
                    Toast.makeText(Logg.this, "Success!!", Toast.LENGTH_SHORT)
                            .show();
                    Intent onne = new Intent(Logg.this, DateList.class);
                    onne.putExtra("ID", employidd);
                    startActivity(onne);
                    finish();
                }
            }
        }

        @Override
        protected void onPreExecute() {
            // TODO Auto-generated method stub
            super.onPreExecute();
            p = ProgressDialog.show(Logg.this, "", "Loading...");

        }

    }

}

この動作の原因は何ですか?? どんな助けでも大歓迎です..

4

1 に答える 1

0

通常、接続とデータ受信のタイムアウトを明示的に指定することをお勧めします。これは、デフォルトのタイムアウトに制限がなく、ネットワーク接続で何かが変更されると、アプリケーションが無期限に (または非常に長い時間) 待機するためです。

タイムアウトを設定して、結果が表示されるかどうか教えてください。

于 2012-06-27T06:05:15.337 に答える