0

ここにある質問へのチェックマーク付きの応答にある指示に従っていました: How to return 2 values from a Java method? 単一の関数から 2 つの値を取得するため。以下は、別のクラスに渡す必要がある 2 つの変数を設定するメイン クラスの一部です。必要な変数は、searchURL と searchURLTwo です。意図的にそれらを送信できるかもしれませんが、別のアクティビティで使用されるデータを送信するために使用しただけで、新しいアクティビティを開始しない別のクラスに送信するために誰がそれを使用するかわかりません。

    @Override
    public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.totlayout);

    //set the UI elements
    searchOne = (EditText) findViewById(R.id.searchOne);
    searchTwo = (EditText) findViewById(R.id.searchTwo);

    findMovies = (Button) findViewById(R.id.findMovies);

    searchOne.setOnKeyListener(new View.OnKeyListener() {

        @Override
        public boolean onKey(View v, int keyCode, KeyEvent event) {
            // TODO Auto-generated method stub
            //make person search url1
            final StringBuilder personSearchURLOne = 
                     new StringBuilder(getName.getName1(searchOne)); 
            searchURLOne = personSearchURLOne.toString();

            return false;
        }
    });

    searchTwo.setOnKeyListener(new View.OnKeyListener() {

        @Override
        public boolean onKey(View v, int keyCode, KeyEvent event) {
            // TODO Auto-generated method stub
            //make person search url2
            final StringBuilder personSearchURLTwo = 
                   new StringBuilder(getName.getName2(searchTwo));
            searchURLTwo = personSearchURLTwo.toString();

            return false;
        }
    }); 
}

以下のコードの jSon = new JSONParser で searchURLOne を使用したいと思います。

public class getIDs extends AsyncTask<String, Void, Void> {

public static String TAG_ID = "id";
public static String TAG_RESULTS = "results";



JSONArray results;
JSONObject jSon;
JSONObject jSon2;
public String firstID;
public String secondID;

@Override
protected Void doInBackground(String... personSearchURLOne) {
    // TODO Auto-generated method stub
    Log.d("params 0 in getIDs", personSearchURLOne[0]);
    try{
        jSon = new JSONParser().execute(personSearchURLOne[0]).get();

        results = jSon.getJSONArray(TAG_RESULTS);

        for(int i=0; i<results.length(); i++){
            JSONObject r = results.getJSONObject(i);
            firstID = r.getString(TAG_ID);
            Log.d("firstID", firstID);

        jSon2 = new JSONParser().execute(personSearchURLOne[1]).get();

        results = jSon2.getJSONArray(TAG_RESULTS);

        for(int j=0; j<results.length(); j++){
            JSONObject r2 = results.getJSONObject(j);
            secondID = r2.getString(TAG_ID);

            }
        }


    }catch(InterruptedException e1){
        e1.printStackTrace();
    }catch(ExecutionException e1){
        e1.printStackTrace();
    }catch(JSONException e){
        Log.e("Error", e.toString());
    }
    return null;

}
  ublic String getFirstID(){
  return firstID;
  }
  public String getSecondID(){
  return secondID;
  }


}

getIDs コードを更新してコード全体を表示すると、doInBackground は値を返さず、代わりに 2 つの getter メソッドが存在します。適切な URL は personSearchURL[0] と [1] に渡されます。メイン関数から getData を呼び出します。これには、API から検索結果を取得するためのすべての実行ロジックが含まれています。これは、getIDs を呼び出す getData にあります。以下は、関連する getData コードです。

 public class getData extends AsyncTask<String, Void, ArrayList<String> > {

String idOne;
String idTwo;
ArrayList<String> titleOne;
ArrayList<String> titleTwo;
ArrayList<String> myCommonFilms;

public static getIDs getMyIds(){

    return new getIDs();
}

/*public static Titles getMyTitles(String title){
    return new Titles();
}*/

protected ArrayList<String> doInBackground(String... params) {
    Log.d("params in doinbackground contains", params[0]);
    Log.d("params in doinbackground contains", params[1]);

    new getIDs().execute(params[0], params[1]);

    //get ID 1 
    /*getIDs idholder = new getIDs().execute(params[0], params[1]);*/
    getIDs id1 = getMyIds();
    idOne = id1.getFirstID();

getIDs からの firstID の戻り値を getData クラスに取得する方法を知る必要があります。

4

2 に答える 2

0

getData クラスhttp://developer.android.com/reference/android/os/AsyncTask.html#onPostExecute%28Result%29で次を試してください。

これにより、AsncTask の実行結果が得られます

于 2012-09-18T19:16:45.277 に答える
0

クラス getIDs のインスタンスをどこにも作成していません。2 つの EditText を持つ同じアクティビティのイベント ハンドラー関数で作成されると想定しています。このクラスには既に searchURLOne と searchURLTwo があります。

new getIDs().execute(searchURLOne,searchURLTwo); を呼び出す必要があります。

また、次のように変数にアクセスできます

protected Void doInBackground(String... personSearchURLOne) {
    // TODO Auto-generated method stub
    try{
            String searchURLOne = personSearchURLOne[0];
            String searchURLTwo = personSearchURLOne[1];
            /*this needs to be reference to searchURLOne*/
        jSon = new JSONParser().execute().get();

       }       
}
于 2012-09-18T05:19:58.507 に答える