从另一个类调用Activity类的android widget方法?
我想调用一个Activity类的方法来正常的公共类。但它面临着NullPointerException。从另一个类调用Activity类的android widget方法?
我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异常。
请帮我解决这个问题。
- 你的情况,你不应该设置
EditText
为静态。 -
将此
EditText
传递给您的Data类。所以你可以在Data类中调用它。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"); } }
现在,当您创建活动数据刚及格的EditText
Data data = new Data(editText);
同样的方式,你需要通过Activity
。
如果您需要在Data类中更改多个EditText
,最好将活动传递给它。然后创建多个公共方法来更改视图的值。
首先你应该知道静态变量链接到类,而不是对象。因此,在你的情况下,因为onCreate
方法初始化EditText
不是静态的,所以肯定它对你是空的。
可以举个例子,我是怎么过'的EditText或Activity'通过我的'Data.class'?@DEADMC –
@srabonshahadat,看看更新后 – DEADMC
日但是有一些困惑,已经在'Lv(Activity.class)'上创建了'EditText',在数据接收过程中,当我的'Data.class'接收到我想要的特定数据时,我想改变'EditText 'Data.class'中'.setText'方法的值。 @DEADMC –
你能提供更多的代码吗?例如你的Data类被初始化了吗? 由于您的et1变量是静态的,您的数据类实例可能只是在初始化之前访问该变量。你不应该对你的视图使用静态引用 - 以防止内存泄漏。 你应该在你的活动中调用一些方法来设置文本。我猜你的套接字连接数据是在工作线程上传递的,但是应该在UI线程上调用setText()方法(请参阅https://developer.android.com/reference/android/app/Activity.html#runOnUiThread (java.lang中。Runnable接口)) – convexHull
**我猜你的套接字连接的数据是在工作线程交付,但setText()方法应该在UI线程调用** 是的,插座连接工作从MainActivity.class其中'数据线.class'是套接字类来调用一个套接字,它也不是一个UI线程。 :(@convexHull –
所以我怎么从一个非活动类通过MainActivity.class的asynctask运行调用UI线程方法?? @convexHull –