在我的Samsung Tab S上成功安装我的apk文件后,我尝试打开应用程序,但它会关闭任何想法?

时间:2015-01-07 09:10:59

标签: android android-layout android-activity

我已经在我的三星Galaxy S5上安装了我的应用程序,它工作正常,但当我在平板电脑上安装它时,我尝试打开应用程序,但它崩溃了,必须关闭。

logcat的:

at com.example.driversapp2.app.LoginActivity$2.onClick(LoginActivity.java:74)
        at android.view.View.performClick(View.java:4756)
        at android.view.View.onKeyUp(View.java:8935)
        at android.widget.TextView.onKeyUp(TextView.java:5937)
        at android.view.KeyEvent.dispatch(KeyEvent.java:2633)
        at android.view.View.dispatchKeyEvent(View.java:8338)
        at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1600)
        at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1600)
        at android.widget.ScrollView.dispatchKeyEvent(ScrollView.java:369)
        at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1600)
        at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1600)
        at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1600)
        at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1600)
        at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchKeyEvent(PhoneWindow.java:2306)
        at com.android.internal.policy.impl.PhoneWindow.superDispatchKeyEvent(PhoneWindow.java:1682)
        at android.app.Activity.dispatchKeyEvent(Activity.java:2699)
        at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchKeyEvent(PhoneWindow.java:2221)
        at android.view.ViewRootImpl$ViewPostImeInputStage.processKeyEvent(ViewRootImpl.java:3918)
        at android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:3880)
        at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3449)
        at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3502)
        at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3468)
        at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:3578)
        at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3476)
        at android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:3635)
        at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3449)
        at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3502)
        at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3468)
        at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3476)
        at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3449)
        at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3502)
        at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3468)
        at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:3611)
        at android.view.ViewRootImpl$ImeInputStage.onFinishedInputEvent(ViewRootImpl.java:3772)
        at android.view.inputmethod.InputMethodManager$PendingEvent.run(InputMethodManager.java:2208)
        at android.view.inputmethod.InputMethodManager.invokeFinishedInputEventCallback(InputMethodManager.java:1849)
        at android.view.inputmethod.InputMethodManager.finishedInputEvent(InputMethodManager.java:1840)
        at android.view.inputmethod.InputMethodManager$ImeInputEventSender.onInputEventFinished(InputMethodManager.java:2185)
        at android.view.InputEventSender.dispatchInputEventFinished(InputEventSender.java:141)
        at android.os.MessageQueue.nativePollOnce(Native Method)
        at android.os.MessageQueue.next(MessageQueue.java:143)
        at android.os.Looper.loop(Looper.java:122)
        at android.app.ActivityThread.main(ActivityThread.java:5221)
        at java.lang.reflect.Method.invoke(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:372)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)

徽标活动,它说的是问题:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    this.requestWindowFeature(Window.FEATURE_NO_TITLE);
    setContentView(R.layout.activity_logo);
    ImageView iv_icon = (ImageView) findViewById(R.id.imageButton);
            Animation a = AnimationUtils.loadAnimation(this, R.anim.fade_in);
    a.setFillAfter(true);
    a.reset();
    iv_icon.startAnimation(a);

    Thread loading = new Thread() {
        public void run() {
            try {
                sleep(3000);
                Intent main = new Intent(Logo.this, LoginActivity.class);
                startActivity(main);
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                finish();
            }
            Logo.this.overridePendingTransition(R.anim.abc_fade_in, R.anim.abc_fade_out);
        }
    };

    loading.start();
}

@Override
public void onBackPressed() {
    Logo.this.finish();
    overridePendingTransition(R.anim.abc_fade_in, R.anim.abc_fade_out);
}

我已多次查看代码,无法解决问题, 我最近添加了一项新活动,但没有更改徽标活动中的任何代码,

这是另一个Logcat:

java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.driversapp2.app/com.example.driversapp2.app.Logo}: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.ImageView.startAnimation(android.view.animation.Animation)' on a null object reference
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2298)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2360)
        at android.app.ActivityThread.access$800(ActivityThread.java:144)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1278)
        at android.os.Handler.dispatchMessage(Handler.java:102)
        at android.os.Looper.loop(Looper.java:135)
        at android.app.ActivityThread.main(ActivityThread.java:5221)
        at java.lang.reflect.Method.invoke(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:372)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)
 Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.ImageView.startAnimation(android.view.animation.Animation)' on a null object reference
        at com.example.driversapp2.app.Logo.onCreate(Logo.java:21)
        at android.app.Activity.performCreate(Activity.java:5933)
        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1105)
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2251)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2360)
        at android.app.ActivityThread.access$800(ActivityThread.java:144)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1278)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:135)
        at java.lang.reflect.Method.invoke(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:372)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)

登录活动:

 @Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    this.requestWindowFeature(Window.FEATURE_NO_TITLE);
    setContentView(R.layout.activity_login);
    LoginActivity.this.overridePendingTransition(R.anim.abc_fade_in, R.anim.abc_fade_out);

    inputUsername = (EditText) findViewById(R.id.uname);
    inputEmail = (EditText) findViewById(R.id.email);
    inputPassword = (EditText) findViewById(R.id.pword);
    Btnregister = (Button) findViewById(R.id.registerbtn);
    btnLogin = (Button) findViewById(R.id.login);
    loginErrorMsg = (TextView) findViewById(R.id.loginErrorMsg);
    Btnregister.setOnClickListener(new View.OnClickListener() {
        public void onClick(View view) {
            Intent myIntent = new Intent(view.getContext(), Register.class);
            startActivityForResult(myIntent, 0);

        }});

    btnLogin.setOnClickListener(new View.OnClickListener() {

        public void onClick(View view) {

            if (  ( !inputUsername.getText().toString().equals("")) && ( !inputPassword.getText().toString().equals("")) )
            {
                NetAsync(view);
            }
            else if ( ( !inputEmail.getText().toString().equals("")) )
            {
                Toast.makeText(getApplicationContext(),
                        "Password field empty", Toast.LENGTH_SHORT).show();
            }
            else if ( ( !inputPassword.getText().toString().equals("")) )
            {
                Toast.makeText(getApplicationContext(),
                        "Email field empty", Toast.LENGTH_SHORT).show();
            }
            else
            {
                Toast.makeText(getApplicationContext(),
                        "Email and Password field are empty", Toast.LENGTH_SHORT).show();
            }
        }
    });
}

private class NetCheck extends AsyncTask<String,String,Boolean>
{
    private ProgressDialog nDialog;

    @Override
    protected void onPreExecute(){
        super.onPreExecute();
        nDialog = new ProgressDialog(LoginActivity.this);
        nDialog.setTitle("Checking Network");
        nDialog.setMessage("Loading..");
        nDialog.setIndeterminate(false);
        nDialog.setCancelable(true);
        nDialog.show();
    }

    @Override
    protected Boolean doInBackground(String... args){

        ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
        NetworkInfo netInfo = cm.getActiveNetworkInfo();
        if (netInfo != null && netInfo.isConnected()) {
            try {
                URL url = new URL("http://www.google.com");
                HttpURLConnection urlc = (HttpURLConnection) url.openConnection();
                urlc.setConnectTimeout(3000);
                urlc.connect();
                if (urlc.getResponseCode() == 200) {
                    return true;
                }
            } catch (MalformedURLException e1) {
                // TODO Auto-generated catch block
                e1.printStackTrace();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
        return false;
    }

    @Override
    protected void onPostExecute(Boolean th){

        if(th == true){
            nDialog.dismiss();
            new ProcessLogin().execute();
        }
        else{
            nDialog.dismiss();
            loginErrorMsg.setText("Error in Network Connection");
        }
    }
}

private class ProcessLogin extends AsyncTask<String, String, JSONObject> {

    private ProgressDialog pDialog;

    String email,password;

    @Override
    protected void onPreExecute() {
        super.onPreExecute();

        inputEmail = (EditText) findViewById(R.id.email);
        inputPassword = (EditText) findViewById(R.id.pword);
        email = inputEmail.getText().toString();
        password = inputPassword.getText().toString();
        pDialog = new ProgressDialog(LoginActivity.this);
        pDialog.setTitle("Contacting Servers");
        pDialog.setMessage("Logging in ...");
        pDialog.setIndeterminate(false);
        pDialog.setCancelable(true);
        pDialog.show();
    }

    @Override
    protected JSONObject doInBackground(String... args) {

        UserFunctions userFunction = new UserFunctions();
        JSONObject json = userFunction.loginUser(email, password);
        return json;
    }

    @Override
    protected void onPostExecute(JSONObject json) {
        try {
            if (json.getString(KEY_SUCCESS) != null) {

                String res = json.getString(KEY_SUCCESS);

                if(Integer.parseInt(res) == 1){
                    pDialog.setMessage("Loading User Space");
                    pDialog.setTitle("Getting Data");
                    DatabaseHandler db = new DatabaseHandler(getApplicationContext());
                    JSONObject json_user = json.getJSONObject("user");
                    /**
                     * Clear all previous data in SQlite database.
                     **/
                    UserFunctions logout = new UserFunctions();
                    logout.logoutUser(getApplicationContext());
                    db.addUser(json_user.getString(KEY_FIRSTNAME),json_user.getString(KEY_LASTNAME),json_user.getString(KEY_EMAIL),json_user.getString(KEY_USERNAME),json_user.getString(KEY_UID),json_user.getString(KEY_CREATED_AT));
                    /**
                     *If JSON array details are stored in SQlite it launches the User Panel.
                     **/
                    Intent upanel = new Intent(getApplicationContext(), Main.class);
                    upanel.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                    pDialog.dismiss();
                    startActivity(upanel);
                    /**
                     * Close Login Screen
                     **/
                    finish();
                }else{

                    pDialog.dismiss();
                    loginErrorMsg.setText("Incorrect username/password");
                }
            }
        } catch (JSONException e) {
            e.printStackTrace();
        }
    }
}
public void NetAsync(View view){
    new NetCheck().execute();
}

public void Website(View view) {
    //((Button) view).setText("Coming soon");
    Intent intent = new Intent(this, Website.class);
    startActivity(intent);
    // Do something in response to button
}

@Override
public void onBackPressed() {
    LoginActivity.this.finish();
    overridePendingTransition(R.anim.abc_fade_in, R.anim.abc_fade_out);
}

主要活动:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    this.requestWindowFeature(Window.FEATURE_NO_TITLE);
    setContentView(R.layout.activity_main2);
}

public void Vehicle(View view)    {
    startActivity(new Intent(this, MainActivity.class));
}

public void Yourself(View view)    {
    startActivity(new Intent(this, Driver.class));
}

public void Driver(View view)    {
    startActivity(new Intent(this, Driver.class));
}

public void Carrelated(View view)    {
    startActivity(new Intent(this, MainActivity.class));
}

public void More3(View view)    {
    startActivity(new Intent(this, More2Activity.class));
}

public void Camera(View view)    {
    startActivity(new Intent(this, Camera.class));
}

@Override
public void onBackPressed() {
    Main.this.finish();
    overridePendingTransition(R.anim.abc_fade_in, R.anim.abc_fade_out);
}

1 个答案:

答案 0 :(得分:1)

请参阅StackOverflow上的这篇文章:How to start Animation immediately after onCreate?

  

重要的是要注意调用的start()方法   在onCreate()方法期间无法调用AnimationDrawable   您的Activity,因为AnimationDrawable尚未完全附加   到窗口。

OnCreate并不意味着它已被显示。

@Override
public void onWindowFocusChanged(boolean hasFocus) {
    if(hasFocus){
        ImageView iv_icon = (ImageView) findViewById(R.id.imageButton);
        Animation a = AnimationUtils.loadAnimation(this, R.anim.fade_in);
        a.setFillAfter(true);
        a.reset();
        iv_icon.startAnimation(a);
    }   
}