Java 尝试连接Internet时应用程序崩溃
我正在使用android studio,每当我尝试连接到internet时,它都会显示“不幸的是,‘应用程序名称’停止”的对话框,然后如果崩溃。 我还更新了清单文件以获得许可。请提供任何帮助,这可能会有所帮助。 代码如下:Java 尝试连接Internet时应用程序崩溃,java,android,Java,Android,我正在使用android studio,每当我尝试连接到internet时,它都会显示“不幸的是,‘应用程序名称’停止”的对话框,然后如果崩溃。 我还更新了清单文件以获得许可。请提供任何帮助,这可能会有所帮助。 代码如下: public class Login extends Activity { TextView msg; String user,pass; protected void onCreate(Bundle savedInstanceState){
public class Login extends Activity {
TextView msg;
String user,pass;
protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.login);
final EditText password;
TextView regLabel;
Button loginbt;
final EditText username = (EditText) findViewById(R.id.username);
password = (EditText) findViewById(R.id.password);
regLabel = (TextView) findViewById(R.id.register_label);
msg = (TextView) findViewById(R.id.alert);
regLabel.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent register_form = new Intent(Login.this,Register.class);
startActivity(register_form);
}
});
loginbt = (Button) findViewById(R.id.login);
loginbt.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v){
user = username.getText().toString();
pass = password.getText().toString();
if(user.length()>0 && pass.length()>0) {
try {
new LoginProcess().execute("http://url.com");
} catch (Exception le) {
msg.setText("Error:" + le);
}
}else{
msg.setText("Please Enter Username and Password!");
}
}
});
}
public class LoginProcess extends AsyncTask<String, Void, Void> {
private final HttpClient Client = new DefaultHttpClient();
private String Content;
private String Error = null;
private ProgressDialog Dialog = new ProgressDialog(Login.this);
protected void onPreExecute(){
Dialog.setMessage("Checking Authentication..");
Dialog.show();
}
// Call after onPreExecute method
protected Void doInBackground(String... urls) {
try {
HttpGet httpget = new HttpGet(urls[0]);
ResponseHandler<String> responseHandler = new BasicResponseHandler();
Content = Client.execute(httpget, responseHandler);
} catch (ClientProtocolException e) {
Error = e.getMessage();
cancel(true);
} catch (IOException e) {
Error = e.getMessage();
cancel(true);
}
return null;
}
protected void onPostExecute(Void unused) {
if (Error != null) {
msg.setText("Error in Login: " + Error);
} else {
try {
JSONObject jsonObj = new JSONObject(Content);
String orgPass = jsonObj.getString("password");
if (orgPass.equals(pass)) {
Intent rp = new Intent(Login.this, Menu.class);
startActivity(rp);
finish();
} else {
msg.setText("Wrong Password");
}
} catch (Exception je) {
msg.setText("Error:" + je);
}
}
}
}
}
公共类登录扩展活动{
文本视图消息;
字符串用户,通过;
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.login);
最终文本密码;
文本视图标签;
按钮登录;
最终EditText用户名=(EditText)findViewById(R.id.username);
密码=(EditText)findViewById(R.id.password);
regLabel=(TextView)findViewById(R.id.register\u标签);
msg=(TextView)findViewById(R.id.alert);
regLabel.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
意向登记表=新意向(Login.this,register.class);
startActivity(登记表);
}
});
loginbt=(按钮)findviewbyd(R.id.login);
loginbt.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
user=username.getText().toString();
pass=password.getText().toString();
if(user.length()>0&&pass.length()>0){
试一试{
新建登录进程()。执行(“http://url.com");
}捕获(例外情况){
msg.setText(“错误:+le”);
}
}否则{
msg.setText(“请输入用户名和密码!”);
}
}
});
}
公共类登录进程扩展异步任务{
私有最终HttpClient客户端=新的DefaultHttpClient();
私有字符串内容;
私有字符串错误=null;
private ProgressDialog=新建ProgressDialog(Login.this);
受保护的void onPreExecute(){
setMessage(“检查身份验证…”);
Dialog.show();
}
//在onPreExecute方法之后调用
受保护的Void doInBackground(字符串…URL){
试一试{
HttpGet HttpGet=新的HttpGet(URL[0]);
ResponseHandler ResponseHandler=新BasicResponseHandler();
Content=Client.execute(httpget、responseHandler);
}捕获(客户端协议例外e){
错误=e.getMessage();
取消(真);
}捕获(IOE异常){
错误=e.getMessage();
取消(真);
}
返回null;
}
受保护的void onPostExecute(未使用的void){
if(错误!=null){
msg.setText(“登录错误:+错误”);
}否则{
试一试{
JSONObject jsonObj=新的JSONObject(内容);
字符串orgPass=jsonObj.getString(“密码”);
if(orgPass.equals(pass)){
Intent rp=新的Intent(Login.this、Menu.class);
星触觉;
完成();
}否则{
msg.setText(“错误密码”);
}
}捕获(例外){
msg.setText(“错误:+je”);
}
}
}
}
}
请从logcatcheck发布堆栈跟踪R.id.login
存在于R.layout.login中。我们需要查看logcat。发生这种情况的原因:试图从主线程连接到internet,没有足够的权限。检查您的日志猫(如果您是从命令行运行的,您可以运行adb logcat*:E
,或者从Android Studio的“日志猫”部分运行)@TomTsagk OP不是在使用异步任务吗<代码>新登录过程()。执行(“http://url.com");代码>所以它不在UI线程上?!