我有两个类一个是MainActivity.java,另一个是简单的Java类ConnectMe.java。我在MainActivity上有单个按钮和单个EditText。我使用按钮登录所以它也被命名为btnLogin。在clickListener上,我从EditText(字符串格式)中获取Ip,并从ConnectMe.java类中调用Login函数,该类将字符串作为参数。
现在在ConnectMe类中,我检查应用程序是否连接到服务器,它应该在EditText中显示连接消息,还应该在MainActivity上显示Toast。我不知道如何做到这一点,因为我是Android的新手。
这是我的示例代码
public class MainActivity extends Activity {
Button btngLogin;
EditText etIp;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btnLogin.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
ConnectMe connectMe = new ConnectMe();
connectme.LogMeIn(etIp.getText().toString);
}
});
}
这是我用于连接的java类
public class ConnectMe {
MainActivity mainActivity = new MainActivity();
void LogMeIn(String ip){
MyConnectedmethod.Connectednew (new Runnable() {
public void run() {
mainActivity.setText("connected");
}
}
我知道代码不正确,但我只想给你一个想法。我在设置EditText文本的行上得到零点异常。
通过一些研究,我发现我无法直接触及Thread和Runnable中的视图。我被告知使用runOnUiThread。比如mainActivity.runOnUiThread但它也没有帮助给出nullpointexception的错误。
所以请帮助我,因为我是Android编程新手
答案 0 :(得分:2)
这里有很多事情发生。
编辑: 您可以根据需要运行尽可能多的AsncTasks。没有更多的背景,很难确切地说出你最好的方法是什么。但是,听起来你可能想要运行某种服务。 (http://developer.android.com/reference/android/app/Service.html)。根据您的要求,有几种不同的口味可供选择。如果它需要一直运行,而不是您的应用程序正在运行,那么请使用启动服务。如果它只需要在UI运行时运行,那么绑定服务就是选项。如果它需要经常做一些事情,那么意图服务/广播接收器/警报管理器的某些组合就是路径。
您甚至可能不需要服务。如果您只是加载了几件事,请使用loader manager。对于下载内容,SyncAdapter可能是最佳选择。重点是,在24API之后,最常见的任务已经有了现成的解决方案。所以,在大多数情况下,你不需要自己动摇线程。
答案 1 :(得分:0)
发生NullPointerException是因为您缺少声明Button btngLogin引用的对象。
btngLogin = findViewById(R.id.yourbuttonnameinxml);
对EditText执行相同的操作。
答案 2 :(得分:0)
我认为您最好首先阅读此内容,使用意图启动另一项活动并在两个活动(类)之间共享消息:http://developer.android.com/training/basics/firstapp/starting-activity.html