AsyncTask doInBackground返回arraylist

时间:2017-07-24 15:50:02

标签: android web-services arraylist android-asynctask

我试图从Web服务获取json响应并将其放入arraylist中。然后我想让arraylist进入Recyclerview。我正在使用asynctask在后台执行此操作。 Web服务的响应是json数组。

import java.io.IOException;
import java.nio.ByteBuffer;

public class Q45235042 {

   public static String toEbcdic( String strToConvert ) throws IOException {
      String[] test = strToConvert.split( "(?<=\\G..)" );
      ByteBuffer sb = ByteBuffer.allocate( test.length );
      for ( String s : test )
         sb.put( (byte) Short.parseShort( s, 16 ) );
      return new String( sb.array(), "CP1047");
   }

   public static void main( String[] args ) throws IOException {
      System.out.println( toEbcdic( "C120C2" ) );
   }
}

这是来自网络服务的gson响应:

enter image description here

2 个答案:

答案 0 :(得分:0)

您需要使用某些库或您自己使用Android中的JSON类来解析JOSN响应。 谷歌可以为此提供示例。 一个自己做的例子:

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

然后你需要迭代这个数组来从中获取/提取相应的数据。返回此解析数据以在onPostExecute中获取此解析数据,从onPostExecute您可以更新列表适配器或对UI进行任何更新。

您可以参考this

答案 1 :(得分: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解析。