0

Ich habe ein Problem beim Senden einer Cloud Code-Anfrage mit Parametern als HashMap. Die lustige Sache ist, dass, wenn ich eine Anfrage mit leeren Parametern sende, es völlig in Ordnung ist. Hier ist mein Code für die Anforderung (aktualisiert mit ishmaelMakitla Antwort):IllegalArgumentException beim Senden von Parse Cloud Code mit Argumenten

Map<String, Object> par = new HashMap<String, Object>(); 
par.put("ingredients", new String[]{"hey"}); 
ParseCloud.callFunctionInBackground("", par, new FunctionCallback() { 
    @Override 
    public void done(Object o, Throwable throwable) { 
    Log.v("28", "" + o); 
    Log.v("27", "" + throwable.getMessage()); 
    for (Object obj : (ArrayList)o) { 
     Log.v("29",""+((ParseObject) obj).get("title")); 
    } 
    } 

    @Override 
    public void done(Object object, ParseException e) { 
    Log.v("26", "" + object); 
    if (e != null) { 
     Log.v("27", "" + e); 
    } 
    for (Object obj : (ArrayList)object) { 
     Log.v("25",""+((ParseObject) obj).get("title")); 
    } 
    } 
}); 

Und meine Wolke-Code Methode:

Parse.Cloud.define ('getFoo', function (req, res) { 
    var arrayIngredients = []; 
    arrayIngredients = req.params.ingredients; 
    var recepyQuery = new Parse.Query("Foos"); 
    recepyQuery.find({ 
    success: function(result) { 
     res.success(result);  
    }, 
    error: function() { 
     res.error("Nothing here");  
    }  
    }); 
}); 

Dieser Code funktioniert perfekt, aber wenn ich Kommentar- der par.put (. ..) Teil, es gibt diesen Fehler:

com.parse.ParseException: java.lang.IllegalArgumentException: invalid type for ParseObject: class [Ljava.lang.String; 

Das ist mein Fehler-Stack:

05-30 11:31:26.265 12612-12612/com.parse.starter W/System.err: com.parse.ParseException: java.lang.IllegalArgumentException: invalid type for ParseObject: class [Ljava.lang.String; 
05-30 11:31:26.265 12612-12612/com.parse.starter W/System.err:  at com.parse.ParseTaskUtils$2$1.run(ParseTaskUtils.java:114) 
05-30 11:31:26.265 12612-12612/com.parse.starter W/System.err:  at android.os.Handler.handleCallback(Handler.java:733) 
05-30 11:31:26.265 12612-12612/com.parse.starter W/System.err:  at android.os.Handler.dispatchMessage(Handler.java:95) 
05-30 11:31:26.265 12612-12612/com.parse.starter W/System.err:  at android.os.Looper.loop(Looper.java:146) 
05-30 11:31:26.265 12612-12612/com.parse.starter W/System.err:  at android.app.ActivityThread.main(ActivityThread.java:5653) 
05-30 11:31:26.265 12612-12612/com.parse.starter W/System.err:  at java.lang.reflect.Method.invokeNative(Native Method) 
05-30 11:31:26.265 12612-12612/com.parse.starter W/System.err:  at java.lang.reflect.Method.invoke(Method.java:515) 
05-30 11:31:26.265 12612-12612/com.parse.starter W/System.err:  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1291) 
05-30 11:31:26.265 12612-12612/com.parse.starter W/System.err:  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1107) 
05-30 11:31:26.275 12612-12612/com.parse.starter W/System.err:  at dalvik.system.NativeStart.main(Native Method) 
05-30 11:31:26.275 12612-12612/com.parse.starter W/System.err: Caused by: java.lang.IllegalArgumentException: invalid type for ParseObject: class [Ljava.lang.String; 
05-30 11:31:26.275 12612-12612/com.parse.starter W/System.err:  at com.parse.ParseEncoder.encode(ParseEncoder.java:136) 
05-30 11:31:26.275 12612-12612/com.parse.starter W/System.err:  at com.parse.ParseEncoder.encode(ParseEncoder.java:97) 
05-30 11:31:26.275 12612-12612/com.parse.starter W/System.err:  at com.parse.ParseRESTCommand.<init>(ParseRESTCommand.java:138) 
05-30 11:31:26.275 12612-12612/com.parse.starter W/System.err:  at com.parse.ParseRESTCloudCommand.<init>(ParseRESTCloudCommand.java:22) 
05-30 11:31:26.275 12612-12612/com.parse.starter W/System.err:  at com.parse.ParseRESTCloudCommand.callFunctionCommand(ParseRESTCloudCommand.java:28) 
05-30 11:31:26.275 12612-12612/com.parse.starter W/System.err:  at com.parse.ParseCloudCodeController.callFunctionInBackground(ParseCloudCodeController.java:28) 
05-30 11:31:26.275 12612-12612/com.parse.starter W/System.err:  at com.parse.ParseCloud$1.then(ParseCloud.java:64) 
05-30 11:31:26.275 12612-12612/com.parse.starter W/System.err:  at com.parse.ParseCloud$1.then(ParseCloud.java:60) 
05-30 11:31:26.275 12612-12612/com.parse.starter W/System.err:  at bolts.Task$15.run(Task.java:917) 
05-30 11:31:26.275 12612-12612/com.parse.starter W/System.err:  at bolts.BoltsExecutors$ImmediateExecutor.execute(BoltsExecutors.java:105) 
05-30 11:31:26.275 12612-12612/com.parse.starter W/System.err:  at bolts.Task.completeAfterTask(Task.java:908) 
05-30 11:31:26.275 12612-12612/com.parse.starter W/System.err:  at bolts.Task.continueWithTask(Task.java:715) 
05-30 11:31:26.275 12612-12612/com.parse.starter W/System.err:  at bolts.Task.continueWithTask(Task.java:726) 
05-30 11:31:26.275 12612-12612/com.parse.starter W/System.err:  at bolts.Task$13.then(Task.java:818) 
05-30 11:31:26.275 12612-12612/com.parse.starter W/System.err:  at bolts.Task$13.then(Task.java:806) 
05-30 11:31:26.275 12612-12612/com.parse.starter W/System.err:  at bolts.Task$15.run(Task.java:917) 
05-30 11:31:26.275 12612-12612/com.parse.starter W/System.err:  at bolts.BoltsExecutors$ImmediateExecutor.execute(BoltsExecutors.java:105) 
05-30 11:31:26.275 12612-12612/com.parse.starter W/System.err:  at bolts.Task.completeAfterTask(Task.java:908) 
05-30 11:31:26.275 12612-12612/com.parse.starter W/System.err:  at bolts.Task.continueWithTask(Task.java:715) 
05-30 11:31:26.275 12612-12612/com.parse.starter W/System.err:  at bolts.Task.continueWithTask(Task.java:690) 
05-30 11:31:26.275 12612-12612/com.parse.starter W/System.err:  at bolts.Task.onSuccessTask(Task.java:806) 
05-30 11:31:26.275 12612-12612/com.parse.starter W/System.err:  at bolts.Task.onSuccessTask(Task.java:796) 
05-30 11:31:26.275 12612-12612/com.parse.starter W/System.err:  at bolts.Task.onSuccessTask(Task.java:830) 
05-30 11:31:26.275 12612-12612/com.parse.starter W/System.err:  at com.parse.ParseCloud.callFunctionInBackground(ParseCloud.java:60) 
05-30 11:31:26.275 12612-12612/com.parse.starter W/System.err:  at com.parse.ParseCloud.callFunctionInBackground(ParseCloud.java:99) 
05-30 11:31:26.275 12612-12612/com.parse.starter W/System.err:  at com.parse.starter.MainActivity.onCreate(MainActivity.java:62) 
05-30 11:31:26.275 12612-12612/com.parse.starter W/System.err:  at android.app.Activity.performCreate(Activity.java:5541) 
05-30 11:31:26.275 12612-12612/com.parse.starter W/System.err:  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1093) 
05-30 11:31:26.275 12612-12612/com.parse.starter W/System.err:  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2368) 
05-30 11:31:26.275 12612-12612/com.parse.starter W/System.err:  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2464) 
05-30 11:31:26.275 12612-12612/com.parse.starter W/System.err:  at android.app.ActivityThread.access$900(ActivityThread.java:172) 
05-30 11:31:26.275 12612-12612/com.parse.starter W/System.err:  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1308) 
05-30 11:31:26.275 12612-12612/com.parse.starter W/System.err:  at android.os.Handler.dispatchMessage(Handler.java:102) 
05-30 11:31:26.275 12612-12612/com.parse.starter W/System.err: ... 7 more 

Ist das ein Fehler, den ich gemacht habe, oder es gibt ein Problem mit Parse? Im mit Parse Server und Parse Android SDK 1.13.0

+1

Versuchen Sie, 'callFunctionInBackground' so zu ändern, dass kein generischer Typ (Object) verwendet wird und statt' ParseCloud.callFunctionInBackground ("getFoo", par, new FunctionCallback() {...} '- versuchen Sie es und lassen Sie es mich wissen Wenn das hilft – ishmaelMakitla

+0

Ich habe es gerade ausprobiert, und der Fehler ist der gleiche ... Danke trotzdem! Ich habe die Frage mit deiner Suggestion aktualisiert – Kmi

+0

Müssen Sie zwei 'done' Methoden? Vielleicht aktualisieren Sie Ihren Code mit dem neuesten Code Sie ' Und was passiert, wenn Ihre 'HashMap' explizit ein String-Array für den Werttyp (anstelle von' Object') verwendet? – ishmaelMakitla

Antwort

1

Statt den String[] im Wert von geben, übergeben Sie einfach einen String, dafür sollten Sie Ihren anfordernden Code wie folgt ändern -

Map<String, Object> par = new HashMap<String, Object>(); 
par.put("ingredients", "someIngredientValue"}); 
ParseCloud.callFunctionInBackground("getFoo", par, new FunctionCallback() { 
    @Override 
    public void done(Object o, Throwable throwable) { 
    Log.v("28", "" + o); 
    Log.v("27", "" + throwable.getMessage()); 
    for (Object obj : (ArrayList)o) { 
     Log.v("29",""+((ParseObject) obj).get("title")); 
    } 
    } 
//the rest of your code ... 

Auf der Empfangsende, dann sagen Sie request.params.ingredients - dies sollte Ihnen 'someIngredientValue' geben. Ich hoffe, das hilft.

+0

Vielen Dank! – Kmi

Verwandte Themen