Java 启动活动使应用程序崩溃,否则该应用程序为minimazin

Java 启动活动使应用程序崩溃,否则该应用程序为minimazin,java,android,Java,Android,我的应用程序从数据库接收数据进行授权和注册 行被注释掉,应用程序只需最小化,未注释时就会崩溃 Manifest.xml Sql_bridge.java 我真的不知道它为什么会崩溃。您是否尝试过从onLogin()中删除finish(),并仅在收到登录结果时调用它 public void onLoginSuccess() { finish(); startActivity(new Intent(this, Main.class)); } 从onLogin方法中删除finish()

我的应用程序从数据库接收数据进行授权和注册 行被注释掉,应用程序只需最小化,未注释时就会崩溃

Manifest.xml Sql_bridge.java
我真的不知道它为什么会崩溃。

您是否尝试过从
onLogin()
中删除
finish()
,并仅在收到登录结果时调用它

public void onLoginSuccess() {
    finish();
    startActivity(new Intent(this, Main.class));
}
从onLogin方法中删除finish()

因为AsyncTask工作后台调用finish方法来完成当前活动

public void onLogin(View view){
    EditText eLogin = (EditText) findViewById(R.id.username);
    EditText ePass = (EditText) findViewById(R.id.password);
    String login = eLogin.getText().toString();
    String pass = ePass.getText().toString();
    Sql_bridge bridge = new Sql_bridge(this);
    bridge.execute("login",login,pass);
   // finish(); remove it
}

在第一个参数中使用当前活动上下文

startActivity(new Intent(Login.this, Main.class));

您不能创建新活动

package com.example.littledev.test_v2;
import android.app.AlertDialog;
import android.content.Context;
import android.os.AsyncTask;
import android.widget.Toast;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLEncoder;
public class Sql_bridge extends AsyncTask<String,Void,String> {
private Activity ctx;
Sql_bridge (Activity ctx)
{
    this.ctx =ctx;
}

@Override
protected void onPostExecute(String result) {

    switch (result) {
        case "Registered":
            Toast.makeText(ctx, result, Toast.LENGTH_LONG).show();
            break;
        case "Login":
            Toast.makeText(ctx, result, Toast.LENGTH_LONG).show();
            if(ctx instanceof Login){
                ((Login)ctx).onLoginSuccess();
            }
            break;
        default:
            Toast.makeText(ctx, "Failed", Toast.LENGTH_LONG).show();
            break;
    }

}
}
并在登录成功时调用finish:

public void onLoginSuccess() {
    startActivity(new Intent(this, Main.class));
    finish();
}

正如@sasilKumar和@Jaydeep Patel所说:
Login.java中的
onLogin()
方法中,您在启动
Sql\u桥
异步任务实例后立即调用finish(),这是在
onPostExecute(字符串结果)中获得
result
后调用onloginsucess()之前的早期
Main线程上的
,这就是引发该异常的原因。

从startActivity(new Intent(this,Main.class))调用;从onLogin中删除finish(),并将其放在startActivity(newintent(this,Main.class))下面;sasikumar的回答是准确的。因为您正在查找登录活动,所以conext为null,然后当您使用startActivity(newintent(this,Main.class))启动活动时;“this”为空。使用classname总是安全的。这
如果(ctx instanceof Login){((Login)ctx).onLoginSucess();}
这部分是什么?
public void onLoginSuccess() {
    startActivity(new Intent(Login.this, Main.class));
}
public void onLogin(View view){
    EditText eLogin = (EditText) findViewById(R.id.username);
    EditText ePass = (EditText) findViewById(R.id.password);
    String login = eLogin.getText().toString();
    String pass = ePass.getText().toString();
    Sql_bridge bridge = new Sql_bridge(this);
    bridge.execute("login",login,pass);
   // finish(); remove it
}
startActivity(new Intent(Login.this, Main.class));
package com.example.littledev.test_v2;
import android.app.AlertDialog;
import android.content.Context;
import android.os.AsyncTask;
import android.widget.Toast;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLEncoder;
public class Sql_bridge extends AsyncTask<String,Void,String> {
private Activity ctx;
Sql_bridge (Activity ctx)
{
    this.ctx =ctx;
}

@Override
protected void onPostExecute(String result) {

    switch (result) {
        case "Registered":
            Toast.makeText(ctx, result, Toast.LENGTH_LONG).show();
            break;
        case "Login":
            Toast.makeText(ctx, result, Toast.LENGTH_LONG).show();
            if(ctx instanceof Login){
                ((Login)ctx).onLoginSuccess();
            }
            break;
        default:
            Toast.makeText(ctx, "Failed", Toast.LENGTH_LONG).show();
            break;
    }

}
}
public void onLogin(View view){
    EditText eLogin = (EditText) findViewById(R.id.username);
    EditText ePass = (EditText) findViewById(R.id.password);
    String login = eLogin.getText().toString();
    String pass = ePass.getText().toString();
    Sql_bridge bridge = new Sql_bridge(this);
    bridge.execute("login",login,pass);
} 
public void onLoginSuccess() {
    startActivity(new Intent(this, Main.class));
    finish();
}