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