gpt4 book ai didi

java - 在 android 中从 doInBackground() 获取响应之前调用 AsyncTask onPostExecute() 吗?

转载 作者:行者123 更新时间:2023-12-01 09:22:12 25 4
gpt4 key购买 nike

这是我的代码:-

Goals.java 类

public class Goals  extends AppCompatActivity{

private ArrayList<Goal> result;
private RecyclerView.Adapter adapter;
private RecyclerView recyclerView;
private RecyclerView.LayoutManager layoutManager;
private ArrayList<Goal> dataFromServer;
private Toolbar toolbar;


//This is for back button
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
startActivity(new Intent(this, MainActivity.class));
finish();
return true;
}
return super.onOptionsItemSelected(item);
}


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

recyclerView=(RecyclerView) findViewById(R.id.goal_recycler_view);
toolbar=(Toolbar) findViewById(R.id.toolbar);


recyclerView.setHasFixedSize(true);

layoutManager=new LinearLayoutManager(this);
recyclerView.setLayoutManager(layoutManager);

setSupportActionBar(toolbar);

//FOr back button
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setDisplayShowHomeEnabled(true);
getSupportActionBar().setDisplayShowTitleEnabled(false);


//fetch goal list from server and also its related action
getData();

//Send Data to GoalAdaptor
showData();

}

private void showData() {
Log.i("Show Date","Enter");
System.out.println("Result Array List"+result.toString());
adapter=new goalAdaptor(this, result);
recyclerView.setAdapter(adapter);
}

private void getData() {

result=new ArrayList<>();

DownloadPlansFromServer server= new DownloadPlansFromServer();
server.execute();

}


class DownloadPlansFromServer extends AsyncTask<Void,Void,Boolean>
{

private ProgressDialog progressDialog;
Boolean planActive=false;

protected void onPreExecute() {
// NOTE: You can call UI Element here.

//UI Element
progressDialog = new ProgressDialog(Goals.this);

progressDialog.setMessage("Downloading Plans Data..");
progressDialog.show();
}


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



try {

Response.Listener listener=new Response.Listener<JSONObject>()
{
@Override
public void onResponse(JSONObject response) {
try {

System.out.println("Inside the response");
// Parsing json object response
// response will be a json object

System.out.println("Output is "+response.toString());


//Toast.makeText(getApplicationContext(),response.toString(),Toast.LENGTH_LONG).show();

planActive=response.getBoolean("success");



if (planActive)
{
JSONArray plansArray=response.getJSONArray("response");

//get Plans Details
for (int p=0;p<plansArray.length();p++)
{
JSONObject plan=plansArray.getJSONObject(p);

//get Goals Details
JSONObject planGoals=plan.getJSONObject("goal");

Goal goal=new Goal();
goal.setGoal_name("Goal Name:- "+planGoals.getString("goal_name"));

Log.i("Goal Name is",planGoals.getString("goal_name"));

JSONObject currentValue=planGoals.getJSONObject("current_value");
JSONObject targetValue=planGoals.getJSONObject("target_value");

//Get the values parameter
ArrayList<String> parameterList=getTheParameter(planGoals.getString("goal_id"));

if (parameterList.isEmpty())
{
System.out.println("Problem WHile Processing the parameter ");
}
else
{
String goalDescription="Reduce the value from";

StringBuilder currentStringBuilder=new StringBuilder();

for (int k=0;k<parameterList.size();k++)
{
currentStringBuilder.append(currentValue.getString(parameterList.get(k))+"/");
}

StringBuilder targetStringBuilder=new StringBuilder();

for (int k=0;k<parameterList.size();k++)
{
targetStringBuilder.append(targetValue.getString(parameterList.get(k))+"/");

}

goal.setGoal_description(goalDescription+currentStringBuilder.toString()+" to "+ targetStringBuilder.toString());
}

//Add the result to the array
result.add(goal);

}

}


}
catch (JSONException k)
{
Log.i("On Response",k.getMessage());
k.printStackTrace();
}

}
};


Response.ErrorListener errorListener=new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {

// Handle Error
if (error instanceof TimeoutError || error instanceof NoConnectionError) {
error.printStackTrace();
Toast.makeText(getApplicationContext(), " this Network Error", Toast.LENGTH_SHORT).show();
} else if (error instanceof AuthFailureError) {
//TODO
error.printStackTrace();
Toast.makeText(getApplicationContext(), "User not authorized", Toast.LENGTH_SHORT).show();
} else if (error instanceof ServerError) {
//TODO
error.printStackTrace();
Toast.makeText(getApplicationContext(), "Server error", Toast.LENGTH_SHORT).show();
} else if (error instanceof NetworkError) {
//TODO
error.printStackTrace();
Toast.makeText(getApplicationContext(), "Network Error", Toast.LENGTH_SHORT).show();
} else if (error instanceof ParseError) {
//TODO
error.printStackTrace();
Toast.makeText(getApplicationContext(), "Error consuming request", Toast.LENGTH_SHORT).show();
}
else error.printStackTrace();
}
};

String plan_url=Constants.url+"plan";

JsonObjectHeader customRequest=new JsonObjectHeader(plan_url,null, listener, errorListener);
RequestQueue requestQueue = Volley.newRequestQueue(getApplicationContext());
requestQueue.add(customRequest);

System.out.println("After custom Request");

planActive=true;

}catch (Exception e)
{
e.printStackTrace();
}


return planActive;
}


protected void onPostExecute(Boolean unused) {
// NOTE: You can call UI Element here.

// Close progress dialog
progressDialog.dismiss();

if (unused)
{
Log.i("Get Plan","Yes");
//showData();

}

else
Toast.makeText(getApplicationContext(),"No Plans Found",Toast.LENGTH_LONG).show();

}


}

private ArrayList<String> getTheParameter(String goal_id) {

ArrayList<String> arrayList=new ArrayList<>();

if (goal_id.equals("bp"))
{
arrayList.add("systolic");
arrayList.add("diastolic");

return arrayList;
}
else
{
arrayList.add(null);
return arrayList;
}



}


}

问题是:- 在从服务器获取响应之前,执行了 onPostExecute() 函数。所以我会得到空结果数组列表。

JsonObjectHeader 类是从服务器获取数据的基本 volley 类。

最佳答案

当您需要使用任何第三方库进行网络调用时,无需使用异步任务。因为volly创建了自己的线程用于网络调用。

关于java - 在 android 中从 doInBackground() 获取响应之前调用 AsyncTask onPostExecute() 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40102963/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com