2016-10-26 2 views
1

Ich versuche, ein JSON Objekt an einen Web-Service über Asynctask zu übergeben. Ich rufe eine collectStatistics Methode in der MainActivity. Diese Methode sammelt einige Statistiken des mobilen Geräts und kombiniert sie in einem JSON Objekt. JSON Objekt wird dann an Asynctask übergeben.Übergabe von JSON-Objekt an einen Web-Service über AsyncTask

JSONObject jsonProperties = new JSONObject(); 
    try { 
     jsonProperties.put("_device" , _device); 
     jsonProperties.put("_model", _model); 
     jsonProperties.put("_product", _product); 

    } catch (JSONException e) { 
     e.printStackTrace(); 
    } 
    if (jsonProperties.length() > 0) 
    { 
     //call to async class 
     //String.valueOf(jsonProperties) 
     //new SendJsonProperties().executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, jsonProperties); //instead of execute 
     Toast.makeText(context,jsonProperties.toString(),Toast.LENGTH_LONG).show(); 
     if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { 
      new SendJsonProperties().executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, jsonProperties); 
      Log.i("msg","calling asynctask"); 
     } else { 
      new SendJsonProperties().execute(jsonProperties); 
      Log.i("msg","NOT calling asynctask"); 
     } 
    } 

Der AsyncTask erhält JSON Parameter

class SendJsonProperties extends AsyncTask <JSONObject,String,String> 

ich einen Web-Service-Anrufer Methode in doInBackground rufen

protected String doInBackground(JSONObject... params) 
{ 
    //(...) elippsis make the input array 
    Log.i("msg", "do in bkgnd"); 
    WebServicesCaller webServicesCaller = new WebServicesCaller(); 
    result = webServicesCaller.storeStatistics(params[0]); 
    return null; 
} 

Aber ich bekomme diese Fehlermeldung

java.lang.RuntimeException: Cannot serialize: {"_product":"ms013gxx","_model":"SM-G7102","_device":"ms013g"} 

Ich kann das Problem in der Serialisierung nicht herausfinden. Jede Hilfe wird sehr geschätzt. Danke im Voraus.

Antwort

0

Ich habe versucht, ein JSON-Objekt zu einem Web-Methode zu senden, die

public string storeStatistics(string jsonObj)

Also änderte ich

jsonProp.setType(JSONObject.class); 
request.addProperty(jsonProp, obj); 

zu

jsonProp.type = PropertyInfo.STRING_CLASS; 
request.addProperty(jsonProp, obj.toString()); 
einen String-Parameter nimmt
0

Sie müssen die Modell POJO-Klasse Ihrer JSONObject-Parameter erstellen. Verwenden Sie diesen Link, um die POJO-Klasse gemäß JSON-Antwort zu erstellen.

http://www.jsonschema2pojo.org/

+0

Sorry, aber ich weiß nicht, wovon du redest, könntest du bitte mehr erklären? Danke für Ihre Hilfe. –

+0

Sie haben diesen Fehler erhalten, weil Ihre Objekte (_product) nicht serialisiert sind. Dafür müssen Sie das in serializable umwandeln, indem Sie den obigen Link verwenden, erhalten Sie serialisierte Objekte –

Verwandte Themen