2017-07-03 8 views
0

私はログインアクティビティを作成しました。 setContentViewがメインアクティビティへの静的な参照なしでAndroid上で動作していません

public class LoginActivity extends Activity { 

は、私はそれのためにActivityクラスを拡張し、このようのonCreateメソッドをオーバーライド:

@Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     setContentView(R.layout.activity_login); 

     this.username = (TextView) findViewById(R.id.loginUsername); 
     this.password = (TextView) findViewById(R.id.passwordLogin); 

     this.username.setInputType(InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS); 

     ImageView banner = (ImageView) findViewById(R.id.imageView5); 
     banner.setImageResource(R.drawable.banner); 
    } 

問題が..です何もシミュレータ上で現れていません。

しかし、これは完全に正常に動作します:

MainActivity.getInstance().setContentView(R.layout.activity_login); 

が、使用すると、頻繁にクラッシュが発生します非常にパッドの練習です。何が間違っていますか?コンソールエラーは表示されません。

LoginActivityクラス:

package flarehubpe.xflare.flarehub; 

import android.app.Activity; 
import android.app.AlertDialog; 
import android.content.DialogInterface; 
import android.text.InputType; 
import android.widget.ImageView; 
import android.widget.TextView; 
import android.os.Bundle; 

import flarehubpe.xflare.flarehub.utils.jsonData; 

import org.json.JSONException; 

public class LoginActivity extends Activity { 

    public TextView username; 
    public TextView password; 

    public boolean authenticated = false; 
    public ProfileActivity profileManager; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     setContentView(R.layout.activity_login); 

     this.username = (TextView) findViewById(R.id.loginUsername); 
     this.password = (TextView) findViewById(R.id.passwordLogin); 

     this.username.setInputType(InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS); 

     ImageView banner = (ImageView) findViewById(R.id.imageView5); 
     banner.setImageResource(R.drawable.banner); 
    } 

    public void spawnToDevice(){ 
    } 

    public void login(){ 
     try { 
      jsonData data = RestAPI.getResponse("http://xxx/login.php?username=" + this.username.getText().toString() + "&password=" + this.password.getText().toString()); 
      if(data == null){ 
       sendAlert("Error", "Something went wrong... This is embarrassing. Please contact @ on twitter.","Ok"); 
       return; 
      } 
      if(!data.getString("error").contains("false")){ 
       sendAlert("Uh oh", data.getString("error"), "Ok"); 
       return; 
      } 
      sendAlert("Success!", "You are now logged in.", "Ok"); 
      createProfile(this.username.getText().toString(), this.password.getText().toString(), data.getInteger("coins"), data.getInteger("rankid"), data.getInteger("wins"), data.getInteger("kills"), data.getInteger("deaths")); 
      this.username.setText(""); 
      this.password.setText(""); 
      this.authenticated = true; 
     } catch (JSONException e) { 
      e.printStackTrace(); 
     } 
    } 

    public void createProfile(String username, String password, Integer coins, Integer randid, Integer wins, Integer kills, Integer deaths){ 
     this.profileManager = new ProfileActivity(username, password, coins, randid, wins, kills, deaths); 
    } 

    public void sendAlert(String title, String content, String buttonText) { 
     AlertDialog alertDialog = new AlertDialog.Builder(this).create(); 
     alertDialog.setTitle(title); 
     alertDialog.setMessage(content); 
     alertDialog.setButton(AlertDialog.BUTTON_NEUTRAL, buttonText, 
       new DialogInterface.OnClickListener() { 
        public void onClick(DialogInterface dialog, int which) { 
         dialog.dismiss(); 
        } 
       }); 
     alertDialog.show(); 
    } 

    public void logout(){ 
     this.authenticated = false; 
     this.spawnToDevice(); 
    } 
} 
+0

「問題は..です何もショーシミュレータ上で起動します。 - 'loginActivity'を表示するために' startActivity() 'を呼び出したことはありますか? "しかし、非常にパッドのプラクティスを使用して頻繁にクラッシュを引き起こす" - アクティビティへの '静的な参照を持つことは悪い習慣です。 – CommonsWare

+1

'MainActivity'が動作しているので、あなたはあなたの' LoginActivity'にあり、MainActivityにはありませんか? – tyczj

答えて

0

たぶん、あなたがあなたの活動のコンテキストを持っている必要がありactivity_login.xml

の間違ったコンテキストを使用します。

tools:context=".package_name.LoginActivity" 
関連する問題