Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/234.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android AsyncTask doInBackground返回arraylist_Android_Web Services_Arraylist_Android Asynctask - Fatal编程技术网

Android AsyncTask doInBackground返回arraylist

Android AsyncTask doInBackground返回arraylist,android,web-services,arraylist,android-asynctask,Android,Web Services,Arraylist,Android Asynctask,我试图从web服务获取json响应,并将其放入arraylist中。然后我想把arraylist放到一个recyclerview中。我正在使用asynctask在后台完成它。web服务的响应是一个json数组 public class MainActivity extends AppCompatActivity { String nombreChef; Double ratingChef; private RecyclerView rvMain; privat

我试图从web服务获取json响应,并将其放入arraylist中。然后我想把arraylist放到一个recyclerview中。我正在使用asynctask在后台完成它。web服务的响应是一个json数组

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);

    }
public类MainActivity扩展了AppCompatActivity{
字符串名为brechef;
双级厨师;
私人回收站;
专用RVMainAdapter mRVMainAdapter;
private ArrayList data=new ArrayList();
私有类AsyncCallWS扩展了AsyncTask{
@凌驾
受保护的void onPreExecute(){
}
@凌驾
受保护的Void doInBackground(Void…参数){
SoapObject SoapObject=新的SoapObject(Conexion.NAMESPACE,Conexion.METHOD\u NAME\u CHEFS\u CERCA);
addProperty(“idUser”,Integer.valueOf(5));
SoapSerializationEnvelope=新的SoapSerializationEnvelope(SoapEnvelope.VER11);
envelope.dotNet=true;
envelope.setOutputSoapObject(soapObject);
HttpTransportSE HttpTransportSE=新的HttpTransportSE(Conexion.URL);
试一试{
httpTransportSE.call(Conexion.SOAP\u ACTION\u TPNAME,信封);
字符串resultado=envelope.getResponse().toString();
JSONObject json=新的JSONObject(resultado);
nombreChef=json.getString(“nombre_chef”);
ratingChef=json.getDouble(“评级”);
//我不知道如何将数组响应放入ARRAYLIST????
数据.添加(新厨师(12名,nombreChef,“Rioos”,“21”,“Jr los belepos”,12名,“Delivery”,ratingChef.toString(),“Activo”);
}
捕获(例外e){
Log.e(“Estacion”,e.getMessage());
//结果=“0”;
}
返回null;
}
@凌驾
受保护的void onPostExecute(void结果){
}
}
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
AsyncCallWS任务=新建AsyncCallWS();
task.execute();
rvMain=(RecyclerView)findViewById(R.id.rv_prueba);
rvMain.setLayoutManager(新的LinearLayoutManager(MainActivity.this));
mRVMainAdapter=新的RVMainAdapter(数据);
rvMain.setAdapter(mRVMainAdapter);
}
这是来自web服务的gson响应:


您需要使用一些库或自己使用Android中的JSON类来解析JOSN响应。 你可以在谷歌上找到这个例子。 一个自己做的例子:

//Convert response string to JOSN array
JSONArray json = new JSONArray(responseText);
然后您需要迭代此数组以从中获取/提取相应的数据。返回此解析数据以在
onPostExecute
中获取此解析数据,从
onPostExecute
可以更新列表适配器或对UI进行任何更新

您可以参考

私有类AsyncCallWS扩展AsyncTask{
@凌驾
受保护的void onPreExecute(){
}
@凌驾
受保护的ArrayList doInBackground(无效…参数){
ArrayList数据=新的ArrayList();
SoapObject SoapObject=新的SoapObject(Conexion.NAMESPACE,Conexion.METHOD\u NAME\u CHEFS\u CERCA);
addProperty(“idUser”,Integer.valueOf(5));
SoapSerializationEnvelope=新的SoapSerializationEnvelope(SoapEnvelope.VER11);
envelope.dotNet=true;
envelope.setOutputSoapObject(soapObject);
HttpTransportSE HttpTransportSE=新的HttpTransportSE(Conexion.URL);
试一试{
httpTransportSE.call(Conexion.SOAP\u ACTION\u TPNAME,信封);
字符串resultado=envelope.getResponse().toString();
JSONObject json=新的JSONObject(resultado);
nombreChef=json.getString(“nombre_chef”);
ratingChef=json.getDouble(“评级”);
//我不知道如何将数组响应放入ARRAYLIST????
数据.添加(新厨师(12名,nombreChef,“Rioos”,“21”,“Jr los belepos”,12名,“Delivery”,ratingChef.toString(),“Activo”);
}
捕获(例外e){
Log.e(“Estacion”,e.getMessage());
//结果=“0”;
}
返回数据;
}
@凌驾
受保护的void onPostExecute(ArrayList结果){
super.onPostExecute(结果)
//您的结果。(ArrayList)
}

再次检查json解析。

google“asynctasks是如何工作的?”我不明白你想告诉我什么,请阅读-总结是,这不是一个理想的方式来解决志愿者,可能会适得其反获得答案。请不要将此添加到你的问题中。如果你回答了问题,如果你不知道,就不要回答任何问题。不要浪费你的时间或者无事可做?String responseText=envelope.getResponse().toString();然后执行解析并将数据添加到arraylist,如前所述,并从doInBackground返回此arraylist。
 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>)
    }