从另一个类调用Activity类的android小部件方法?

时间:2016-09-16 12:33:11

标签: android

我想将Activity类的方法调用到普通的公共类。但它面临 NullPointerException

My Activty(Lv.class)

public class Lv extends Activity {
        public static EditText et1; 
    @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.listandimage);
            et1 = (EditText) findViewById(R.id.editText1);

我的公共类(Data.class)

        public class Data {             
            public String c = "";
            public String d = "";
            private static Socket soc;

            public Data(String var1, String var2) {
                this.c = var1.toLowerCase().trim();
                this.d = var2;
            }

    public final void start() {

            try {
                soc = new Socket(address, port);
                os = soc.getOutputStream();
                is = new DataInputStream(soc.getInputStream());
            } catch (Exception var5) {
            }
    }

        public void processdata(String rcvdata){
String txttype = rcvdata;
        if (txttype.equals("\003")) {
                        String rname="my man";
                        Lv.et1.setText(rname);
    }

MainActivity.class

button1.setOnClickListener(new OnClickListener() {
    @Override
    public void onClick(View arg0) {
        new RTask().execute();
    }
});
class RTask extends AsyncTask<Void, Void, Void> {

    @Override
    protected Void doInBackground(Void... Void) {
        try {
            mee = new Data(editText1.getText().toString(), editText2
                    .getText().toString());
            mee.start();
        } catch (Exception e) {
        }
        return null;
    }

Data.class是一个公共类,用于合成从套接字连接收到的数据。 是的。我的布局名称,内容名称是可以的,当我使用activity button onclick时,它可以工作。 不知何故,每个活动类的命令

(例如gettext,点击按钮,调用适配器通知[使他们public static也是]) 通过这个公共类将保持 NullPointerException

请帮我解决这个问题。

1 个答案:

答案 0 :(得分:0)

  1. 在您的情况下,您不应将EditText设置为静态
  2. 将此EditText传递给您的Data类。所以你可以在Data class中调用它。

    class Data {
        //make it field
        private EditText editText;
        //your constructor of Data class
        Data (EditText editText) {
        this.editText = editText;
        }
        //now you can use editText like you are in Activity
        private myMethod() {
        editText.setText("every String you want to see here");
        }
    }
    
  3. 现在,当您从Activity创建数据时,只需传递EditText

    Data data = new Data(editText);
    

    同样需要传递Activity

    如果您需要在Data类中更改多个EditText,最好将活动传递给它。然后创建多个公共方法来更改视图的值。

    首先,您应该知道静态变量链接到,而不是对象。因此,在您的情况下确保它为null,因为初始化onCreate的{​​{1}}方法不是静态的。