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);
        }
    }