1

デフォルトでは、asyncTask の api から、その署名は doInBackground(Param ...params) です。

私のアプリでは、次の署名があります。

public String doInBackground(String ...params) 

私は試して、これに変更しました:

public String doInBackground(String param, int x) 

しかし、それは私にエラーを与えます:

クラス DataTasker は抽象宣言するか、抽象メソッド 'doInBackground(Params...params) を実装する必要があります

私はこの3つのドットが配列であることを知っており、次のようにアクセスできます

params[0]、params[1]。

しかし、まだ混乱しています。メインのアクティビティ クラスで、バックグラウンド タスクにこのデータを渡したいと思います: 文字列 、整数

DataTasker data = new DataTasker() ;
data.execute("mister x " , 56) ;

しかし、どうやら、引数を1つだけ渡す必要があります

4

4 に答える 4

4

できることの 1 つは、doInBackground の目的のパラメーターがオブジェクトである AsyncTask の拡張機能を作成することです。このようなもの:

 private class DataTasker extends AsyncTask<Object, Void, String>

doInBackgroundこのようにして、メソッド内でパラメーターのキャストを行うことができます。

于 2015-04-04T18:05:07.203 に答える
3

しかし、どうやら、引数を1つだけ渡す必要があります

いいえ、何人でも渡せます。それらはすべて同じ基本型でなければなりません。

いくつかのオプション:

  1. タイプを として宣言しObjectます。これには多くのキャストが必要になります。

  2. タイプを として宣言し、 の表現をString渡し、後で元に戻します。Stringint

  3. DataTaskerコンストラクターを介していずれかのパラメーターを渡します。

  4. のセッターを介していずれかのパラメーターを渡しますDataTasker

于 2015-04-04T18:04:21.090 に答える
2

あなたが試すことができます 、

整数を文字列に変換し、「ミスター x」で渡します

DataTasker data = new DataTasker() ;
data.execute("mister x " , String.valueOf(56)) ;

両方の値に params としてアクセスし、2 番目のパラメーターを再び整数に変換できます。

@Override
protected JSONObject doInBackground(String... params) {

    String user=params[0];
    int value = Integer.parseInt(params[1]);
}
于 2015-04-04T18:03:03.620 に答える
1

String の代わりに Object を使用できると思いますpublic String doInBackground(Object ...params)。また、 params[0] 、 params[1] を必要な型にキャストする必要があります。

于 2015-04-04T18:03:43.097 に答える