私は、Activity Classのメソッドを通常のpublicクラスに呼び出す必要があります。それに直面したNullPointerException。別のクラスの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
からそれを使用すると、はい、レイアウト名、コンテンツ名はokです、それは動作します。このパブリッククラス経由 どういうわけか、アクティビティクラスのすべてのコマンド
(アダプタが通知呼び出しクリックで例えばgettextを、ボタンは、[また、それらpublic static
製]) はNullPointerExceptionがままになります。
この問題を解決するのを手伝ってください。あなたは静的としてEditText
設定はずのあなたの場合は
もっとコードを提供できますか?あなたのDataクラスが初期化されたときのexmpleについては? et1変数は静的であるため、データクラスインスタンスは初期化される前にその変数にアクセスしている可能性があります。メモリリークを防ぐために、ビューへの静的参照を使用しないでください。 テキストを設定するあなたのアクティビティのいくつかのメソッドを呼び出す必要があります。私はあなたのソケット接続データがワーカースレッドで配信されていると思いますが、UIスレッドで 'setText()'メソッドを呼び出す必要があります(https://developer.android.com/reference/android/app/Activity.html#runOnUiThreadを参照)。 (java.lang。 – convexHull
**あなたのソケット接続データはワーカースレッドで配信されると思いますが、UIスレッドのsetText()メソッドを呼び出す必要があります** はい、そのソケット接続はMainActivity.classのスレッドで動作します。 .class'はソケットを呼び出すソケットクラスであり、UIスレッドでもありません。 :(@ convexHull –
MainActivity.classのasynctaskを実行する非アクティビティクラスからUIスレッドメソッドを呼び出す方法@convexHull –