0

新しいビューを読み込もうとすると、サービスの応答を得る前に黒い画面が表示されます。この問題を解決するために、AsyncTask を使用して問題を解決しましたが、問題はサービスから出力を得られないことです。以下は私のコードです。

class GetInfo extends AsyncTask<String, String, String> {
    /**
             * Before starting background thread Show Progress Dialog
             * */
            @Override
            protected void onPreExecute() {
                super.onPreExecute();
                pDialog = new ProgressDialog(NewHomeView.this);
                pDialog.setMessage("Loading...");
                pDialog.setIndeterminate(false);
                pDialog.setCancelable(true);
                pDialog.show();
            }

            /**
             * Creating player
             * */
            protected String doInBackground(String... args) {



                        goal = MMBusinessFacade.baseURL;
                        goal = goal + "getGoal.jsp?acno=" + acnt;
                        goal = goal.replaceAll(" ", "%20");
                        res = MMBusinessFacade.getXML(goal, NewHomeView.this);
                        NewHomeView.res1 = gp.getOutput(res);
                        System.out.println("URL:" + goal);
                        System.out.println("Output:" + res1);


                        /********************************************************************************************/
                        spnrshi1 = MMBusinessFacade.baseURL;
                        spnrshi1 = spnrshi1 + "getFunds.jsp?acno=" + acnt;
                        spnrshi1 = spnrshi1.replaceAll(" ", "%20");
                        res = MMBusinessFacade.getXML(spnrshi1, NewHomeView.this);
                        System.out.println("URL" + spnrshi1);
                        list1 = fdp.getOutputOrg1(res);
                        list = fdp.getOutputOrg(res);

                        if (list1 != null && list1.size() > 0) {
                            for (int j = 0; j < list1.size(); j++) {
                                FundsAvailable prpobj = (FundsAvailable) list1.get(j);
                                FundDetail prpobj1 = (FundDetail) list.get(j);
                                ite = prpobj.getAmount() + "  " + prpobj.getCurrency();
                                System.out.println("Item:" + ite);
                                NewHomeView.favail = prpobj1.getAmount() + " " + prpobj1.getCurrency();
                                NewHomeView.cur = prpobj.getCurrency();
                            }
                        }



                return null;
      }
            /**
             * After completing background task Dismiss the progress dialog
             * **/
            protected void onPostExecute(String file_url) 
            {
                // dismiss the dialog once done
                pDialog.dismiss();
                gl.setText(NewHomeView.res1);
                avilfund.setText(NewHomeView.ite);
                fndraised.setText(NewHomeView.favail);
            }

        }

貴重なアドバイスをください。ありがとう

4

2 に答える 2

0

私は思う:UはdoInBackground関数でrunOnUiThreadを使用すべきではありません。そうしないと、doInBackgroundはすぐに戻ります。正しいコード:

protected String doInBackground(String... args) {

                        goal = MMBusinessFacade.baseURL;
                        goal = goal + "getGoal.jsp?acno=" + acnt;
                        goal = goal.replaceAll(" ", "%20");
                        res = MMBusinessFacade.getXML(goal, NewHomeView.this);
                        NewHomeView.res1 = gp.getOutput(res);
                        System.out.println("URL:" + goal);
                        System.out.println("Output:" + res1);


                        /********************************************************************************************/
                        spnrshi1 = MMBusinessFacade.baseURL;
                        spnrshi1 = spnrshi1 + "getFunds.jsp?acno=" + acnt;
                        spnrshi1 = spnrshi1.replaceAll(" ", "%20");
                        res = MMBusinessFacade.getXML(spnrshi1, NewHomeView.this);
                        System.out.println("URL" + spnrshi1);
                        list1 = fdp.getOutputOrg1(res);
                        list = fdp.getOutputOrg(res);

                        if (list1 != null && list1.size() > 0) {
                            for (int j = 0; j < list1.size(); j++) {
                                FundsAvailable prpobj = (FundsAvailable) list1.get(j);
                                FundDetail prpobj1 = (FundDetail) list.get(j);
                                ite = prpobj.getAmount() + "  " + prpobj.getCurrency();
                                System.out.println("Item:" + ite);
                                NewHomeView.favail = prpobj1.getAmount() + " " + prpobj1.getCurrency();
                                NewHomeView.cur = prpobj.getCurrency();
                            }
                        }

           }
      }
于 2012-07-27T09:02:25.373 に答える
0

で使用runOnUiThreadしないでくださいdoInBackground。AsyncTask の使用への関心が失われます。doInBackground で UI と通信する最良の方法は、進行状況の更新プロセスを使用することです。

aynTask に実装するだけです。

@Override
protected void onProgressUpdate(MyProgressObject... mpo) {
    super.onProgressUpdate(mpo);
    //my UI update here
}

doInBackground呼び出しだけでUIを更新する必要がある場合publishProgress(MyProgressObject mpo)

于 2012-07-27T09:02:51.550 に答える