我正在尝试将帖子从我的应用上传到我的数据库。要在上载过程中显示进度对话框,我正在使用异步任务。不执行doinbackground()方法。 :
private ProgressDialog mProgress;
public void startPosting() {
//uploading posts
}
post.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Task task=new Task();
if (Build.VERSION.SDK_INT>= Build.VERSION_CODES.HONEYCOMB)
task.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
else
task.execute();
}
});
}
class Task extends AsyncTask<Void,Void,Void>{
@Override
protected void onPreExecute() {
mProgress = new ProgressDialog(PostActivity.this);
mProgress.setMessage("Posting Alert");
mProgress.show();
}
@Override
protected Void doInBackground(Void... voids) {
try {
startPosting();
}catch (Exception e){
}
return null;
}
@Override
protected void onProgressUpdate(Void... values) {
}
@Override
protected void onPostExecute(Void aVoid) {
mProgress.dismiss();
Toast.makeText(PostActivity.this, "Alert Posted", Toast.LENGTH_LONG).show();
}
}
}
感谢任何帮助。 谢谢
答案 0 :(得分:3)
在doInBackground()
方法中,您展示了祝酒词。如果要显示吐司,则必须在UI线程上运行。但是doInBackground()
方法在不同的线程上运行。
请从那里取出那个吐司。也许你可以做一件事,你可以使用runOnUiThread
来展示Toast。
答案 1 :(得分:0)
在您的应用中使用此代码替换您的异步任务类代码。
//=====================================================================================
// Async Task Class
//=====================================================================================
public class LazyDataConnection extends AsyncTask<String, Void, String> {
String method;
public LazyDataConnection(String method) {
this.method = method;
}
@Override
protected String doInBackground(String... arg0) {
method = arg0[0];
return getData.callWebService_2(arg0[0], arg0[1]);
}
protected void onPostExecute(String xmlResponse) {
if (xmlResponse.equals("")) {
try {
if (progDialog != null && progDialog.isShowing()) {
progDialog.dismiss();
}
} catch (Exception ex) {
}
Toast.makeText(getApplicationContext(), "No Internet Connection", Toast.LENGTH_LONG).show();
} else if (method.equals("METHOD NAME")) { // method name
try {
if (progDialog != null && progDialog.isShowing()) {
progDialog.dismiss();
}
} catch (Exception ex) {
}
METHOD NAME(xmlResponse, "METHOD NAME");
if (complaint_id != 0) {
finish();
}
Toast.makeText(getApplicationContext(), alertmessage, Toast.LENGTH_LONG).show();
}
}
`
如果有任何疑问问我。
答案 2 :(得分:0)
异步任务由在后台线程上运行的计算定义,其结果在UI线程上发布。异步任务由3种泛型类型定义,称为Params,Progress和Result,以及4个步骤,称为onPreExecute,doInBackground,onProgressUpdate和onPostExecute。
您无法更新UI以及在后台线程上执行任何UI操作。在后台线程上调用onPreExecute()
。
onPostExecute(Result)
,position:absolute;
top:50%;
left:50%;
transform: translate(-50%,-50%);
-webkit-transform: translate(-50%,-50%);
-ms-transform: translate(-50%,-50%);
-moz-transform: translate(-50%,-50%);
。所以你可以在这里展示吐司。
答案 3 :(得分:0)
你不能直接在doInBackground()中使用上下文,因为它在后台运行而后台线程不能改变UI外观,
您可以在import React, {Component} from "react";
import {StyleSheet, View, AppRegistry, ListView, Text} from "react-native";
class dhrumil extends Component{
constructor(props){
super(props);
this.state = {
var ds = new ListView.DataSource({rowsHasChanged : (r1,r2) => r1!==r2})
return {
dataSource: ds.cloneWithRows(["1","2","3","4","5"])
};
}
}
_renderer(rowData){
return <Text>{rowData}</Text>;
}
render(){
return(
<ListView
dataSource = {() => this.state.dataSource}
renderRow = {() => this._renderer()}
/>
);
}
}
AppRegistry.registerComponent("dhrumil",()=>dhrumil);
或onPreExecute()
如果您在
中遇到错误 onPostExecute(Result)
为此,您还可以使用Toast.makeText(PostActivity.this,"Error while downloading",Toast.LENGTH_LONG).show();
方法或创建上下文变量。
getApplicationContext()
答案 4 :(得分:0)
从doInBackground()中移除Toast并将其中的任何一个放入onPostExecute()或在runonUIthread()中运行toast
答案 5 :(得分:0)
将onPostExecuted()
中的所有内容与runOnUIThread()
:
runOnUiThread(new Runnable() {
@Override
public void run() {
}});