Я хочу назвать метод класса Activity нормальным публичным классом. но он столкнулся с NullPointerException.Вызов метода виджета Android класса Activity из другого класса?
Мои 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, кнопка на мыши, Calling адаптер извещать [сделал их public static
также]) через этот общественный класс останется NullPointerException.
, пожалуйста, помогите мне разобраться в этой проблеме.
Не могли бы вы предоставить больше кода? Например, если ваш класс Data инициализирован? Поскольку ваша переменная et1 является статической, возможно, что ваш экземпляр класса данных просто обращается к этой переменной до ее инициализации. Вы не должны использовать статические ссылки на свои представления - чтобы предотвратить утечку памяти. Вы должны ритовать вызов некоторого метода в своей деятельности, который будет устанавливать текст. Я думаю, ваши данные о соединении сокетов поставляются в рабочий поток, но метод 'setText()' должен вызываться в UI-Thread (см. Https://developer.android.com/reference/android/app/Activity.html#runOnUiThread (java.lang.Runnable)) – convexHull
** Я предполагаю, что данные вашего подключения к сокету поставляются на рабочий поток, но метод setText() следует вызывать в UI-Thread ** Да, это соединение сокетов работает в потоке из MainActivity.class, где 'Data .class' - это класс сокетов для вызова сокета, а также не UI-поток. :(@convexHull –
так как я называю метод потоков пользовательского интерфейса из класса неактивности, который проходит через асинтекс MainActivity.class? @convexHull –