2 jacky0319 Jacky0319 于 2016.04.09 17:48 提问

Android Studion (AS)相关版本对Project影响测试结论,亟盼大牛相助 5C

这个问题我在一周内测试和各种网站查找资料,至少累计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.0

Build 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 文件功能。 需要者,请联系我]

4个回答

android_freshman
android_freshman   2016.04.12 10:03

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 编译下,看看有没有错误提示,

android_freshman
android_freshman   2016.04.12 10:03

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 编译下,看看有没有错误提示,

Jacky0319
Jacky0319   2016.04.15 15:23

谢谢这个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("");
    }
}

}


Jacky0319
Jacky0319   2016.04.15 15:27

我 Build>make project, 没有错误提示。

程序运行 打开了 SuccessActiviy, 只是 没有 Toast " 登陆成功“,而是显示了空白的 "New text"

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!