1

この関数でファイルに書き込みたいのですが、常に例外NESTING PROBLEMを返します。私のエラーはどこですか?例外は、次の行コードに表示されます。

writer.name("コード").value(s);

私を助けてください

これは呼び出しです:


userA.Write(file_name, getActivity().getBaseContext(),Prodotto);

public static void Write(String fileName,Context context,String s) {

         JsonWriter writer;
         File myDir, file_1;
         String file;

         try {
            myDir = context.getFilesDir();
            file = myDir.getAbsolutePath().toString();
            file_1 = context.getFileStreamPath(fileName);
            if(!file_1.exists()) { 
                //not exist file, create it             
                file_1 = new File(myDir, fileName);
            }
            //writer = new JsonWriter(new FileWriter(file+ "/"+ fileName));
            writer = new JsonWriter(new FileWriter(file+ "/"+ fileName));

            writer.beginObject(); // {
            writer.name("items"); // "items"

            writer.beginArray(); // [
            //ciclo for per tutti gli oggetti presenti
            writer.name("code").value(s); // "code" : 29
            writer.name("type").value(s); // "type"
            writer.name("name").value(s); // "name"
            writer.name("size").value(s); // "size"

            writer.endArray(); // ]      
            writer.endObject(); // }
            writer.close();

            System.out.println("Write - Done");

         } catch (IOException e) {
        e.printStackTrace();
         }

       }

私のJSON構造は次のとおりです。

{ "items" : 
 [
   {
     "code" : "1234",
     "type" : "Pagnerine Cialda",
     "name" : "Pagnerine Cialda Sottozero/Estate",
      "size" : "ct"
   },
    {
      "code" : "1234",
     "type" : "Pagnerine Cartone",
     "name" : "Pagnerine Cartone 16B",
      "size" : "ct"
   },
    {
      "code" : "1234",
     "type" : "Zucchero",
     "name" : "Saccarosio",
      "size" : "kg"
   },
 ]
}
4

2 に答える 2

3

あなたのコードから疑わしい部分があります:

      writer.beginArray(); // [
        //ciclo for per tutti gli oggetti presenti
        writer.name("code").value(s); // "code" : 29
        writer.name("type").value(s); // "type"
        writer.name("name").value(s); // "name"
        writer.name("size").value(s); // "size"

        writer.endArray(); // ]       

次のようなオブジェクトの配列を開始するのは興味深いと思います: [{...}, {...}]

各オブジェクトは以下を表します。

{"code": xxxxx, "type": xxx, "name": xxx, "size": xxxx}

代わりに を得["code": xxxxx, "type": xxx, "name": xxx, "size": xxxx]ました。

Key-Value配列に入れることはできません。

だから多分そのようなもの:

      writer.beginArray(); // [
       writer.beginObject(); // { // open new object           
        writer.name("code").value(s); // "code" : 29
        writer.name("type").value(s); // "type"
        writer.name("name").value(s); // "name"
        writer.name("size").value(s); // "size"
        writer.endObject(); // }
        writer.endArray(); // ]     

補足として

Java では、メソッドは後で小文字から始まります。

于 2013-10-25T14:38:32.207 に答える
1

このコードを試すことができます。これは、JSON コンテンツを作成するために必要なものです。

    writer.beginObject().name("itemes").beginArray();

    writer.beginObject().name("code").value(1234);
    writer.name("type").value("Pagnerine Cialda").endObject();

    writer.beginObject().name("code").value(1234);
    writer.name("type").value("Pagnerine Cartone").endObject();

    writer.endArray().endObject().flush();

    writer.close();
于 2020-01-09T14:01:25.290 に答える