0

AsyncTask を使用して、別のクラスのコードを呼び出しています。

public class addNewLocation extends AsyncTask<HomerLocation, Integer, Void> {

    @Override
    protected Void doInBackground(HomerLocation... location) {
        bridge.addNewLocation(location);
        return null;
    }

    protected void onPostExecute(String result) {
        System.out.println("Result after execution is : " + result);
    }
}

ボタンコードでこのコマンドを介してこれを呼び出しています:

new addNewLocation().execute(newLocation,null,null);

newLocation は、ダイアログでユーザーの入力を介して設定したいくつかの属性を持つオブジェクトです。

「bridge.addNewLocation(location);」という行は、パラメーターとして location と呼ばれる HomerLocation オブジェクトを渡して、ブリッジ クラスの addNewLocation メソッドを呼び出そうとしています。ただし、エラーが発生します。

The method addNewLocation(HomerLocation) in the type HomerJSONBridge is not 
applicable for the arguments (HomerLocation[])

ブリッジ クラスのメソッドは次のとおりです。

public void addNewLocation(HomerLocation location) {
    // code to add new location to homer
    //HomerLocation location = locationArray;
    client = new DefaultHttpClient();
    StringBuilder url = new StringBuilder(HomerURL);
    url.append("%7B%22operation%22%3A%22setLocation%22%2C%20%22name%22%3A%22"+location.getName()+
            "%22%2C%20%22locationContextID%22%3A%22"+location.getContextID()+"%22%2C%20%22image%22%3A%22"+location.getIcon()+
            "%22%2C%22design%22%3A%22"+location.getDesign()+"%22%7D");
}

これにより、アクセスしているサーブレットに JSON コマンドが渡されます。次のようにすべての場所でコードを書き直すと:

protected Void doInBackground(HomerLocation... location) {
        HomerLocation location1 = location[0];
        bridge.addNewLocation(location1);
        return null;
    }

 public void addNewLocation(HomerLocation[] locationArray) {
    // code to add new location to homer
    HomerLocation location = locationArray[0];
    client = new DefaultHttpClient();
    StringBuilder url = new StringBuilder(HomerURL);
    url.append("%7B%22operation%22%3A%22setLocation%22%2C%20%22name%22%3A%22"+location.getName()+
            "%22%2C%20%22locationContextID%22%3A%22"+location.getContextID()+"%22%2C%20%22image%22%3A%22"+location.getIcon()+
            "%22%2C%22design%22%3A%22"+location.getDesign()+"%22%7D");
}

私はまだ同様のエラーが発生します(!):

The method addNewLocation(HomerLocation[]) in the type HomerJSONBridge is 
not applicable for the arguments (HomerLocation)

HomerLocation オブジェクトと HomerLocation[] の両方のように見えるので、私は本当に混乱しています! どんな助けでも大歓迎です。

4

2 に答える 2

1

あなたの HomerLocation... の場所は HomerLocation オブジェクトの配列であるため、このようにしてください。

protected Void doInBackground(HomerLocation... location) {

    bridge.addNewLocation(location[0]);
    return null;
}

public void addNewLocation(HomerLocation locationArray) {

   HomerLocation location = locationArray;
   client = new DefaultHttpClient();
   StringBuilder url = new StringBuilder(HomerURL);
   url.append("%7B%22operation%22%3A%22setLocation%22%2C%20%22name%22%3A%22"+location.getName()+
        "%22%2C%20%22locationContextID%22%3A%22"+location.getContextID()+"%22%2C%20%22image%22%3A%22"+location.getIcon()+
        "%22%2C%22design%22%3A%22"+location.getDesign()+"%22%7D");
}

これが役立つと思います。

于 2013-02-20T13:33:58.500 に答える
1
protected Void doInBackground(HomerLocation... location)

メソッド パラメータの...構文は、単一のオブジェクトではなく、 ( )locationの配列であることを意味します。HomerLocationHomerLocation[]HomerLocation

常に1要素幅になることが確実な場合、最も簡単な修正は次のとおりです。

@Override
protected Void doInBackground(HomerLocation... location) {
    bridge.addNewLocation(location[0]);
    return null;
}
于 2013-02-20T13:27:07.887 に答える