2016年9月6日 星期二

Android spinner選單設定

private String[] getCarIDs(String tmp)
{
    String[] IDArray;
    try {
        //JSON資料解析
        JSONObject json_read=new JSONObject(tmp);
        JSONArray CarIDsJSON = json_read.getJSONArray("CarIDsJSON");
        IDArray =  new String[CarIDsJSON.length()];
        for (int i = 0; i < IDArray.length; i++) {
            IDArray[i] = CarIDsJSON.getString(i);
        }
    } catch (JSONException e) {
        e.printStackTrace();
        IDArray = new String[0];
    }

    return IDArray;
}


private Runnable  threadGetCarIDs = new Runnable() {
    @Override    public void run() {
        if(httpPostProcess.ReadJSON(httpPostProcess.POST_CarIDs, null)) //從後端抓JSON資料
        {
            if(!httpPostProcess.GetJSONData().equals("")) //有抓到資料
            {
                CarIDsJSONData = httpPostProcess.GetJSONData(); // 取得資料
                String[] carIDArry = getCarIDs(CarIDsJSONData);
                ArrayAdapter<String> IDs;
                IDs = new ArrayAdapter<String>(LoginActivity.this, android.R.layout.simple_spinner_item, carIDArry); //抓取選單內容
                sprCarIDs.setAdapter(IDs);  //設定選單
                //handler.sendEmptyMessage(MSG_GET_CAR_IDs);
            }
        }
    }
};

2016年9月2日 星期五

Android Class間用Content傳Handler

出處

在寫android遊戲或是工具軟體,常常會遇到 View之間 要怎麼切換?
Android.os底下 有一個class 叫 Handler 它能解決這個問題!

Handler能讓 兩個class之間相互傳遞訊息,來寫一段簡單的code可能會比較清楚
例如:

public class MainActivity extends Activity
{
ViewTest vt;
ViewTest2 vt2;
public void onCreate(Bundle savedInstanceState)
{
   super.onCreate(savedInstanceState);   
   vt =new ViewTest(this);
   vt2 =new ViewTest2(this);
   setContentView(vt);
}

Handler hander = new Handler()
{
@Override
public void handleMessage(Message msg)
{
     switch(msg.what)
      {
         case 1: setContentView(vt2);
                 break;
      }
   }
}
}


public class ViewTest extends View
{
  MainActivity context;
  Paint p;
public GameOverView(MainActivity context)
{
 super(context);
     this.context = context;
     p = new Paint();
}
  public void onDraw(Canvas c)
  {
    c.drawText("hello! View",10,10,);
  }

   @Override
public boolean onTouchEvent(MotionEvent e)
{
      if(e.getAction()= =MotionEvent.ACTION_DOWN)
      {
        context.hander.sendEmptyMessage(1);
      }
  return true;
}
}


public class ViewTest2 extends View
{
省略......
}

這段程式碼的意思是:
MainActivity 一開始設定的View 是 ViewTest ,然後,當使用者Touch螢幕
則讓ViewTest藉由MainActivity的Handler物件,發訊息給MainActivity,讓它切換ViewTest2
hander.sendEmptyMessage() 這邊是使用只有一個 int 參數的這個method,
隨意傳一個自訂的int數值,讓main class 去判斷,當傳入值數字正確,則main class做動作。

使用Handler 切換View的方法大致上是這樣!

但是有一點千萬要注意,如果是使用SurfaceView的話,則要注意 Thread狀態,Thread必須要讓它在dead 狀況下
然後,再去切換View,不然程式會出現錯誤。