iT邦幫忙

0

android Intent轉跳問題

  • 分享至 

  • xImage

我有做2個頁面,一個是目錄頁面,一個是登入頁面
我想讓使用者看看目錄,若要購買(按下購買鍵)
他就會跳到登入頁面,若發現她已經登入,就可直接訂購

但現在我發現,我這樣做都會當掉
MainActivity.java

public class MainActivity extends Activity {
   ArrayList<Team> teams = new ArrayList<Team>();
    ListView listview;
    String account="";
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

        Intent intent=this.getIntent();
        Bundle bundle=intent.getExtras();
        if(!bundle.getString("ACCOUNT").equals(null) ){
        //加入這行就會當機,可是我有先判斷他是不是null了耶....
            account=bundle.getString("ACCOUNT");
           }
     listview = (ListView) findViewById(R.id.listview);
     listview.setOnItemClickListener(lvonclick);
    Team team =new Team("my_product","price");
     teams.add(team);
      team = new Team("fish", "77");//產品
      teams.add(team); 
          final TeamsAdapter adapter = new TeamsAdapter(this, R.layout.team, teams);
            listview.setAdapter(adapter);
   }

         private ListView.OnItemClickListener lvonclick=
                    new ListView.OnItemClickListener(){
                    @Override
                    public void onItemClick(AdapterView<?> parent, View v,
                            int position, long id) {
                        String sel=parent.getItemAtPosition(position).toString();   
                     mydialog(sel);

                    }
                };

private void mydialog(String str1){
    new AlertDialog.Builder(MainActivity.this)
    .setTitle("product")
    .setIcon(R.drawable.ic_launcher)
    .setMessage(str1)
    .setPositiveButton("buy", new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialoginterface, int i)
        {
            if(account==""){
                Intent intent2=new Intent();//jump to login page
            intent2.setClass(MainActivity.this,Login.class);
            startActivity(intent2);
            }
        }
    })
    .show(); 
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
  getMenuInflater().inflate(R.menu.main, menu);
    return true;
}
}

login.java

public class Login extends Activity {//登入畫面
 private TextView acc,pwd;
 private  Button  btn;
 @Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.login);
      StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder()             
     acc=(TextView)findViewById(R.id.acc);
     pwd=(TextView)findViewById(R.id.pwd);
     btn=(Button)findViewById(R.id.btn);
     btn.setOnClickListener(btnlogin);


}

private Button.OnClickListener btnlogin=new Button.OnClickListener(){
    public void onClick(View v){
        String account=acc.getText().toString();
        String passwd=pwd.getText().toString();
            Intent intent= new Intent();
                intent.setClass(Login.this, MainActivity.class);
                Bundle bundle=new Bundle();
                if(account=="123")
                {
                  bundle.putString("ACCOUNT", account);
                  intent.putExtras(bundle);
                  startActivity(intent);
                }
    }
};
@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.main, menu);
    return true;
}
}

錯誤訊息:
https://ithelp.ithome.com.tw/upload/images/20190426/20102983QMRZaEG6hT.png
請大家指教,該如何修改,謝謝

圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 個回答

0
小魚
iT邦大師 1 級 ‧ 2019-04-26 14:51:53
最佳解答

錯誤訊息呢?

看更多先前的回應...收起先前的回應...
神威 iT邦研究生 4 級 ‧ 2019-04-26 14:57:59 檢舉

已補上

小魚 iT邦大師 1 級 ‧ 2019-04-26 15:07:14 檢舉

你貼出的錯誤訊息不完整,
不過有看到一些關鍵字,
Unable to start Activity,
最後提到NullPointerException,
可能是某個變數(指標?)是Null導致錯誤,
導致整個程式崩潰...

遇到問題要先分析錯誤訊息,
很多答案都在裡面...

而且仔細看錯誤訊息,
一定可以找到錯誤發生在哪一行...

ant1017 iT邦新手 2 級 ‧ 2019-04-26 15:11:44 檢舉

看了這兩行,然後猜測
Intent intent=this.getIntent();
Bundle bundle=intent.getExtras();
你是不是第一次執行就出錯了XD

神威 iT邦研究生 4 級 ‧ 2019-04-26 15:13:02 檢舉

我知道錯在這行,因為只要加這行就會錯

if(!bundle.getString("ACCOUNT").equals(null) ){
        //加入這行就會當機,可是我有先判斷他是不是null了耶....
            account=bundle.getString("ACCOUNT");
           }

因為我是先到目錄頁,所以他一開始會讀不到login.java傳來的值
但是我不知道該怎麼改.....

ant1017 iT邦新手 2 級 ‧ 2019-04-26 15:19:00 檢舉

我的意思是一開始先別跑這個
Intent intent=this.getIntent();
Bundle bundle=intent.getExtras();
等你確定有進去login.java後再來執行..
行為先定義好...

神威 iT邦研究生 4 級 ‧ 2019-04-26 15:22:02 檢舉

ant1017
有喔,

Intent intent=this.getIntent();
Bundle bundle=intent.getExtras();
if(!bundle.getString("ACCOUNT").equals(null) ){
        //加入這行就會當機,可是我有先判斷他是不是null了耶....
            account=bundle.getString("ACCOUNT");
           }

以上碼掉之後,跑得很順,能進入login.java,也會跟我說登入成功....

ant1017 iT邦新手 2 級 ‧ 2019-04-26 15:49:38 檢舉

再來就是上述程式,簡稱code
必須在哪個時機點觸發...
一定是在你按下購買鍵,也就是說"觸發"再讓它執行
if(bool)
code
類似這樣的行為,試看看
試著更改一下行為,你已經知道重點在於code
所以只要將它出場的位置調整一下就好了

小魚 iT邦大師 1 級 ‧ 2019-04-26 15:54:48 檢舉

你搜尋一下,
畫面載入完成再執行 的語法 要怎麼下,
應該是bundle是NULL導致的問題,
你應該在畫面載入完成之後,
再去做這個動作,
要不然很多東西都會是NULL...

簡單來說,
因為bundle是NULL
當你調用bundle底下的方法,
也就是bundle.getString的時候就出錯了...
所以後面那一串寫得再好都沒有用...

神威 iT邦研究生 4 級 ‧ 2019-04-26 16:22:10 檢舉

ant1017
我有試著把搭加到button鍵中,但是還是一樣,雖然可以看到頁面,但是當我要點選選課時,他又會閃退了....

 private ListView.OnItemClickListener lvonclick=
new ListView.OnItemClickListener(){@Override
public void onItemClick(AdapterView<?> parent, View v,int position, long id) {		
String sel=parent.getItemAtPosition(position).toString();  
		    	   	 mydialog("產品",sel);	
                        }
		    	    };
    private void mydialog(String str1,String str2){
    	new AlertDialog.Builder(MainActivity.this)
		.setTitle(str1)
		.setIcon(R.drawable.ic_launcher)
		.setMessage(str2)
		.setPositiveButton("選課", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialoginterface, int i)
{
 Intent intent=this.getIntent();
			        Bundle bundle=intent.getExtras();
			        if(!bundle.getString("ACCOUNT").equals(null) ){
			        	account=bundle.getString("ACCOUNT");
			          
			        }
				if(account==""){
					Intent intent2=new Intent();
	intent2.setClass(MainActivity.this,Login.class);
				startActivity(intent2);
				}
private Intent getIntent() {return null;}
  
		})
		
  		.show(); 
    }
ant1017 iT邦新手 2 級 ‧ 2019-04-26 16:30:03 檢舉

看來你還是不太了解我表達的意思/images/emoticon/emoticon20.gif
其實這就是開發經驗,我以前也有過類似的問題..
後來採用這些方法後,讓我避開了不少坑
只能說...布林函數很好用

神威 iT邦研究生 4 級 ‧ 2019-04-26 16:44:23 檢舉

ant1017
以解決問題,謝謝

ant1017 iT邦新手 2 級 ‧ 2019-04-26 16:51:54 檢舉

我也是到處碰壁,然後停滯不前/images/emoticon/emoticon13.gif
但有些問題可以用些方法避開,當然可以加快你的腳步,但別忘記,你目前問題真正的原因,小魚已經幫你解釋了,你要去做些功課...

小魚 iT邦大師 1 級 ‧ 2019-04-26 17:20:37 檢舉

ant1017
其實也沒那麼難,
那應該是你當時觀念錯誤,
很多東西觀念清楚就會知道該怎麼做,
或是該往哪個地方找資料了,
有時候多問前輩,
或是能有志同道合的戰友討論,
或是多看板上別人的問題,
也許觀念就會比較清楚了.

為了賺點點數(有什麼用...)
我發個簡單基本觀念的文章好了...

發完了
[觀念] 前端與後端

我要發表回答

立即登入回答