0

JAVA は初めてですが、Objective-C は知っています。サーバー側のカスタム コードを作成する必要があり、以下のコードに問題があります。

/**
 * This example will show a user how to write a custom code method
 * with two parameters that updates the specified object in their schema
 * when given a unique ID and a `year` field on which to update.
 */

public class UpdateObject implements CustomCodeMethod {

  @Override
  public String getMethodName() {
    return "CRUD_Update";
  }

  @Override
  public List<String> getParams() {
    return Arrays.asList("car_ID","year");
  }

  @Override
  public ResponseToProcess execute(ProcessedAPIRequest request, SDKServiceProvider serviceProvider) {
    String carID = "";
    String year  = "";

    LoggerService logger = serviceProvider.getLoggerService(UpdateObject.class);
    logger.debug(request.getBody());
    Map<String, String> errMap = new HashMap<String, String>();

    /* The following try/catch block shows how to properly fetch parameters for PUT/POST operations
     * from the JSON request body
     */

    JSONParser parser = new JSONParser();
    try {
      Object obj = parser.parse(request.getBody());
      JSONObject jsonObject = (JSONObject) obj;

      // Fetch the values passed in by the user from the body of JSON
      carID = (String) jsonObject.get("car_ID");
      year = (String) jsonObject.get("year");
      //Q1:  This is assigning the values to  fields in the fetched Object?

    } catch (ParseException pe) {
      logger.error(pe.getMessage(), pe);
      return Util.badRequestResponse(errMap, pe.getMessage());
    }

    if (Util.hasNulls(year, carID)){
      return Util.badRequestResponse(errMap);
    }

    //Q2:  Is this creating a new HashMap?  If so, why is there a need?
    Map<String, SMValue> feedback = new HashMap<String, SMValue>();
    //Q3:  This is taking the key "updated year" and assigning a value (year)?  Why?
    feedback.put("updated year", new SMInt(Long.parseLong(year)));

    DataService ds = serviceProvider.getDataService();
    List<SMUpdate> update = new ArrayList<SMUpdate>();

    /* Create the changes in the form of an Update that you'd like to apply to the object
     * In this case I want to make changes to year by overriding existing values with user input
     */
    update.add(new SMSet("year", new SMInt(Long.parseLong(year))));

    SMObject result;
    try {
      // Remember that the primary key in this car schema is `car_id`

      //Q4: If the Object is updated earlier with update.add... What is the code below doing?
      result = ds.updateObject("car", new SMString(carID), update);

      //Q5: What's the need for the code below?
      feedback.put("updated object", result);

    } catch (InvalidSchemaException ise) {
      return Util.internalErrorResponse("invalid_schema", ise, errMap);  // http 500 - internal server error
    } catch (DatastoreException dse) {
      return Util.internalErrorResponse("datastore_exception", dse, errMap);  // http 500 - internal server error
    }

    return new ResponseToProcess(HttpURLConnection.HTTP_OK, feedback);
  }

}

Q1: 以下のコードは、取得したオブジェクトのフィールドに値を割り当てていますか?

carID = (String) jsonObject.get("car_ID");
year = (String) jsonObject.get("year");

Q2: これは新しい HashMap の作成ですか? もしそうなら、なぜ必要なのですか?

Map<String, SMValue> feedback = new HashMap<String, SMValue>();

Q3: これはキー「更新された年」を取得し、値 (年) を割り当てていますか? なんで?

feedback.put("updated year", new SMInt(Long.parseLong(year)));

Q4: オブジェクトが update.add で以前に更新された場合... 以下のコードは何をしているのですか?

result = ds.updateObject("car", new SMString(carID), update);

Q5: 以下のコードは何をしていますか?

feedback.put("updated object", result);

オリジナルコード

SMSet

SMint

4

2 に答える 2

3

Q1: 取得した JSON オブジェクトから読み取り、フィールド car_ID と year の値を同じ名前の 2 つのローカル変数に格納します。

Q2: はい。フィードバックは、JSON としてクライアントに返されるマップのようです

Q3: (前述のように) ローカル変数「年」に読み込まれた値を、新しく作成されたハッシュマップ「フィードバック」に格納します。

Q4: よくわかりませんが、ds オブジェクトはある種のデータベースだと思います。その場合、ハッシュマップ「update」に格納されている更新された値を取得し、それをデータベースにプッシュしているように見えます。

Q5: フィードバック ハッシュマップのキー「updated object」の下に「result」オブジェクトを格納します。

お役に立てれば :)

于 2013-09-17T20:13:45.270 に答える
1

Q1 いいえ、クラス メンバ変数ではなく、execute() メソッドのローカル変数を設定しているようです。メソッドが戻るとすぐに、これらのローカル変数は GC によってクリーンアップされます。そうではありませんが、現在は GC の対象となっていますが、これは非常に技術的な問題になってきています。

Q2 はい、 を作成し、HashMapその参照を に入れていMapます。 Mapはインターフェイスであり、Java ではこのようなものを参照することをお勧めします。このようにして、コードを特定の実装に結び付けることはありません。プロトタイプとして知られているObjective-Cを信じています???

Q3なぜこの ようなことをしているのかわかりません。コードのどこかでfeedback Mapが使用されており、その値が取り出されていると想定しています。マップはNSDictionary. 「年」は のように見えるので、変換にString使用します。Long.parseLong()SMInt とは何かわかりません...名前から、「小さな int」を表すカスタム クラスのように見えますか???

Q4 なんのことだかわかりませんDataServiceが、データの読み取り/書き込みサービスの一種だと推測する必要がありますか??? メソッドから、サービスを呼び出して、変更したばかりの値を更新していると推測しています。

Q5 繰り返しますfeedbackが、そのマップの「更新されたオブジェクト」キーをMap入れています。result

于 2013-09-17T20:16:39.697 に答える