onpostexecute后的Android意图无法启动
我有一个注册系统。登记工作进展顺利。我的主要问题是:我想在登录后启动MainActivity.java。将登录数据发送到服务器后,服务器将检查数据库是否匹配,并发送一个int(0表示不匹配),1表示成功。这也很有效。但如果我想在onPostExecute方法之后启动Intent,它会给出一个错误: 致命异常:主 java.lang.NullPointerException 在android.app.Activity.startActivityForResult 这是执行AsyncTask类的起始页。并在方法getLoginMessage()中接收成功或不匹配 这是我的异步任务类,它从Java服务器接收数据,并检查登录是否成功或不匹配。在onPostExecute中,im调用LoginPage.class中的一个方法,该方法处理意图(错误出现在这里)onpostexecute后的Android意图无法启动,android,android-intent,Android,Android Intent,我有一个注册系统。登记工作进展顺利。我的主要问题是:我想在登录后启动MainActivity.java。将登录数据发送到服务器后,服务器将检查数据库是否匹配,并发送一个int(0表示不匹配),1表示成功。这也很有效。但如果我想在onPostExecute方法之后启动Intent,它会给出一个错误: 致命异常:主 java.lang.NullPointerException 在android.app.Activity.startActivityForResult 这是执行AsyncTask类的起
您不能仅使用
new
关键字创建活动的实例,如下所示:
private void sendToLoginPage(String result1) {
System.out.println("sendtologi " + result1);
LoginPage lp = new LoginPage();
lp.getLoginMessage(result1);
}
public class ConnectToServer extends AsyncTask<Void, Void, String> {
private LoginResultListener listener;
...
public void setListener(LoginResultListener listener) {
this.listener = listener;
}
...
private void sendToLoginPage(String result1) {
System.out.println("sendtologi " + result1);
//THIS IS WHERE YOU DID WRONG
listener.getLoginMessage(result1);
}
...
}
这是错误的,这可能就是您出错的原因。您发布的代码非常复杂,所以我不确定是否还有其他问题
应该这样做:
所以。。。由于您可能在单独的文件中有ConnectToServer
asyncTask任务,因此需要将事件或数据传递给LoginPage
活动。为此,应使用事件侦听器,如下所示:
private void sendToLoginPage(String result1) {
System.out.println("sendtologi " + result1);
LoginPage lp = new LoginPage();
lp.getLoginMessage(result1);
}
public class ConnectToServer extends AsyncTask<Void, Void, String> {
private LoginResultListener listener;
...
public void setListener(LoginResultListener listener) {
this.listener = listener;
}
...
private void sendToLoginPage(String result1) {
System.out.println("sendtologi " + result1);
//THIS IS WHERE YOU DID WRONG
listener.getLoginMessage(result1);
}
...
}
首先,创建表示您的ConnectToServer
和您的LoginPage
之间通信的接口
public interface LoginResultListener {
public void getLoginMessage(String receivedMessage);
}
现在,让您的登录页面
活动
实现此界面
:
public class LoginPage extends Activity implements LoginResultListener {
...
}
现在,更新您的ConnectToServer
asyncTask,以便它使用LoginResultListener
将登录结果传达给您的活动,如下所示:
private void sendToLoginPage(String result1) {
System.out.println("sendtologi " + result1);
LoginPage lp = new LoginPage();
lp.getLoginMessage(result1);
}
public class ConnectToServer extends AsyncTask<Void, Void, String> {
private LoginResultListener listener;
...
public void setListener(LoginResultListener listener) {
this.listener = listener;
}
...
private void sendToLoginPage(String result1) {
System.out.println("sendtologi " + result1);
//THIS IS WHERE YOU DID WRONG
listener.getLoginMessage(result1);
}
...
}
您可以包含完整的堆栈跟踪吗?您无法通过调用活动构造函数来创建自己的LoginPage
对象。Android为你打电话。您所要做的只是实现回调。您需要阅读一些活动和片段……上面的方法是将数据正确地发送到LoginPage。但如果我试图启动意图,它就会失败。你能给我一个建议吗?你所说的“上述方法”是什么意思?如果你的意思是你发布的代码,请相信我,它没有正确地将数据发送到登录页面:)@charly_fank35很乐意帮助