2012-09-24 49 views
1

我在我的申請的四個活動 - >乙 - 「ç - > d。處理活動應用通過編程堆疊

我寫了一個我自己的類MyActivity它擴展了Activity類。我寫這個類來處理活動堆棧。這個類有兩個方法addActivitiyTostack()和getActivityFromStack()我用堆棧來存儲活動。

所有其他活動都擴展此類。 當我從一個活動轉移到另一個活動時,它被添加到堆棧中。

當我搬到backword活動被彈出。 我可以正確添加活動來堆疊,但我在彈出活動時遇到問題。

還我已經註銷的所有活動按鈕,這個按鈕我想關閉該應用的OnClick如何實現的呢?任何人都知道如何處理android中的活動堆棧。

這是我的代碼。

package com.example.iprotect; 

import java.util.Enumeration; 
import java.util.Stack; 
import android.app.Activity; 
import android.os.Bundle; 
import android.util.Log; 

public class MyActivity extends Activity { 

    private static Stack<Activity> stack = new Stack<Activity>(); 
    static int top=0; 

    protected void onCreate(Bundle savedInstanceState) { 
     // TODO Auto-generated method stub 
     super.onCreate(savedInstanceState); 
     addActivityToStack(this); 
    } 


    public static void addActivityToStack(MyActivity myActivity) { 
     // TODO Auto-generated method stub 
     stack.push(myActivity); 
     for (int i =0; i< stack.size() ; i++) { 
      Activity act=stack.get(i); 
      Log.i("Element in stack", ""+act); 
     } 
    } 


    protected void onDestroy() { 
     // TODO Auto-generated method stub 
     super.onDestroy(); 
     //getActivityFromStack(); 
     //logoutFromApplication(); 

    } 


    public static void logoutFromApplication() { 
     // TODO Auto-generated method stub 
     Enumeration<Activity> enm=stack.elements(); 

     while(enm.hasMoreElements()) 
     { 
      Activity act=enm.nextElement(); 
      stack.pop(); 
     } 

    } 


    public static Activity getActivityFromStack() { 
     return stack.pop(); 
    } 

} 

A - >

public class WebServiceActivity extends MyActivity{ 

    EditText editText1, editText2; 
    Button button; 
    String response = ""; 
    String email, password; 

    public final Pattern EMAIL_ADDRESS_PATTERN = Pattern 
      .compile("[email protected]+\\.[a-z]+"); 

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

     final EditText editText1 = (EditText) findViewById(R.id.etEmail); 
     final EditText editText2 = (EditText) findViewById(R.id.etPassword); 

     button = (Button) findViewById(R.id.loginButton); 
     button.setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       if (TextUtils.isEmpty(editText1.getText().toString())) { 
        Toast.makeText(getApplicationContext(), 
          "please enter email id", Toast.LENGTH_SHORT).show(); 
       } else if (TextUtils.isEmpty(editText2.getText().toString())) { 

        Toast.makeText(getApplicationContext(), 
          "please enter passwod", Toast.LENGTH_SHORT).show(); 
       } else { 
        Boolean bool = EMAIL_ADDRESS_PATTERN.matcher(
          editText1.getText().toString()).matches(); 
        if (bool == true) { 

        } else { 
         Toast.makeText(getApplicationContext(), 
           "Invalid email id", Toast.LENGTH_SHORT).show(); 
        } 

        email = editText1.getText().toString(); 
        password = editText2.getText().toString(); 
        // final ProgressDialog pd = ProgressDialog.show(
        // WebServiceActivity.this, "Calling webservice...", 

        // "Please wait...", true, false); 

        final ProgressBar bar = (ProgressBar) findViewById(R.id.progressBar2); 
        bar.setVisibility(View.VISIBLE); 

        new AsyncTask<Void, Void, Void>() { 
         String r; 

         protected void onPreExecute() { 
         }; 

         @Override 
         protected Void doInBackground(Void... params) { 
          r = invokeWebService(); 

          return null; 
         }; 

         protected void onPostExecute(Void result) { 
          bar.setVisibility(View.VISIBLE); 

         }; 

        }.execute(); 

       } 
      } 

      private String invokeWebService() { 
       String response = ""; 
       try { 
        WebService webService = new WebService(
          "http://sphinx-solution.com/iProtect/api.php?"); 
        Map<String, String> params = new HashMap<String, String>(); 
        params.put("action", "auth"); 
        params.put("email", email); 
        params.put("password", password); 
        response = webService.WebGet("auth", params); 

        JSONObject jsonObject = new JSONObject(response); 
        String rr = jsonObject.optString("status"); 

        if (TextUtils.equals(rr, "success")) { 
         Log.e("MSG", "status==success"); 
         Intent intent = new Intent(WebServiceActivity.this, 
           SecondActivity.class); 
         //MyActivity.addActivityToStack(WebServiceActivity.this); 
         intent.putExtra("email", email); 
         intent.putExtra("password", password); 
         WebServiceActivity.this.startActivity(intent); 
         finish(); 

        } else { 
         Log.e("MSG", "status ==failed"); 

        } 

       } catch (Exception e) { 
        e.printStackTrace(); 
       } 
       return response; 
      } 
     }); 
    } 
} 

乙 - >

public class SecondActivity extends MyActivity { 

    ListView listView; 
    String email1, password1; 
    ArrayList<JSONStructure> arrayList = new ArrayList<JSONStructure>(); 
    String r; 
    String r1; 
    String tablename; 
    String rows; 
    JSONObject jsonObject; 
    String tablename2; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 

     super.onCreate(savedInstanceState); 
     setContentView(R.layout.second_layout); 

     Intent intent = getIntent(); 
     email1 = intent.getExtras().getString("email"); 
     password1 = intent.getExtras().getString("password"); 

     Button btn1 = (Button) findViewById(R.id.refreshbutton); 
     btn1.setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       final ProgressDialog pd = ProgressDialog.show(
         SecondActivity.this, "Refresh List...", 
         "Please wait...", true, false); 

       new AsyncTask<Void, Void, Void>() { 

        @Override 
        protected Void doInBackground(Void... params) { 
         pd.dismiss(); 
         r = invokeWebService(); 
         return null; 
        } 

        protected void onPostExecute(Void result) { 
        }; 

       }.execute(); 

      } 
     }); 

     Button btn = (Button) findViewById(R.id.logoutbutton); 

     btn.setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       final ProgressDialog pd = ProgressDialog.show(
         SecondActivity.this, "Calling webservice...", 
         "Please wait...", true, false); 

       new AsyncTask<Void, Void, Void>() { 

        @Override 
        protected Void doInBackground(Void... params) { 
         pd.dismiss(); 
         return null; 
        } 

        @Override 
        protected void onPostExecute(Void result) { 
         Intent intent = new Intent(SecondActivity.this, 
           WebServiceActivity.class); 
         intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
         SecondActivity.this.startActivity(intent); 

        } 

       }.execute(); 

      } 

     }); 

     listView = (ListView) findViewById(R.id.listview1); 

     listView.setOnItemClickListener(new OnItemClickListener() { 
      @Override 
      public void onItemClick(AdapterView<?> adapterView, View view, 
        int position, long id) { 

       JSONStructure jsonstructure = (JSONStructure) listView 
         .getAdapter().getItem(position); 

       final String tablename1 = jsonstructure.getTableName() 
         .toString(); 

       Intent intent = new Intent(SecondActivity.this, 
         ProgressBarActivity.class); 
       //MyActivity.addActivityToStack(SecondActivity.this); 

       intent.putExtra("tablename", tablename1); 
       intent.putExtra("Rows", rows); 
       intent.putExtra("email", email1); 
       intent.putExtra("password", password1); 

       SecondActivity.this.startActivity(intent); 

      } 

     }); 

     new AsyncTask<Void, Void, Void>() { 

      @Override 
      protected void onPreExecute() { 

       super.onPreExecute(); 
      } 

      @Override 
      protected Void doInBackground(Void... params) { 
       r = invokeWebService(); 

       try { 
        JSONArray jsonArray = new JSONArray(); 
        JSONObject jsonObject = new JSONObject(r); 
        jsonArray = jsonObject.getJSONArray("Records"); 

        for (int i = 0; i < jsonArray.length(); i++) { 
         JSONObject c = jsonArray.getJSONObject(i); 
         tablename = c.optString("TABLE NAME"); 
         rows = c.optString("Rows"); 
         JSONStructure jsonStructure = new JSONStructure(); 
         jsonStructure.setTableName(tablename); 
         jsonStructure.setRows(rows); 
         arrayList.add(jsonStructure); 
        } 

       } catch (Exception e) { 
        e.printStackTrace(); 
       } 

       return null; 

      } 

      @Override 
      protected void onPostExecute(Void result) { 
       if (arrayList != null && arrayList.size() > 0) { 

        MyAdapter adapter = new MyAdapter(SecondActivity.this, 
          arrayList); 
        listView.setAdapter(adapter); 
       } 
      } 

     }.execute(); 

    } 

    private String invokeWebService() { 
     String response = ""; 
     try { 
      WebService webService = new WebService(
        "http://sphinx-solution.com/iProtect/api.php?"); 
      Map<String, String> params = new HashMap<String, String>(); 
      params.put("action", "getTables"); 
      params.put("email", email1); 
      params.put("password", password1); 
      response = webService.WebGet("getTables", params); 

     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
     return response; 
    } 

} 

Ç - >

public class ThirdActivity extends MyActivity { 
    String tablename1, row1, json1; 
    ArrayList<JSONStructure> arrayList = new ArrayList<JSONStructure>(); 

    JSONArray jsonArray, jsonArray2; 
    JSONObject jsonObject; 
    String row; 
    String email1, password1; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 

     super.onCreate(savedInstanceState); 

     setContentView(R.layout.third_layout); 

     ListView listView = (ListView) findViewById(R.id.listview2); 

     TextView textView = (TextView) findViewById(R.id.title_textview); 

     Intent intent = getIntent(); 
     tablename1 = intent.getExtras().getString("tablename"); 
     row = intent.getExtras().getString("Rows"); 
     textView.setText(tablename1); 
     json1 = intent.getExtras().getString("Json"); 
     email1 = intent.getExtras().getString("email"); 
     password1 = intent.getExtras().getString("password"); 

     new AsyncTask<Void, Void, Void>() { 

      @Override 
      protected Void doInBackground(Void... params) { 

       return null; 
      } 

      @Override 
      protected void onPostExecute(Void result) { 

       Button button = (Button) findViewById(R.id.goback); 
       button.setOnClickListener(new OnClickListener() { 

        @Override 
        public void onClick(View v) { 

         Intent intent = new Intent(ThirdActivity.this, 
           SecondActivity.class); 
         MyActivity.getActivityFromStack(); 
         intent.putExtra("email", email1); 
         intent.putExtra("password", password1); 
         intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
         ThirdActivity.this.startActivity(intent); 

        } 
       }); 

      } 

     }.execute(); 

     listView.setOnItemClickListener(new OnItemClickListener() { 

      @Override 
      public void onItemClick(AdapterView<?> adapterView, View view, 
        final int position, long id) { 
       final ProgressDialog pd = ProgressDialog.show(
         ThirdActivity.this, "Calling webservice...", 
         "Please wait...", true, false); 

       new AsyncTask<Void, Void, Void>() { 

        @Override 
        protected Void doInBackground(Void... paramArrayOfParams) { 

         pd.dismiss(); 

         try { 

          jsonObject = new JSONObject(json1); 

         } catch (Exception e) { 
          e.printStackTrace(); 
         } 

         return null; 
        } 

        @Override 
        protected void onPostExecute(Void result) { 
         Intent intent = new Intent(ThirdActivity.this, 
           FinalActivity.class); 
         //MyActivity.addActivityToStack(ThirdActivity.this); 
         intent.putExtra("tablename", tablename1); 
         intent.putExtra("Json", jsonObject.toString()); 
         intent.putExtra("Row", position); 
         intent.putExtra("email", email1); 
         intent.putExtra("password", password1); 
         ThirdActivity.this.startActivity(intent); 

        } 

       }.execute(); 

      } 

     }); 

     try { 

      JSONObject jsonObject = new JSONObject(json1); 
      JSONArray jsonArray = new JSONArray(); 
      jsonArray = jsonObject.getJSONArray("FirstThree"); 
      jsonArray2 = jsonObject.getJSONArray("Color"); 

      for (int i = 0; i < jsonArray.length(); i++) { 

       JSONObject c = jsonArray.getJSONObject(i); 
       String one = c.optString("One"); 
       String two = c.optString("Two"); 
       String three = c.optString("Three"); 

       JSONObject c1 = jsonArray2.getJSONObject(i); 

       String color = c1.optString("color"); 

       JSONStructure jsonStructure = new JSONStructure(); 
       jsonStructure.column1 = one; 
       jsonStructure.column2 = two; 
       jsonStructure.column3 = three; 
       jsonStructure.setColumn1(one); 
       jsonStructure.setColumn2(two); 
       jsonStructure.setColumn3(three); 
       jsonStructure.setColor(color); 

       arrayList.add(jsonStructure); 
       Log.e("one", c.optString("One")); 
       Log.e("two", c.optString("Two")); 
       Log.e("three", c.optString("Three")); 
       Log.e("color", c1.optString("color")); 

      } 

     } catch (Exception e) { 
      e.printStackTrace(); 

     } 

     if (arrayList != null && arrayList.size() > 0) { 

      MyAdapter1 adapter1 = new MyAdapter1(ThirdActivity.this, arrayList); 
      listView.setAdapter(adapter1); 

     } 

     Button btn = (Button) findViewById(R.id.logoutbutton); 

     btn.setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       final ProgressDialog pd = ProgressDialog.show(
         ThirdActivity.this, "Calling webservice...", 
         "Please wait...", true, false); 

       new AsyncTask<Void, Void, Void>() { 

        @Override 
        protected Void doInBackground(Void... params) { 
         pd.dismiss(); 
         return null; 
        } 

        @Override 
        protected void onPostExecute(Void result) { 
         Intent intent = new Intent(ThirdActivity.this, 
           WebServiceActivity.class); 
         intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
         ThirdActivity.this.startActivity(intent); 
         super.onPostExecute(result); 
        } 

       }.execute(); 

      } 

     }); 

    } 

} 

有人已經quetion疑問隨時問?

回答

1

假設你需要這個堆棧僅用於註銷功能,還有更好的方法。改用廣播。在MyActivity.onCreate中註冊一個BroadcastReceiver。接收者應該調用活動的完成()。從按鈕的點擊監聽器發送廣播(btn1?該按鈕有什麼作用?無法從名稱中猜出;需要更好的名稱;))。而已。

+0

右邊的按鈕是用於註銷行動,左鍵是回來的行動。 – Ani

+0

:)我的意思是良好的編碼風格:正確的命名。無論如何,廣播非常簡單 - 絕對比在活動生命週期中進行黑客攻擊更容易。 –

+0

k.Its只是我的學習應用程序,這就是爲什麼我不優先考慮它?順便說一句,我已經設法使用我自己的ACTIVITY STACK註銷。 – Ani