Java 在android中调用线程内的方法
下面是一个调用Java 在android中调用线程内的方法,java,android,multithreading,Java,Android,Multithreading,下面是一个调用fileUpload方法的方法,上传文件后,我想删除synchronized对象,我这样做了。现在我必须通过调用fillRecipients()方法重新加载页面,它列出了数据库中的所有信息,并显示在列表视图中。由于我已经使用了线程,它不允许我将fillRecipeints放在线程内部,但我希望它位于下面的第230行[在下面注释为第230行] 这是我的同步方法: public void synchronize(final String id){ dialog = Progre
fileUpload
方法的方法,上传文件后,我想删除synchronized
对象,我这样做了。现在我必须通过调用fillRecipients()
方法重新加载页面,它列出了数据库中的所有信息,并显示在列表视图中。由于我已经使用了线程,它不允许我将fillRecipeints
放在线程内部,但我希望它位于下面的第230行[在下面注释为第230行]
这是我的同步方法:
public void synchronize(final String id){
dialog = ProgressDialog.show(ViewRecipients.this, "", "Uploading this file...", true);
new Thread(new Runnable() {
public void run() {
runOnUiThread(new Runnable() {
public void run() {
//uploading.setText("uploading started.....");
//dialog.show();
}
});
mDbHelper.open();
Cursor cData = mDbHelper.fetchRecipientInfo(id);
for(cData.moveToFirst();!cData.isAfterLast();cData.moveToNext()){
String id = cData.getString(cData.getColumnIndex("fld_recipient_id"));
String info = cData.getString(cData.getColumnIndex("fld_info"));
String latitude = cData.getString(cData.getColumnIndex("fld_latitude"));
String longitude = cData.getString(cData.getColumnIndex("fld_longitude"));
ArrayList<String> imagesArray = new ArrayList<String>();
for (int i = 1; i <= 4; i++) {
String image = cData.getString(cData.getColumnIndex("fld_image_url" + i));
if (image != null) {
imagesArray.add(image);
}
}
try {
serverResponseCode = uploadFile(imagesArray, info, latitude, longitude, id);
if (serverResponseCode==200){
mDbHelper.deleteRecipientRecId(id);
//Line NO 230 here i want to add fillRecipients() method
}
dialog.dismiss();
} catch (IOException e) {
e.printStackTrace();
dialog.dismiss();
}
}
cData.close();
mDbHelper.close();
if(serverResponseCode == 200){
runOnUiThread(new Runnable() {
public void run() {
Toast.makeText(ViewRecipients.this, "File Upload Complete.", Toast.LENGTH_SHORT).show();
}
});
}
}
}).start();
}
有人能帮我吗?public void synchronize(最终字符串id){
public void synchronize(final String id) {
new UploadAsync.execute();
}
//async class to do task in background and notify UI after completion of task in onPost()
class UploadAsync extends AsyncTask<Void, Void, Void>{
ProgressDialog dialog = null;
boolean isUploaded = false;
@Override
protected void onPreExecute() {
// TODO Auto-generated method stub
super.onPreExecute();
ProgressDialog.show(ViewRecipients.this, "", "Uploading this file...", true);
}
@Override
protected Void doInBackground(Void... params) {
try{
mDbHelper.open();
Cursor cData = mDbHelper.fetchRecipientInfo(id);
for(cData.moveToFirst();!cData.isAfterLast();cData.moveToNext()){
String id = cData.getString(cData.getColumnIndex("fld_recipient_id"));
String info = cData.getString(cData.getColumnIndex("fld_info"));
String latitude = cData.getString(cData.getColumnIndex("fld_latitude"));
String longitude = cData.getString(cData.getColumnIndex("fld_longitude"));
ArrayList<String> imagesArray = new ArrayList<String>();
for (int i = 1; i <= 4; i++) {
String image = cData.getString(cData.getColumnIndex("fld_image_url" + i));
if (image != null) {
imagesArray.add(image);
}
}
try {
serverResponseCode = uploadFile(imagesArray, info, latitude, longitude, id);
if (serverResponseCode==200){
mDbHelper.deleteRecipientRecId(id);
isUploaded = true;
}
} catch (IOException e) {
e.printStackTrace();
}
}
cData.close();
mDbHelper.close();
}
catch(Exception e){
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(Void result) {
// TODO Auto-generated method stub
super.onPostExecute(result);
//close dialog
if(dialog != null && dialog.isShowing()){
dialog.dismiss();
}
if(isUploaded){
Toast.makeText(ViewRecipients.this, "File Upload Complete.", Toast.LENGTH_SHORT).show();
fillRecipients();
}
}
}
private void fillRecipients() {
mCursor = mDbHelper.fetchAllRecipientsInfo();
if (mCursor == null) {
System.out.println("empty cursor");
} else {
String[] from = new String[] { MunchaDbAdapter.FLD_RECIPIENT_ID };
int[] to = new int[] { R.id.text1 };
SimpleCursorAdapter recipient = new SimpleCursorAdapter(this,
R.layout.recipient_show, mCursor, from, to);
setListAdapter(recipient);
}
}
新建UploadAsync.execute();
}
//异步类在后台执行任务,并在onPost()中完成任务后通知UI
类UploadAsync扩展了AsyncTask{
ProgressDialog=null;
布尔值=false;
@凌驾
受保护的void onPreExecute(){
//TODO自动生成的方法存根
super.onPreExecute();
ProgressDialog.show(ViewRecipients.this,,“上载此文件…”,true);
}
@凌驾
受保护的Void doInBackground(Void…参数){
试一试{
mDbHelper.open();
游标cData=mDbHelper.fetchRecipientInfo(id);
对于(cData.moveToFirst();!cData.isAfterLast();cData.moveToNext()){
字符串id=cData.getString(cData.getColumnIndex(“fld\U收件人id”);
String info=cData.getString(cData.getColumnIndex(“fld\U信息”);
字符串纬度=cData.getString(cData.getColumnIndex(“fld\U纬度”);
字符串经度=cData.getString(cData.getColumnIndex(“fld_经度”);
ArrayList imagesArray=新的ArrayList();
对于(int i=1;您是否尝试过使用Android AsyncTask?我们不能这样做…如果我必须更改为AsyncTask,那么我必须更改整个代码1。您希望从数据库中获取所有详细信息..对于此,您可以使用Async task,没有问题..然后在后期执行中,您可以使用fillRecipients()方法。实际上,您正在尝试调用progressdialog右侧的线程。因此,您可以使用AsyncTaskAsync Task是一个无痛线程,仅此而已。
public void synchronize(final String id) {
new UploadAsync.execute();
}
//async class to do task in background and notify UI after completion of task in onPost()
class UploadAsync extends AsyncTask<Void, Void, Void>{
ProgressDialog dialog = null;
boolean isUploaded = false;
@Override
protected void onPreExecute() {
// TODO Auto-generated method stub
super.onPreExecute();
ProgressDialog.show(ViewRecipients.this, "", "Uploading this file...", true);
}
@Override
protected Void doInBackground(Void... params) {
try{
mDbHelper.open();
Cursor cData = mDbHelper.fetchRecipientInfo(id);
for(cData.moveToFirst();!cData.isAfterLast();cData.moveToNext()){
String id = cData.getString(cData.getColumnIndex("fld_recipient_id"));
String info = cData.getString(cData.getColumnIndex("fld_info"));
String latitude = cData.getString(cData.getColumnIndex("fld_latitude"));
String longitude = cData.getString(cData.getColumnIndex("fld_longitude"));
ArrayList<String> imagesArray = new ArrayList<String>();
for (int i = 1; i <= 4; i++) {
String image = cData.getString(cData.getColumnIndex("fld_image_url" + i));
if (image != null) {
imagesArray.add(image);
}
}
try {
serverResponseCode = uploadFile(imagesArray, info, latitude, longitude, id);
if (serverResponseCode==200){
mDbHelper.deleteRecipientRecId(id);
isUploaded = true;
}
} catch (IOException e) {
e.printStackTrace();
}
}
cData.close();
mDbHelper.close();
}
catch(Exception e){
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(Void result) {
// TODO Auto-generated method stub
super.onPostExecute(result);
//close dialog
if(dialog != null && dialog.isShowing()){
dialog.dismiss();
}
if(isUploaded){
Toast.makeText(ViewRecipients.this, "File Upload Complete.", Toast.LENGTH_SHORT).show();
fillRecipients();
}
}
}
private void fillRecipients() {
mCursor = mDbHelper.fetchAllRecipientsInfo();
if (mCursor == null) {
System.out.println("empty cursor");
} else {
String[] from = new String[] { MunchaDbAdapter.FLD_RECIPIENT_ID };
int[] to = new int[] { R.id.text1 };
SimpleCursorAdapter recipient = new SimpleCursorAdapter(this,
R.layout.recipient_show, mCursor, from, to);
setListAdapter(recipient);
}
}