Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/232.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
onpostexecute后的Android意图无法启动_Android_Android Intent - Fatal编程技术网

onpostexecute后的Android意图无法启动

onpostexecute后的Android意图无法启动,android,android-intent,Android,Android Intent,我有一个注册系统。登记工作进展顺利。我的主要问题是:我想在登录后启动MainActivity.java。将登录数据发送到服务器后,服务器将检查数据库是否匹配,并发送一个int(0表示不匹配),1表示成功。这也很有效。但如果我想在onPostExecute方法之后启动Intent,它会给出一个错误: 致命异常:主 java.lang.NullPointerException 在android.app.Activity.startActivityForResult 这是执行AsyncTask类的起

我有一个注册系统。登记工作进展顺利。我的主要问题是:我想在登录后启动MainActivity.java。将登录数据发送到服务器后,服务器将检查数据库是否匹配,并发送一个int(0表示不匹配),1表示成功。这也很有效。但如果我想在onPostExecute方法之后启动Intent,它会给出一个错误:

致命异常:主 java.lang.NullPointerException 在android.app.Activity.startActivityForResult

这是执行AsyncTask类的起始页。并在方法getLoginMessage()中接收成功或不匹配

这是我的异步任务类,它从Java服务器接收数据,并检查登录是否成功或不匹配。在onPostExecute中,im调用LoginPage.class中的一个方法,该方法处理意图(错误出现在这里)


您不能仅使用
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很乐意帮助