Java 如何在Android应用程序中从另一个类调用非静态方法

Java 如何在Android应用程序中从另一个类调用非静态方法,java,android,Java,Android,因此,我试图在Android应用程序中点击一个项目后调用一个方法 这里我要调用的方法是getFavorites() 在这里,我想调用方法getFavorities() 我真的不知道我做错了什么,但每次我运行它,应用程序就会崩溃 编辑:这里是收藏的完整堆栈 package com.ctt.mrdan.croydontramtime2; import android.app.Activity; import android.widget.ViewFlipper; /** * Created b

因此,我试图在Android应用程序中点击一个项目后调用一个方法

这里我要调用的方法是
getFavorites()

在这里,我想调用方法
getFavorities()

我真的不知道我做错了什么,但每次我运行它,应用程序就会崩溃

编辑:这里是收藏的完整堆栈

package com.ctt.mrdan.croydontramtime2;

import android.app.Activity;
import android.widget.ViewFlipper;

/**
 * Created by MrDan on 16/07/2016.
 */
public class Favourites extends Activity {
    public void getFavourites(){
        ViewFlipper viewFlipper = (ViewFlipper) findViewById(R.id.viewFlipper);
        viewFlipper.setDisplayedChild(0);
        setTitle("Favourites");
    }
}
这是主目录的完整堆栈

package com.ctt.mrdan.croydontramtime2;

import android.content.Intent;
import android.os.Bundle;
import android.support.design.widget.FloatingActionButton;
import android.support.design.widget.Snackbar;
import android.view.View;
import android.support.design.widget.NavigationView;
import android.support.v4.view.GravityCompat;
import android.support.v4.widget.DrawerLayout;
import android.support.v7.app.ActionBarDrawerToggle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.ViewFlipper;

public class MainActivity extends AppCompatActivity
        implements NavigationView.OnNavigationItemSelectedListener {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);

        FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
        fab.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
                        .setAction("Action", null).show();
            }
        });

        DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
        ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
                this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close);
        drawer.setDrawerListener(toggle);
        toggle.syncState();

        NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view);
        navigationView.setNavigationItemSelectedListener(this);
    }

    @Override
    public void onBackPressed() {
        DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
        if (drawer.isDrawerOpen(GravityCompat.START)) {
            drawer.closeDrawer(GravityCompat.START);
        } else {
            super.onBackPressed();
        }
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();

        //noinspection SimplifiableIfStatement
        if (id == R.id.action_settings) {
            return true;
        }

        return super.onOptionsItemSelected(item);
    }

    @SuppressWarnings("StatementWithEmptyBody")
    @Override
    public boolean onNavigationItemSelected(MenuItem item) {
        // Handle navigation view item clicks here.
        int id = item.getItemId();

        if (id == R.id.nav_favourite) {
            Favourites getFav = new Favourites();
            getFav.getFavourites();
        } else if (id == R.id.nav_search) {
            ViewFlipper viewFlipper = (ViewFlipper) findViewById(R.id.viewFlipper);
            viewFlipper.setDisplayedChild(1);
            setTitle("Search");
        } else if (id == R.id.nav_share) {

        } else if (id == R.id.nav_sendFeedback) {

        }

        DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
        drawer.closeDrawer(GravityCompat.START);
        return true;
    }
}

您正在实例化
收藏夹
,然后对新实例调用
getfavorities()
GetFavorities()
调用
findViewById()
,隐式调用
getWindow().findViewById()
,但
活动
没有内容视图,导致
NullPointerException

收藏夹
毫无意义

您只需将代码从
getFavorities()
移动到
onNavigationItemSelected()


此外,您应该永远不要用
new
关键字实例化
活动。使用
Intent
并将实例化留给
ActivityManager

您正在实例化
收藏夹
,然后对新实例调用
getFavorites()
GetFavorities()
调用
findViewById()
,隐式调用
getWindow().findViewById()
,但
活动
没有内容视图,导致
NullPointerException

收藏夹
毫无意义

您只需将代码从
getFavorities()
移动到
onNavigationItemSelected()


此外,您应该永远不要用
new
关键字实例化
活动。使用
Intent
并将实例化留给
ActivityManager

您应该发布堆栈跟踪。我敢打赌,您的ViewFlipper或DroperLayout上都会出现空指针异常,但如果没有堆栈跟踪,则无法确定是否存在空指针异常。您无法以这种方式创建活动。发布两个类的完整代码please@MichaelJCaboose我已经发布了完整的code@JuanCruzSoler我已经发布了完整的codeLogcat错误msgs请。。!您应该发布堆栈跟踪。我敢打赌,您的ViewFlipper或DroperLayout上都会出现空指针异常,但如果没有堆栈跟踪,则无法确定是否存在空指针异常。您无法以这种方式创建活动。发布两个类的完整代码please@MichaelJCaboose我已经发布了完整的code@JuanCruzSoler我已经发布了完整的codeLogcat错误msgs请。。!
package com.ctt.mrdan.croydontramtime2;

import android.app.Activity;
import android.widget.ViewFlipper;

/**
 * Created by MrDan on 16/07/2016.
 */
public class Favourites extends Activity {
    public void getFavourites(){
        ViewFlipper viewFlipper = (ViewFlipper) findViewById(R.id.viewFlipper);
        viewFlipper.setDisplayedChild(0);
        setTitle("Favourites");
    }
}
package com.ctt.mrdan.croydontramtime2;

import android.content.Intent;
import android.os.Bundle;
import android.support.design.widget.FloatingActionButton;
import android.support.design.widget.Snackbar;
import android.view.View;
import android.support.design.widget.NavigationView;
import android.support.v4.view.GravityCompat;
import android.support.v4.widget.DrawerLayout;
import android.support.v7.app.ActionBarDrawerToggle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.ViewFlipper;

public class MainActivity extends AppCompatActivity
        implements NavigationView.OnNavigationItemSelectedListener {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);

        FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
        fab.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
                        .setAction("Action", null).show();
            }
        });

        DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
        ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
                this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close);
        drawer.setDrawerListener(toggle);
        toggle.syncState();

        NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view);
        navigationView.setNavigationItemSelectedListener(this);
    }

    @Override
    public void onBackPressed() {
        DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
        if (drawer.isDrawerOpen(GravityCompat.START)) {
            drawer.closeDrawer(GravityCompat.START);
        } else {
            super.onBackPressed();
        }
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();

        //noinspection SimplifiableIfStatement
        if (id == R.id.action_settings) {
            return true;
        }

        return super.onOptionsItemSelected(item);
    }

    @SuppressWarnings("StatementWithEmptyBody")
    @Override
    public boolean onNavigationItemSelected(MenuItem item) {
        // Handle navigation view item clicks here.
        int id = item.getItemId();

        if (id == R.id.nav_favourite) {
            Favourites getFav = new Favourites();
            getFav.getFavourites();
        } else if (id == R.id.nav_search) {
            ViewFlipper viewFlipper = (ViewFlipper) findViewById(R.id.viewFlipper);
            viewFlipper.setDisplayedChild(1);
            setTitle("Search");
        } else if (id == R.id.nav_share) {

        } else if (id == R.id.nav_sendFeedback) {

        }

        DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
        drawer.closeDrawer(GravityCompat.START);
        return true;
    }
}
viewFlipper = (ViewFlipper) findViewById(R.id.viewFlipper);

// ...

if (id == R.id.nav_favourite) {
    viewFlipper.setDisplayedChild(0);
    setTitle("Favourites");
} else if (id == R.id.nav_search) {
    viewFlipper.setDisplayedChild(1);
    setTitle("Search");
}