0

私は現在、アクティビティの最後にいくつかの単純な変数を計算し、次のアクティビティの開始時にそれらをサーバーにアップロードするアプリを開発しています。

@Override
public void onCreate(Bundle savedInstanceState){
    super.onCreate(savedInstanceState);
    setContentView(R.layout.fairwell);
    setTimer();


}

@Override
   public void onResume(){
        super.onResume();
        is_active = true;
        Log.d(TAG, "onResume enter FA");
        //Download Variable Ids start
        int WeightId = postmeasurements.getStatisticId(postmeasurements.mHCAW);     
        int BFPId = postmeasurements.getStatisticId(postmeasurements.mHCABFP);
        int HydId = postmeasurements.getStatisticId(postmeasurements.mHCAHyd);
        int MuscMass = postmeasurements.getStatisticId(postmeasurements.mHCAMM);
        //Download Variable Ids End
        Log.w("ANTApp", "WeightId is:  " + WeightId);
        Log.w("ANTApp", "BFPId is:  " + BFPId);
        Log.w("ANTApp", "HydId is:  " + HydId);
        Log.w("ANTApp", "MuscMass is:  " + MuscMass);
        //Post Measurements to Server Start
        postmeasurements.postScaleMeasurements(WeightId, PostMeasurements.Weight);
        postmeasurements.postScaleMeasurements(BFPId, PostMeasurements.BFP);
        postmeasurements.postScaleMeasurements(HydId, PostMeasurements.Hyd);
        postmeasurements.postScaleMeasurements(MuscMass, PostMeasurements.MuscMass); 
        //Post Measurements to Server End
        WindowManager.LayoutParams lp = getWindow().getAttributes();
        lp.screenBrightness = 100 / 112.0f;
        getWindow().setAttributes(lp);

        setTimer();

        Log.d(TAG, "onResume exit FA");
   }

ここで私が抱えている問題は、すべての測定値がアップロードされるまで、各アクティビティの間に黒い画面が表示されることです。ダウンロードとアップロードの各メソッドは、Httppost を使用して独自のバックグラウンド スレッドで実行されます。

public void postScaleMeasurements(int StatId, double Value){
   //int Id = 0;
   String result = "";
    //the serial data to send
     final ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
     nameValuePairs.add(new BasicNameValuePair("s", mDeviceId));
     nameValuePairs.add(new BasicNameValuePair("statisticId", Integer.toString(StatId)));
     nameValuePairs.add(new BasicNameValuePair("userId", Integer.toString(mHCAId)));
     nameValuePairs.add(new BasicNameValuePair("statisticValue", Double.toString(Value)));
     InputStream is = null;

     Thread PostScaleData = new Thread(){
         public void run(){
             try{
                 HttpClient httpclient = new DefaultHttpClient();
                 HttpPost httppost = new HttpPost("https://www.website.com/app/postStatisticValue.php");
                 httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
                 HttpResponse response = httpclient.execute(httppost);
                 HttpEntity entity = response.getEntity();
                 streamresponse = entity.getContent();
             }catch(Exception e){
                 Log.e(TAG, "Error in http connection (verifytablet) "+e.toString());
             }
         }
     };

     PostScaleData.start();
     try {
        PostScaleData.join(10000);
    } catch (InterruptedException e1) {
        // TODO Auto-generated catch block
        e1.printStackTrace();
    }

まだ約 1 ~ 4 秒間、黒い画面が表示されます。私が本当に望んでいるのは、測定値がアップロードされる前にレイアウト描画プロセスが終了することです.

皆様のすばらしいご支援をよろしくお願いいたします。

4

1 に答える 1

0

AsyncTaskを使用することをお勧めします。

于 2013-08-17T05:08:04.117 に答える