问题描述
- Android Studion (AS)相关版本对Project影响测试结论,亟盼大牛相助
-
这个问题我在一周内测试和各种网站查找资料,至少累计16小时,非常苦闷!这个Project简单,来源于陈老师的一本书。
App启动后,点击{登陆} (pic 1), 应该显示 Pic3, 但我这里显示 Pic2 。
我开始是 一行行自己手动输入的, 恐怕有错, 找陈老师给了源代码Copy各个 .xml, .java,
但是结果都相同。我 在 AS里 New>import 陈老师的Project, 提示 " Failed to sync Gradle projec ...." ,
按提示Download Gradel 和SDK 等后,运行App, 结果正常(Pic 3);
于是对比 Proect Structrue, 如图 (陈老师的AS1.3 吧? pic 456 ) 我的 AS1.5.1 (pic 789, Gemotion version 5.0)
陈老师 我的AS1.5.1
project : Gradle Version 2.2.1 2.8
Properties: Complier sdk Verison API 21: Android 5.0 API 23:Android 6.0Build Tools Version 21.1.2 23.0.2
Flavors: Min Sdk Version API 21:Android 5.0 19
Target Sdk Version API 21:Android 5.0 API 23:Android 6.0于是我进行了系列修改Project Structure 的测试,
1) 单独改变 Min SDK verion, 如API 21, API 23, 结果同样错误;
2) 同时改变 Min SDK verion 和 Target 如API 21 和21, API 23和23, 结果同样错误;
(注改变后Clern project, 否则不运行)
3) 单独改变 Properties: Complier sdk Verison, 如API 21,项目无法运行;4) 新建Project, 单独改变 Gradle Version, 如2.2 结果同样错误;
5) 尝试改变AndroidMainfest.xml的Application ,结果同样错误结论: AS的兼容性极差。有许多不成熟!大力向微软的VS 学习。
另外,发现运行什么都非常慢(包括Genymotion, Add 虚拟机30分钟才10%,干脆停了);用Eclips的转换要谨慎。
作了多年的VB/VS 开发,如风流畅。手机 开发都是这样慢吗?
请教大牛:
1)上述 各种“version”有哪些区别?哪里可找到这个资料?
2)如何修改才能运行正确?问题3: 我 在下述第1行下断点, F8到第2行,再F8,F8,F8...不断冒出 “View.java, handler.java, looper.java 的各行, 这些都不是我写的,冒出来有什么用? (
显示Debuger 多复杂吗? 我根本不想见! }
F8 了半天,最后F9 ,才出来。 也没有错误提示,无法定位错误结果的原因!// 跳转到首页
Intent intent = new Intent(MainActivity.this,SuccessActivity.class);
startActivity(intent);[ 阿? 没有上传 rar 文件功能。 需要者,请联系我]
解决方案
1.首先你对
Build Tools Version ,Min Sdk Version ,Target Sdk Version
这3个概念不熟悉,各种尝试,为什么不先了解呢,http://stackoverflow.com/questions/24521017/android-gradle-buildtoolsversion-vs-compilesdkversion,你可以百度或者google 了解下,关键字吗,就上面的就可以。
2.关于如何正确运行,你代码贴出来。。。详细点。还有错误提示。
3.如果as 没有提示,可以手动用gradle 编译下,看看有没有错误提示,
解决方案二:
1.首先你对
Build Tools Version ,Min Sdk Version ,Target Sdk Version
这3个概念不熟悉,各种尝试,为什么不先了解呢,http://stackoverflow.com/questions/24521017/android-gradle-buildtoolsversion-vs-compilesdkversion,你可以百度或者google 了解下,关键字吗,就上面的就可以。
2.关于如何正确运行,你代码贴出来。。。详细点。还有错误提示。
3.如果as 没有提示,可以手动用gradle 编译下,看看有没有错误提示,
解决方案三:
谢谢这个Freshman, 这个代码Copy来的。在AS 1.5.1 下 import 老师的Project, 点Sync grdle 后, 项目就打开正常运行了。 我 New 个 Empty project ,
然后 copy 老师的代码,就出现上述错误。 现 贴出 MainActivity.java,
package com.example.app0501_5021p23;
import android.app.Activity;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.EditText;
import android.widget.Toast;
public class MainActivity extends Activity {
private EditText userName; // 用户名
private EditText password; // 密码
private CheckBox autologin; // 是否自动登录复选框
private Button btnLogin; // 登录按钮
// 声明一个SharedPreferences用于保存数据
private SharedPreferences spSettings = null;
private static final String PREFS_NAME = "NamePwd";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
userName = (EditText)findViewById(R.id.et_username);
password = (EditText)findViewById(R.id.et_password);
autologin = (CheckBox)findViewById(R.id.cb_autologin);
btnLogin = (Button) findViewById(R.id.btn_login);
// 绑定组件事件
setListener();
// 获取数据
getData();
}
/**
* 为组件添加事件
*/
private void setListener() {
// 为登录按钮绑定事件
btnLogin.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
// 判断用户名和密码
if ("admin".equals(userName.getText().toString())
&& "123456".equals(password.getText().toString())) {
// 判断复选框是否选中
if (autologin.isChecked()) {
spSettings = getSharedPreferences(PREFS_NAME,MODE_PRIVATE);
// 得到Editor对象
Editor edit = spSettings.edit();
// 记录保存标记
edit.putBoolean("isKeep", true);
// 记录用户名
edit.putString("username", userName.getText().toString());
// 记录密码
edit.putString("password", password.getText().toString());
// edit.commit(); // 提交
edit.apply();
} else {
spSettings = getSharedPreferences(PREFS_NAME,MODE_PRIVATE);
// 得到Editor对象
Editor edit = spSettings.edit();
// 记录保存标记
edit.putBoolean("isKeep", false);
// 记录用户名
edit.putString("username", "");
// 记录密码
edit.putString("password", "");
// edit.commit(); // 提交
edit.apply();
}
// 跳转到首页
Intent intent = new Intent(MainActivity.this,SuccessActivity.class);
startActivity(intent);
} else {
// 显示错误提示
Toast.makeText(getApplicationContext(), "用户名或密码错误",
Toast.LENGTH_SHORT).show();
}
}
});
}
@Override
protected void onResume() {
// 在界面显示数据之前得到之前存储的数据
super.onResume();
getData();
}
/**
* 获取存储的数据
*/
private void getData() {
// 得到sharedpreferences对象
spSettings = getSharedPreferences(PREFS_NAME, MODE_PRIVATE);
// 判断是否之前存储过用户名密码
if (spSettings.getBoolean("isKeep", false)) {
// 如果之前存储过,则显示在相应文本框内
userName.setText(spSettings.getString("username", ""));
password.setText(spSettings.getString("password", ""));
} else {
// 否则显示空
userName.setText("");
password.setText("");
}
}
}
解决方案四:
我 Build>make project, 没有错误提示。
程序运行 打开了 SuccessActiviy, 只是 没有 Toast " 登陆成功“,而是显示了空白的 "New text"