android自定义task,关于Android:Android-无法通过自定义AsyncTask类更新活动ProgressDialog...

我创建了一个名为ConnectionHttp的自定义AsyncTask类。 当通过主活动(test1.java)中的按钮调用时,它们必须返回Json字符串。 连接一切正常,我可以得到字符串。

关键是我想在后台任务运行时在主活动上显示一个ProgressDialog,但它不起作用。 我没有看到任何ProgressDialog。

1)我该如何修复progressDialog

2)我该如何解决日志中的问题(应用程序可能做了太多工作...)(我正在真实设备上进行测试)

这是我的代码:

test1.java(主要活动)

public class test1 {

public static final String URL =".....";

private ProgressDialog pDialog;

private TextView tv;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_test1);

pDialog = new ProgressDialog(test1.this);

tv = (TextView)findViewById(R.id.tvTest);

Button btRun = (Button) findViewById(R.id.btTestRun);

btRun.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View v) {

try {

ConnectionHttp conn = new ConnectionHttp(test1.this, pDialog, URL);

String str = conn.execute().get();

tv.setText(str);

} catch (InterruptedException e) {

e.printStackTrace();

} catch (ExecutionException e) {

e.printStackTrace();

}

}

});

}

连接Http.java

public class ConnectionHttp extends AsyncTask

{

private ProgressDialog pDialog;

private Context context;

private String LOGIN_URL;

private JSONParser jsonParser;

// TAGS

private final String TAG_SUCCESS ="success";

private final String TAG_MESSAGE ="message";

private final String TAG_VALUES ="values";

public ConnectionHttp(Context context, ProgressDialog pDialog, String url) {

this.context = context;

this.pDialog = pDialog;

this.LOGIN_URL = url;

this.jsonParser = new JSONParser();

}

@Override

public void onPreExecute() {

super.onPreExecute();

pDialog.setMessage("Connexion au serveur distant...");

pDialog.setIndeterminate(false);

pDialog.setCancelable(true);

pDialog.show();

}

@Override

public String doInBackground(String... args) {

// TODO Auto-generated method stub

int success;

String values ="";

try {

List params = new ArrayList<>();

// adding parameters

//  ...

params.add(.....);

//

Log.d("request #1","starting");

JSONObject json = jsonParser.makeHttpRequest(LOGIN_URL,"POST", params);

// success tag for json

success = json.getInt(TAG_SUCCESS);

if (success == 1) {

Log.d("request #1","Successfull");

values =  json.getString(TAG_VALUES);

return json.getString(TAG_MESSAGE);

}else{

return json.getString(TAG_MESSAGE);

}

} catch (JSONException e) {

e.printStackTrace();

}

return values;

}

public void onPostExecute(String message) {

Log.d("request #1","done.");

pDialog.setMessage("done.");

pDialog.dismiss();

}

Android日志

D/request #1﹕ starting

D/request #1 : Successfull !

I/Choreographer﹕ Skipped 49 frames! The application may be doing too much work on its main thread.

D/request #1﹕ done

解决应用程序可能做过多工作的问题更改String str = conn.execute()。get(); 到字符串str = conn.execute(); 并将上下文传递给asynctask类并在其中创建ProgressDialog。

当我将String str = conn.execute().get();更改为conn.execute();时,它可以工作。我在AsyncTask类中创建了ProgressDialog。 现在它可以工作了,但是我如何才能得到Json String而不是" conn.execute()。get()"? 谢谢

您应该使用回调方法,该方法将在异步任务完成后调用,它将更新您的文本视图或使用广播接收器。

它的工作原理,非常感谢你们!

不要将进度对话框传递给Async类。 而是在Async类上创建它。

修改onPreExecute对此

@Override

public void onPreExecute() {

super.onPreExecute();

pdialog = new ProgressDialog(getActivity(),"","Connexion au serveur distant...");

pDialog.setIndeterminate(false);

pDialog.setCancelable(true);

pDialog.show();

}

从test1.java删除进度对话框

乐意效劳! :)

首先从AsyncTask中删除进度对话框,然后使用传递的上下文创建ProgressDialog;

public ConnectionHttp(Context context, ProgressDialog pDialog, String url) {

this.context = context;

this.pDialog = new ProgressDialog(context);

this.LOGIN_URL = url;

this.jsonParser = new JSONParser();

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值