1

Windowsサービスを実行し、ユーザーのテーブルを備えた単純なシステムを作成しています。サービスに何かを送信して、誰かのログイン資格情報を検証したいと思います。ユーザー名とパスワードを送信しようとしていますが、非同期タスクでエラーが発生し続けます。私はあなたがそこにあるUIのものを台無しにすることになっていないことを知っています、そして私はそうではありません。もともとそこで別の活動を呼びかけていましたが、コメントアウトしました。現在、doInBackgroundでの唯一のことは、検証が適切であった場合にブール値をtrueに設定することです。そこから、asyncが実行された後に値を読み取り、バンドルをまとめて次の場所に移動します。ここで何が悪いのかわかりません。私がAndroidでプログラミングしてからしばらく経ちましたので、おそらく私は愚かな何かを見逃しています。誰かが私を手伝ってくれるなら、私はそれを大いに感謝します!ありがとうございました。これは、サービスに情報を送信する際の問題になる可能性もありますか?

更新:マニフェストにインターネットの使用状況を追加した後、doInBackgroundのプログラムにlog.dがある場合は、出力されます。私がそれを持っていない場合、結果の値はfalseのままです。私のサービスとAndroidアプリの接続に問題があるようです...

import java.util.ArrayList;

import org.apache.http.NameValuePair;
import org.apache.http.message.BasicNameValuePair;

import android.os.AsyncTask;
import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.view.Menu;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

public class LoginActivity extends Activity {
    private static final int DATA_FROM_MAIN_ACTIVITY = 1;
    private static final String SERVICEURL = "http://localhost:56638/ClientService.svc";
    private EditText userTextBox, passTextBox;
    private Button loginButton;
    private String uName, pass;
    private Boolean result = false;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_login);

        userTextBox = (EditText) findViewById(R.id.userTextBox);
        passTextBox = (EditText) findViewById(R.id.passTextBox);
        loginButton = (Button) findViewById(R.id.loginButton);

        loginButton.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {

                uName = userTextBox.getText().toString();
                pass = passTextBox.getText().toString();

                SendLoginMessage task = new SendLoginMessage();
                task.execute(uName, pass);

                if (result.equals(true)) {
                    Intent goToMainScreen = new Intent(getApplicationContext(),
                            MainActivity.class);
                    goToMainScreen.putExtra("username", uName);
                    goToMainScreen.putExtra("password", pass);

                    startActivityForResult(goToMainScreen,
                            DATA_FROM_MAIN_ACTIVITY);
                } else {
                    Toast.makeText(
                            getApplicationContext(),
                            "There was an issue with your username or password.",
                            Toast.LENGTH_LONG).show();
                }

            }
        });

    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

    private class SendLoginMessage extends AsyncTask<String, String, Void> {
        @Override
        protected void onPreExecute() {
            // Log.d("message almost at server, " + textFromArea, selected,
            // null);
        }

        @Override
        protected Void doInBackground(String... names) {
            ArrayList<NameValuePair> postParams = new ArrayList<NameValuePair>();
            postParams.add(new BasicNameValuePair("username", names[0]));
            postParams.add(new BasicNameValuePair("password", names[1]));

            String response = null;

            try {
                response = HttpClient.executeHttpPost(SERVICEURL, postParams);

                String newResponse = response.toString();
                newResponse = newResponse.replaceAll("\\s+", "");

                // if user was authenticated...
                if (newResponse.equals(true)) {
                    result = true;
                    // creating an intent to take user to next page.
                    // load their DB objects on the
                    // on create in other activity
                    // pass the username/password to next activity
                    // then make a request to the server for their database
                    // objects.
                    // Intent goToMainScreen = new
                    // Intent(getApplicationContext(), MainActivity.class);
                    // goToMainScreen.putExtra("username", names[0]);
                    // goToMainScreen.putExtra("password", names[1]);

                    // startActivityForResult(goToMainScreen,
                    // DATA_FROM_MAIN_ACTIVITY);
                }

            } catch (Exception e) {
                Log.d("ERROR", "exception in background");
            }

            return null;

        }

        @Override
        protected void onPostExecute(Void result) {

            // Toast.makeText(getApplicationContext(),
            // .show();

        }

    }

}
4

1 に答える 1