Android AsyncTask doInBackground返回arraylist
我试图从web服务获取json响应,并将其放入arraylist中。然后我想把arraylist放到一个recyclerview中。我正在使用asynctask在后台完成它。web服务的响应是一个json数组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
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>)
}