19

私の主な活動には、次のコードがあります。

EditText usernameText;
EditText passwordText;
public void sendLogin (View loginview){
    Intent i = new Intent(this, NetworkService.class);
    startService(i);
}

現在、これはインテントを NetworkService に送信するだけであり、次のように処理されます (切り詰められています)。

public class NetworkService extends IntentService {

    public NetworkService() {
        super("NetworkService");
    }

    protected void onHandleIntent(Intent i) {

        /* HTTP CONNECTION STUFF */

        String login = URLEncoder.encode("Username", "UTF-8") + "=" + URLEncoder.encode("XXX", "UTF-8");
        login += "&" + URLEncoder.encode("Password", "UTF-8") + "=" + URLEncoder.encode("XXX", "UTF-8"); 
    }
}

さて、私が理解する必要があるのは、それらusernameTextpasswordText値を からNetworkService'XXX' に渡す方法ですが、 内でもNetworkService、さまざまな場所からの複数のインテントを処理するつもりです (しゃれは意図していません)。たとえば、ログオントークンを使用してユーザーに関する情報を取得することによるログイン。それは私のすべてのネットワーキングが含まれる場所です。ネットワークを分離しておくために、これが Android アプリケーション内でのベスト プラクティスであると指示されました。

私の質問は次のとおりです。これらの 2 つの変数を に送信する最良の方法は何ですか?NetworkServiceまた、 の中でonHandleIntentNetworkServiceコードを分離して、要求していること (ログイン、ユーザー情報の取得、位置データの取得) のみを実行するにはどうすればよいですか?等)?

答えが簡単な場合は申し訳ありませんが、私はアプリケーション プログラミングに非常に慣れていません。

ありがとう

4

2 に答える 2

36
public void sendLogin (View loginview){
    Intent i = new Intent(this, NetworkService.class);
    i.putExtra("username", usernameText.getText().toString());
    i.putExtra("password", passwordText.getText().toString());
    startService(i);
}

次に、IntentServiceで:

@Override
    protected void onHandleIntent(Intent intent) {
    String username = intent.getStringExtra("username");
    String password = intent.getStringExtra("password");
    ...
}

IntentServicesは、送信されたいくつかの要求を処理するように設計されています。つまり、を使用してインテントを送信し続けるstartService(intent)と、NetworkServiceはそのonHandleIntentメソッドを呼び出し続けます。内部には、終了するまで機能するインテントのキューがあります。したがって、現在の方法でインテントを送信し続けるが、putExtraメソッドを介して特定のフラグを設定すると、NetworkServiceが実行する必要があることを検出し、適切に動作することができます。たとえば、と呼ばれるインテントにブール値を追加します。インテントloginサービスで、を介して設定されているフラグを探しますintent.getBooleanExtra("login")。trueの場合はログイン作業を行い、そうでない場合は設定した他のフラグを探します。

于 2012-08-09T10:44:15.410 に答える
7

1.送信 usernameTextおよびこれpasswordTextを行うためにNetworkService...

Intent i = new Intent(Your_Class_Name.this, NetworkService.class);
   i.putExtra("username", usernameText.getText().toString());
   i.putExtra("password", passwordText.getText().toString());
   startService(i);

2.でデータを受信するNetworkServiceは、これを実行します。

Intent intent = getIntent();
   String userName = intent.getExtras().getString("username");
   String password = intent.getExtras().getString("password");
于 2012-08-09T10:39:20.043 に答える