我有这两节课.我的主要活动和扩展的一个AsyncTask,现在在我的主要活动,我需要从得到的结果OnPostExecute()中AsyncTask.我怎样才能将结果传递给我的主要活动?
这是示例代码.
我的主要活动.
public class MainActivity extends Activity{
AasyncTask asyncTask = new AasyncTask();
@Override
public void onCreate(Bundle aBundle) {
super.onCreate(aBundle);
//Calling the AsyncTask class to start to execute.
asyncTask.execute(a.targetServer);
//Creating a TextView.
TextView displayUI = asyncTask.dataDisplay;
displayUI = new TextView(this);
this.setContentView(tTextView);
}
}
Run Code Online (Sandbox Code Playgroud)
这是AsyncTask类
public class AasyncTask extends AsyncTask<String, Void, String> {
TextView dataDisplay; //store the data
String soapAction = "http://sample.com"; //SOAPAction header line.
String targetServer = "https://sampletargeturl.com"; //Target Server.
//SOAP Request.
String soapRequest …Run Code Online (Sandbox Code Playgroud) 我一直在玩各种试图熟悉AsyncTask的例子.到目前为止,我看到的所有示例都将AsyncTask包含在主要活动的onCreate方法中.我不太喜欢,所以我想看看将它分成自己的课程有多难.到目前为止我有这个:
的主要活动
package com.example.asynctaskactivity;
import android.os.AsyncTask;
import android.os.Bundle;
import android.os.SystemClock;
import android.app.Activity;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.ProgressBar;
import android.widget.TextView;
import android.widget.Toast;
import com.example.asynctaskactivity.ShowDialogAsyncTask;
public class AsyncTaskActivity extends Activity {
Button btn_start;
ProgressBar progressBar;
TextView txt_percentage;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
btn_start = (Button) findViewById(R.id.btn_start);
progressBar = (ProgressBar) findViewById(R.id.progress);
txt_percentage= (TextView) findViewById(R.id.txt_percentage);
Log.v("onCreate","Attempt set up button OnClickListener");
btn_start.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View v) {
btn_start.setEnabled(false);
new ShowDialogAsyncTask().execute();
}
});
Log.v("onCreate","Success!");
}
} …Run Code Online (Sandbox Code Playgroud) 我是Android开发和Java的新手.这是基本设置:我有一个启动画面,AsyncTask用于检查服务器可用性.在这个帖子之后,我在我的活动中做了一个回调.这比做工作更有意义,OnPostExecute()因为我想在不同的活动中重用这个任务.
但是,在我的回调中,我会检查状态是否正常.如果是,它应该启动下一个活动.但是从我的回调的上下文中,我不知道如何获得我的Activity引用,我需要它作为Intent的参数.
这是OnCreate下我的Activity中的代码:
//Check server status
CheckServiceTask t = new CheckServiceTask(new OnTaskCompleted<ShaggyServiceStatus>() {
@Override
public void onTaskCompleted(ShaggyServiceStatus result) {
Log.i(TAG, "Callback. Result: " + result.getStatus());
ProgressBar pb = (ProgressBar) findViewById(R.id.splash_progress);
pb.setVisibility(View.INVISIBLE);
if (result.getStatusCode() == 999){
TextView t = (TextView) findViewById(R.id.splash_status_text);
t.setText(result.getStatus());
return;
}
Intent i = new Intent(getActivity(), LoginActivity.class);
startActivity(i);
finish();
}
});
t.execute();
Run Code Online (Sandbox Code Playgroud)
失败的部分是getActivity().那个电话不可用.使用this抛出错误(我理解,因为我在上下文中OnTaskCompleted).
为了完整性,这是OnTaskCompleted的接口:
public interface OnTaskCompleted<T> {
public void onTaskCompleted(T result);
}
Run Code Online (Sandbox Code Playgroud)
这是CheckServiceTask类: …
好的,现在我有Class A一些包含一些微调器,这些值将由Class B扩展填充,AsnycTask从Web服务中获取微调器值.在B类中,我设法检索值,在Toast中显示.现在的问题是如何将这些微调器值传递回A类?
我试过了
AsyncTask RETURN值中的OnPostExcecute方法可以吗?
通过传递Class A到Class B并存储该值在公共变量Class A象下面
@Override
protected void onPostExecute(String result)
{
classA.classAvariable = result;
}
Run Code Online (Sandbox Code Playgroud)
然而,每当我尝试阅读时,classAvariable我总会得到一个NullPointer Exception.似乎变量从未分配过结果.出于可读性目的,我需要分开Class B而不是用作内联类.
我的Java程序员是什么想法?
我试图在AsyncTask和Fragment之间实现回调,但无法找到正确的信息如何做到这一点.问题是所有回调实现都在activity和asynctask之间,但我需要在fragment和asynctask之间.有人可以给我一些小工作示例如何在没有活动的情况下实现它.我的动作结构:片段调用DialogFragment - >选择一些东西并将服务器请求发送到异步任务 - >异步任务处理所有内容并更新视图和一些变量.我的主要问题是我在onCreate中只调用一次prepareData(),当我在其他片段和返回之间走动时,我会看到旧数据.也就是说,仅仅更新asProct的onPost中的视图是不够的.有回调会更新整个变量会很好.
public class TermsAndConditionsFragment extends SherlockFragment implements OnClickListener, OnTouchListener, OnItemClickListener, onTaskListener {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
fm = getSherlockActivity().getSupportFragmentManager();
prepareData();
}
public void prepareData() {
termsAndConditionsM = new TermsAndConditionsManager(getSherlockActivity());
termsAndConditions = termsAndConditionsM.getTermsAndConditions();
if (termsAndConditions != null) {
int totalPayments = Integer.valueOf(termsAndConditions.get(ServerAPI.NO_OF_PAYMENTS));
if (totalPayments > 0) {
paymentsData = termsAndConditionsM.getpayments();
if (paymentsData != null) {
payments = new ArrayList<Payment>();
for (int i = 1; i <= totalPayments; i++) {
paymentValues = new Payment();
paymentValues.setPaymentID(Integer.valueOf(paymentsData.get(ServerAPI.PAYMENT_NO …Run Code Online (Sandbox Code Playgroud) 如何将AsyncTask中生成的List返回给Activity?
我的LoadStringsAsync类:
public class LoadStringsAsync extends AsyncTask<Void, Void, List<String> > {
List<String> str;
@Override
protected void onPreExecute() {
super.onPreExecute();
...
}
@Override
protected List<String> doInBackground(Void... arg0) {
...
get content from the internet
and
fill the list
...
}
@Override
protected void onPostExecute(List<String> str) {
super.onPostExecute(events);
...
}
}
Run Code Online (Sandbox Code Playgroud)
我需要在我的Activity中使用List才能使用它.(不仅仅是在ListView中显示它:P)
有什么建议怎么做?:-)
谢谢到目前为止!
我在markerarray列表中大约有11000个标记,当我尝试在地图中加载时,即使我使用Thread和RunOnUi线程,它也会阻塞我的UI,还有其他更好的方法可以尝试吗?
Thread t = new Thread(new Runnable() {
@Override
public void run() {
for (int i = 0; i < list.size(); i++) {
markerOptionList.add(new MarkerOptions().position(
new LatLng(Double.parseDouble(list.get(i)
.getLatitude()), Double
.parseDouble(list.get(i)
.getLangtitude()))).title(
list.get(i).getName() + "~"
+ list.get(i).getCity() + "~"
+ list.get(i).getSector() + "~"
+ String.valueOf(false)));
}
getActivity().runOnUiThread(new Runnable() {
@Override
public void run() {
addMarker();
}
});
}
});
t.start();
Run Code Online (Sandbox Code Playgroud)
添加标记是我在地图中添加标记的方法
请提出更好的实施方式,谢谢
我已经看到了这个答案: 如何将OnPostExecute()的结果导入主活动,因为AsyncTask是一个单独的类?
但这不是我要问的,因为我的调用类有多个调用AsyncTask.
我想创建一个通用AsyncTask类,它将接受URL并从给定的URL下载内容并返回下载的内容.
例:
public class MyAsyncTask extends AsyncTask<String, Void, String>{
ProgressDialog dialog;
protected void onPreExecute() {
super.onPreExecute();
dialog = ProgressDialog.show(context, "Loading", "Please wait...", true);
}
protected String doInBackground(String... params) {
// do download here
}
protected void onPostExecute(String result) {
super.onPostExecute(result);
dialog.dismiss();
}
}
Run Code Online (Sandbox Code Playgroud)
我有另一个类AsyncTask在不同的场景中调用它
public class MyClass {
public method1(String url) {
String result = new MyAsyncTask().execute(url).get();
}
public method2(String url) {
String result = new MyAsyncTask().execute(url).get();
}
}
Run Code Online (Sandbox Code Playgroud)
我知道使用get() …