在AsyncTask中访问浮点值

时间:2011-08-18 09:44:51

标签: java android opengl-es android-asynctask

这是一个伪代码:

class MoWeFi extends Activity

    static TouchSurfaceView TSV;
    static DrawRenderer mRenderer;
    static UserInterface mUI;
    DownloadData mDD = new DownloadData();
    static float zoom = 1.f;

    mDD.execute();
    mUI = new UserInterface();
    setContentView(mUI);

class UserInterface extends LinearLayout MoWeFi.TSV = new TouchSurfaceView(context); MoWeFi.mRenderer = new DrawRenderer(context); MoWeFi.TSV.setRenderer(MoWeFi.mRenderer); MoWeFi.TSV.setRenderMode(GLSurfaceView.RENDERMODE_WHEN_DIRTY); this.addView(MoWeFi.TSV);

    TextView tv = new TextView(context);
    this.addView(tv);

    TextView tv2 = new TextView(context);
    this.addView(tv2);

class DownloadData extends AsyncTask protected Void doInBackground(){ do{ this.publishProgress(); try{Thread.sleep(1000);catch (InterruptedException e){} }while(running) } @Override protected void onProgressUpdate(){ //... MoWeFi.TSV.requestRender(); MoWeFi.mUI.tv.setText("zoom="+MoWeFi.zoom); // IT DOES NOT WORK !!! ALWAYS GET 1.f. }

class TouchSurfaceView extends GLSurfaceView gl.glTranslatef(0, 0, -1.f / MoWeFi.zoom); // IT WORKS !!!

class DrawRenderer implements GLSurfaceView.Renderer //Pinch-zoom ... MoWeFi.zoom *= detector.getScaleFactor(); MoWeFi.zoom = Math.max(0.5f, Math.min(MoWeFi.zoom, 5.0f));

MoWeFi.mUI.tv2.setText("zoom="+MoWeFi.zoom); // IT WORKS !!!

所以没有任何错误。只是无法在任何地方访问我的缩放变量。 我是Java的新手,我肯定错过了重要的概念。

编辑在第一行添加浮动

编辑2 在asyncTask中添加publishProgress

编辑3 logcat不显示任何内容

3 个答案:

答案 0 :(得分:2)

您确定AsyncTask在值更改后访问该属性吗?如果是,AsyncTask在一个单独的线程上运行代码,那么您可能面临竞争条件,其中一个线程中更新的值在另一个线程中尚未可用。尝试将zoom属性设为volatile:

 public static volatile float zoom = 1.f;

或使用synchronized get / set方法来变异和访问属性。

答案 1 :(得分:0)

public static zoom = 1.f;

更改此public static float zoom = 1.f;

答案 2 :(得分:0)

缩放变量的声明存在问题。你必须明确地告诉java编译器什么是zoom,它是String,Integer,Float等。

宣言应该如下:

public static int zoom = 100;表示整数值。

public static String zoom = "My String";表示字符串值。

public static double zoom = 1.4;表示双值等等。