2017-07-24 109 views
-2

我试图从web服务获取json响应并将其放入arraylist中。然后,我想让arraylist进入recyclerview。我使用asynctask在后台执行它。 Web服务的响应是一个json数组。AsyncTask doInBackground返回arraylist

public class MainActivity extends AppCompatActivity { 

    String nombreChef; 
    Double ratingChef; 

    private RecyclerView rvMain; 
    private RVMainAdapter mRVMainAdapter; 

    private ArrayList<Chef> data= new ArrayList<>(); 

    private class AsyncCallWS extends AsyncTask<Void, Void, Void>{ 

     @Override 
     protected void onPreExecute() { 
     } 

     @Override 
     protected Void doInBackground(Void... params) { 

      SoapObject soapObject = new SoapObject(Conexion.NAMESPACE, Conexion.METHOD_NAME_CHEFS_CERCA); 
      soapObject.addProperty("idUser", Integer.valueOf(5)); 
      SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11); 
      envelope.dotNet = true; 
      envelope.setOutputSoapObject(soapObject); 
      HttpTransportSE httpTransportSE = new HttpTransportSE(Conexion.URL); 

      try { 
       httpTransportSE.call(Conexion.SOAP_ACTION_TPNAME, envelope); 
       String resultado = envelope.getResponse().toString(); 
       JSONObject json = new JSONObject(resultado); 
       nombreChef=json.getString("nombre_chef"); 
       ratingChef=json.getDouble("rating"); 

       //IM NOT SURE HOW TO PUT THE ARRAY RESPONSE INTO ARRAYLIST???? 
       data.add(new Chef(12,nombreChef,"Riuos","21","Jr los belepos",12,"Delivery",ratingChef.toString(),"Activo")); 
      } 
      catch (Exception e) { 
       Log.e("Estacion", e.getMessage()); 
       //result = "0"; 
      } 

      return null; 
     } 

     @Override 
     protected void onPostExecute(Void result) { 

     } 
    } 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     AsyncCallWS task = new AsyncCallWS(); 
     task.execute(); 

     rvMain = (RecyclerView) findViewById(R.id.rv_prueba); 
     rvMain.setLayoutManager(new LinearLayoutManager(MainActivity.this)); 

     mRVMainAdapter = new RVMainAdapter(data); 
     rvMain.setAdapter(mRVMainAdapter); 

    } 

这是来自Web服务的响应GSON:

enter image description here

+0

谷歌“asynctasks如何工作” –

+0

我没有得到你想告诉我的东西 – Pierre

+0

请阅读[在什么情况下,我可以添加“紧急”或其他类似的短语,以获得更快的答案? (//meta.stackoverflow.com/q/326569) - 总结是,这不是解决志愿者的理想方式,并且可能会对获得答案产生反作用。请不要将这添加到您的问题。 – halfer

回答

0

则需要由使用一些库或通过自己的Android使用JSON类有解析JOSN响应。 您可以通过谷歌为此获取示例。 通过做自己为例:

//Convert response string to JOSN array 
JSONArray json = new JSONArray(responseText); 

,那么你需要遍历这个数组以得到/从中提取相应的数据。返回此解析数据以获取onPostExecute中的此解析数据,您可以从onPostExecute中更新您的列表适配器或对UI进行任何更新。

你可以参考this

+0

我应该保存在responseText中? – Pierre

+0

String responseText = envelope.getResponse()。toString(); 然后解析数据并将数据添加到arraylist,就像你刚才提到的那样,并从doInBackground返回这个数组列表。 – AndroidDevUser

0
private class AsyncCallWS extends AsyncTask<Void, Void, ArrayList<Chef>>{ 

    @Override 
    protected void onPreExecute() { 
    } 

    @Override 
    protected ArrayList<Chef> doInBackground(Void... params) { 
     ArrayList<Chef> data= new ArrayList<>(); 
     SoapObject soapObject = new SoapObject(Conexion.NAMESPACE, Conexion.METHOD_NAME_CHEFS_CERCA); 
     soapObject.addProperty("idUser", Integer.valueOf(5)); 
     SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11); 
     envelope.dotNet = true; 
     envelope.setOutputSoapObject(soapObject); 
     HttpTransportSE httpTransportSE = new HttpTransportSE(Conexion.URL); 

     try { 
      httpTransportSE.call(Conexion.SOAP_ACTION_TPNAME, envelope); 
      String resultado = envelope.getResponse().toString(); 
      JSONObject json = new JSONObject(resultado); 
      nombreChef=json.getString("nombre_chef"); 
      ratingChef=json.getDouble("rating"); 

      //IM NOT SURE HOW TO PUT THE ARRAY RESPONSE INTO ARRAYLIST???? 
      data.add(new Chef(12,nombreChef,"Riuos","21","Jr los belepos",12,"Delivery",ratingChef.toString(),"Activo")); 
     } 
     catch (Exception e) { 
      Log.e("Estacion", e.getMessage()); 
      //result = "0"; 
     } 

     return data; 
    } 

    @Override 
    protected void onPostExecute(ArrayList<Chef> result) { 
     super.onPostExecute(result) 

    // your result.(ArrayList<Chef>) 
    } 

再次检查你的JSON解析。

相关问题