【问题标题】:“Cannot make a static reference to a non-static method” in Android. Simply case [duplicate]Android 中的“无法对非静态方法进行静态引用”。简单案例[重复]
【发布时间】:2014-06-12 23:36:36
【问题描述】:

单击按钮后,我尝试调用方法,但出现此错误: “不能对非静态方法进行静态引用”

这是代码,代码中唯一有问题的地方是当我尝试调用 reakcja();在按钮 Intencja。你能帮帮我吗?

package com.example.buttonwork;

import android.content.Intent;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v7.app.ActionBarActivity;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.EditText;
import android.widget.RatingBar;
import android.widget.SeekBar;
import android.widget.TextView;
import android.widget.Toast;
import android.widget.ToggleButton;

     public class MainActivity extends ActionBarActivity {

    public void reakcja(){
        Intent i = new Intent(this, Intencja.class);
        startActivity(i);


    }





    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Log.i("click", "On create!");
        if (savedInstanceState == null) {
            getSupportFragmentManager().beginTransaction()
                    .add(R.id.container, new PlaceholderFragment())
                    .commit();
        Log.i("click","Teraz chyba pierwszy zapis instancji");
        }

    }

    @Override
    public void onStop(){
    Log.i("click","onStop");
    super.onStop();
    }

    @Override
    public void onPause(){
    Log.i("click","onPause");
    super.onPause();
    }

    @Override
    public void onResume(){
    Log.i("click","onResume");
    super.onResume();
    }





    @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);
        Log.i("click","Pierwsze tworzenie 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();
        if (id == R.id.action_settings) {
            //Toast.makeText(item.getContext(), "elo", Toast.LENGTH_SHORT).show();
            Log.i("click", "menu");
            return true;
        }
        return super.onOptionsItemSelected(item);
    }

    /**
     * A placeholder fragment containing a simple view.
     */


        public static class PlaceholderFragment extends Fragment {






            Button but1;
            Button Intencja;
            TextView tv1;
            EditText et1;
            Button raf,kas;
            ToggleButton off;
            SeekBar sk1;
            int kto;
            CheckBox cb1,cb2;
            RatingBar rb1; 
            public PlaceholderFragment() {
            }

            @Override
            public View onCreateView(LayoutInflater inflater, ViewGroup container,
                    Bundle savedInstanceState) {
                View rootView = inflater.inflate(R.layout.fragment_main, container, false);
                Log.i("click","Tutaj wszystko sie dzieje");
                rb1 = (RatingBar) (rootView.findViewById(R.id.rb1));
                /*rb1.setOnClickListener(new View.OnClickListener() {

                    @Override
                    public void onClick(View v) {
                        // TODO Auto-generated method stub
                        Toast.makeText(v.getContext(), String.valueOf(rb1.getProgress()), Toast.LENGTH_SHORT).show();

                    }
                });*/
                rb1.setOnRatingBarChangeListener(new RatingBar.OnRatingBarChangeListener() {

                    @Override
                    public void onRatingChanged(RatingBar ratingBar, float rating,
                            boolean fromUser) {
                        // TODO Auto-generated method stub
                        Toast.makeText(ratingBar.getContext(), String.valueOf(rating), Toast.LENGTH_SHORT).show();
                    }
                });

               Intencja = (Button) (rootView.findViewById(R.id.Intencja));
               Intencja.setOnClickListener(new View.OnClickListener() {

                @Override
                public void onClick(View v) {
                    // TODO Auto-generated method stub
                    reakcja();
                }
            });

                cb1 = (CheckBox) (rootView.findViewById(R.id.cb1));

                cb2 = (CheckBox) (rootView.findViewById(R.id.cb2));

                off = (ToggleButton) (rootView.findViewById(R.id.toggleButton1));
               off.setOnClickListener(new View.OnClickListener() {

                @Override
                public void onClick(View v) {
                    Toast.makeText(v.getContext(), off.getText(), Toast.LENGTH_SHORT).show();

                }
            });

                sk1 = (SeekBar) (rootView.findViewById(R.id.seekBar1));
                sk1.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {

                    @Override
                    public void onStopTrackingTouch(SeekBar seekBar) {
                        // TODO Auto-generated method stub

                    }

                    @Override
                    public void onStartTrackingTouch(SeekBar seekBar) {
                        // TODO Auto-generated method stub

                    }

                    @Override
                    public void onProgressChanged(SeekBar seekBar, int progress,
                            boolean fromUser) {
                        // TODO Auto-generated method stub
                        //Toast.makeText(seekBar.getContext(), String.valueOf(progress), Toast.LENGTH_SHORT).show();
                        tv1.setText(String.valueOf(progress));
                        return;
                    }
                });
                /*sk1.setOnSeekBarChangeListener(new View.OnClickListener() {

                    @Override
                    public void onClick(View v) {
                        // TODO Auto-generated method stub
                        Toast.makeText(v.getContext(), sk1.getProgress(), Toast.LENGTH_SHORT).show();
                    }
                });*/

                tv1 = (TextView) (rootView.findViewById(R.id.tv1));
            et1 = (EditText) (rootView.findViewById(R.id.et1));
            raf = (Button) (rootView.findViewById(R.id.button1));
            raf.setOnClickListener(new View.OnClickListener() {

                @Override
                public void onClick(View v) {
                    // TODO Auto-generated method stub
                    Toast.makeText(v.getContext(), "Ralfo jest miszczem", Toast.LENGTH_SHORT).show();
                    kto = 1;
                    sk1.setProgress(50);
                }
            });
            kas = (Button) (rootView.findViewById(R.id.button2));
            kas.setOnClickListener(new View.OnClickListener() {

                @Override
                public void onClick(View v) {
                    // TODO Auto-generated method stub
                    Toast.makeText(v.getContext(), "Nie, to Ralfo jest miszczem", Toast.LENGTH_SHORT).show();
                    kto =2;
                    sk1.setProgress(50);
                }
            });


            but1 = (Button) (rootView.findViewById(R.id.b1));
                but1.setOnClickListener(new View.OnClickListener() {

                @Override
                public void onClick(View v) {
                    // TODO Auto-generated method stub
                    tv1.setText(et1.getText().toString());
                    Toast.makeText(v.getContext(), String.valueOf(cb1.isChecked() && cb2.isChecked()), Toast.LENGTH_SHORT).show();
                    // wyświetla Toasta true albo false sprawdzając CheckBoxy i robiąc na nich koniunkcję
                }
            });
                return rootView;
            }
        }
        }

【问题讨论】:

  • 您正在从static 内部类中调用非static 方法;它怎么知道要使用外部类的哪个实例?
  • 顺便说一句,请不要在您的问题中发布 数百 行代码。您应该将其简化为演示问题的最简单示例。
  • 感谢您重定向我,我正在关注您粘贴的问题。你能告诉我我应该怎么做才能使这个意图起作用吗?这是我使用 Intents 的第一步,我敢打赌答案很简单。谢谢你:)

标签: java android methods reference static


【解决方案1】:

PlaceholderFragment 是一个静态类,因此您不能从中调用非静态方法 reakcja()。使 reakcja() 静态或 PlaceholderFragment 非静态。

【讨论】:

    猜你喜欢
    • 2014-06-08
    • 2014-11-19
    • 1970-01-01
    • 1970-01-01
    • 2021-08-31
    • 1970-01-01
    • 2011-06-25
    相关资源
    最近更新 更多