我有做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;
}
}
錯誤訊息:
請大家指教,該如何修改,謝謝
錯誤訊息呢?
已補上
你貼出的錯誤訊息不完整,
不過有看到一些關鍵字,
Unable to start Activity,
最後提到NullPointerException,
可能是某個變數(指標?)是Null導致錯誤,
導致整個程式崩潰...
遇到問題要先分析錯誤訊息,
很多答案都在裡面...
而且仔細看錯誤訊息,
一定可以找到錯誤發生在哪一行...
看了這兩行,然後猜測
Intent intent=this.getIntent();
Bundle bundle=intent.getExtras();
你是不是第一次執行就出錯了XD
我知道錯在這行,因為只要加這行就會錯
if(!bundle.getString("ACCOUNT").equals(null) ){
//加入這行就會當機,可是我有先判斷他是不是null了耶....
account=bundle.getString("ACCOUNT");
}
因為我是先到目錄頁,所以他一開始會讀不到login.java傳來的值
但是我不知道該怎麼改.....
我的意思是一開始先別跑這個
Intent intent=this.getIntent();
Bundle bundle=intent.getExtras();
等你確定有進去login.java後再來執行..
行為先定義好...
ant1017
有喔,
Intent intent=this.getIntent();
Bundle bundle=intent.getExtras();
if(!bundle.getString("ACCOUNT").equals(null) ){
//加入這行就會當機,可是我有先判斷他是不是null了耶....
account=bundle.getString("ACCOUNT");
}
以上碼掉之後,跑得很順,能進入login.java,也會跟我說登入成功....
再來就是上述程式,簡稱code
必須在哪個時機點觸發...
一定是在你按下購買鍵,也就是說"觸發"再讓它執行
if(bool)
code
類似這樣的行為,試看看
試著更改一下行為,你已經知道重點在於code
所以只要將它出場的位置調整一下就好了
你搜尋一下,
畫面載入完成再執行 的語法 要怎麼下,
應該是bundle是NULL導致的問題,
你應該在畫面載入完成之後,
再去做這個動作,
要不然很多東西都會是NULL...
簡單來說,
因為bundle是NULL
當你調用bundle底下的方法,
也就是bundle.getString的時候就出錯了...
所以後面那一串寫得再好都沒有用...
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
以解決問題,謝謝
我也是到處碰壁,然後停滯不前
但有些問題可以用些方法避開,當然可以加快你的腳步,但別忘記,你目前問題真正的原因,小魚已經幫你解釋了,你要去做些功課...
ant1017
其實也沒那麼難,
那應該是你當時觀念錯誤,
很多東西觀念清楚就會知道該怎麼做,
或是該往哪個地方找資料了,
有時候多問前輩,
或是能有志同道合的戰友討論,
或是多看板上別人的問題,
也許觀念就會比較清楚了.
為了賺點點數(有什麼用...)
我發個簡單基本觀念的文章好了...
發完了
[觀念] 前端與後端