我想解决此错误
R无法解析为变量
我查了很多答案,但我找不到合适的答案;我尝试了一切。有谁可以帮助我?
我自动创建的主要活动。从case R.id.button1:
开始的三行显示错误:
package de.vogella.android.temprature1;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;
import android.widget.RadioButton;
import android.widget.Toast;
public class Convert extends Activity {
private EditText text;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
text = (EditText) findViewById(R.id.editText1);
}
// This method is called at button click because we assigned the name to the
// "On Click property" of the button
public void myClickHandler(View view) {
switch (view.getId()) {
case R.id.button1:
RadioButton celsiusButton = (RadioButton) findViewById(R.id.radio0);
RadioButton fahrenheitButton = (RadioButton) findViewById(R.id.radio1);
if (text.getText().length() == 0) {
Toast.makeText(this, "Please enter a valid number",
Toast.LENGTH_LONG).show();
return;
}
float inputValue = Float.parseFloat(text.getText().toString());
if (celsiusButton.isChecked()) {
text.setText(String.valueOf(convertFahrenheitToCelsius(inputValue)));
} else {
text.setText(String.valueOf(convertCelsiusToFahrenheit(inputValue)));
}
// Switch to the other button
if (fahrenheitButton.isChecked()) {
fahrenheitButton.setChecked(false);
celsiusButton.setChecked(true);
} else {
fahrenheitButton.setChecked(true);
celsiusButton.setChecked(false);
}
break;
}
}
// Converts to celsius
private float convertFahrenheitToCelsius(float fahrenheit) {
return ((fahrenheit - 32) * 5 / 9);
}
// Converts to fahrenheit
private float convertCelsiusToFahrenheit(float celsius) {
return ((celsius * 9) / 5) + 32;
}
}
我的main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="fill_parent"
android:layout_height="fill_parent" android:background="@color/myColor">
<EditText android:layout_height="wrap_content" android:id="@+id/editText1"
android:layout_width="match_parent" android:inputType="numberDecimal|numberSigned"></EditText>
<RadioGroup android:layout_height="wrap_content" android:id="@+id/radioGroup1"
android:layout_width="match_parent">
<RadioButton android:layout_width="wrap_content"
android:id="@+id/radio0" android:layout_height="wrap_content"
android:text="@string/celsius" android:checked="true"></RadioButton>
<RadioButton android:layout_width="wrap_content"
android:id="@+id/radio1" android:layout_height="wrap_content"
android:text="@string/fahrenheit"></RadioButton>
</RadioGroup>
<Button android:id="@+id/button1" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:text="@string/calc"
android:onClick="myClickHandler"></Button>
</LinearLayout>
my string.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="hello">Hello World, Convert!</string>
<string name="app_name">de.vogella.android.temprature1</string>
<string name="myClickHandler">myClickHandler</string>
<string name="celsius">to Celsius</string>
<string name="farenheit">to Farenheit</string>
<string name="calc">Calculate</string>
</resources>
答案 0 :(得分:19)
1)查看Package Explorer树中的xml文件是否有错误图标 如果他们这样做,修复错误并生成R-class。
示例提示:FILL_PARENT在API级别8中重命名为MATCH_PARENT;因此,如果您的目标是平台2.1(api 7),请将所有出现的内容更改回“fill_parent”
2)如果你添加了“import android.R;”试图快速修复,删除该行
答案 1 :(得分:16)
对我来说,向“R”文件存在问题的人建议的最佳解决方案是尝试后续步骤(顺序无关紧要):
更新ADT&amp; SDK,Eclipse和Java(1.6和最新版本)。
编辑:现在ADT支持Java 1.7。链接here。
删除gen文件夹,然后重新创建。
做一个清洁项目。
右键单击该项目并选择android-tools - &gt;修复项目属性。
右键单击项目并选择属性 - &gt; java-build-path - &gt;订单和出口。确保订单是:
Android 4.4(始终是最新版本)
Android私人图书馆
android依赖
您的图书馆项目(如果需要)
yourAppProject /根
yourAppProject / SRC
确保res文件夹的子文件夹中的所有文件都有正确的名称:只有小写字母,数字和下划线(“_”)。
始终确保targetSdk指向最新的API(当前为19),并将其设置在project.properties文件中
尝试运行Lint并阅读其警告。他们可能会帮助你。
确保您的项目编译1.6 java而不是其他版本。
重启eclipse。
答案 2 :(得分:9)
检查您的AndroidManifest.xml文件,查看包名是否正确。如果您复制了一个示例,那么这可能是错误的,也是问题的根源。
答案 3 :(得分:5)
我遇到了同样的问题。我没有任何说明“import something.R”的行。清洁和重建也没有解决问题。
原来是因为布局xml文件的名称。这些文件只能包含小写字母,数字或下划线。当我将文件名(以及引用它的所有内容)从myLayout.xml更改为my_layout.xml时,一切正常。
答案 4 :(得分:4)
答案 5 :(得分:4)
我刚遇到这个问题。
这是因为我有一个冗余的菜单资源,它引用了一个不存在的字符串。
删除菜单XML并返回R。
答案 6 :(得分:4)
在您尝试其他任何操作之前,请检查您的AndroidManifest.xml
文件中的包声明是否与项目的src
文件夹中的实际包名称相匹配!在创建我从现有项目复制的测试项目时,这对我造成了多次此错误。希望这能节省您的时间!
此外,使用任何大写字母创建XML文件都会触发此错误。
答案 7 :(得分:2)
如果R缺失
答案 8 :(得分:2)
检查AndroidManifest.xml文件中的包名是否与java类的包名相同。
EG。 AndroidManifest.xml
package="com.example.de.vogella.android.widget.example"
在你的班级MyWidgetProvider.java
中package com.example.de.vogella.android.widget.example;
在这个例子中,这是我错误的原因。
答案 9 :(得分:1)
上面没有提到的任何内容对我有用。 但是,我自己修理了它。
如果除activity_main.xml
内的main.xml
/ app_name/res/layout
以外的任何其他文件,请将其删除并尝试清理并构建。
app_name/res/layout
内的不需要的文件或(稍后使用的)文件将是*.out.xml
。删除它。
答案 10 :(得分:1)
如果Clean / Rebuild Project不起作用,请尝试在AndroidManifest.xml中检查我们的包名称。
当您在AndroidManifest.xml文件中更改包名称时,会出现“无法解析R”的问题。它使用您的Android软件包名称在“gen”目录下创建一个子目录,用于存储R.java文件。
答案 11 :(得分:1)
我遇到了这个问题,结果发现这是因为我刚刚更改了一个布局xml文件中的错误
答案 12 :(得分:1)
以上所有建议都应该正常工作,如果您仍然面临问题我怀疑您使用的是64位操作系统且ADT正在寻找32位二进制文件
尝试在终端执行以下命令并清理项目一次
sudo apt-get install ia32-libs
答案 13 :(得分:1)
只需查看您的头文件即可:
import somefile.R;
只需删除该行即可。
答案 14 :(得分:1)
我刚刚在我的第一个hello world android应用程序中遇到此错误(2013年11月3日)。
除了其他用户的一些指示外,这就是我必须做的事情:
控制+ SHIFT + O
从主要活动.java文件的顶部删除导入 * .R
保存文件,清理并编译项目(通常是自动构建)
运行SDK Manager,如果尚未选中,则启用构建工具,然后点击Update,无论
关闭并重新打开Eclipse,问题就消失了
答案 15 :(得分:0)
我遇到了同样的问题,并且没有重新生成R.java的主要原因是项目中任何文件中的错误。一旦我们修复了那些,就应该生成R.java。
答案 16 :(得分:0)
我遇到了同样的问题。 我通过删除'gen'目录中的文件来修复它,然后我清理项目然后自动生成R.java。
答案 17 :(得分:0)
简单解决方案:
检查项目包下的gen [生成的Java文件]中是否有R.java文件。
如果不是,
如果是,
答案 18 :(得分:0)
我是Android开发的新手。我有同样的问题,并围绕这个线程旋转了大约一个星期。事实证明,当您下载最近发布的最新Android SDK(如API 23)时,或者如果您更新构建工具,如果没有更新,则需要在Gradle Scripts下修改build.gradle文件。它位于Project目录的app文件夹中。您可以使用记事本打开此文件。我的文件现在看起来像这样。
apply plugin: 'com.android.application'
android {
compileSdkVersion 23
buildToolsVersion "23.0.0"
defaultConfig {
applicationId "com.example.sukhwinder.justjava"
minSdkVersion 15
targetSdkVersion 23
versionCode 1
versionName "1.0"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
compile 'com.android.support:appcompat-v7:23.+'
compile fileTree(dir: 'libs', include: ['*.jar'])
}
确保 compileSdkVersion , buildToolsVersion 和 targetSdkVersion 与您计算机上安装的最新版Android SDK和Build Tools相匹配。
答案 19 :(得分:0)
我已经看到许多答案建议“修复XML文件中的错误”,但只提供有关如何修复XML的一般提示和提示。
查看Eclipse中的“Problems”选项卡。忽略所有“R无法解析为变量”。看看还剩下什么。对我来说,它看起来像这样:
Unparsed aapt error(s)! Check the console for output.
我引用http://developer.android.com/tools/building/index.html#detailed-build:
Android资产包装工具(aapt)会接收您的应用程序 资源文件,例如AndroidManifest.xml文件和XML文件 为您的活动,并编译它们。还生产了R.java 您可以从Java代码中引用您的资源。
现在,打开“控制台”标签。窗口 - &gt;显示视图&gt;控制台
这应该显示确切的错误,发生的文件以及行号:
[2014-05-13 08:27:05 - MyFirstApp] /Users/alain/code/experimental/android/adt_workspace4.4/MyFirstApp/res/menu/main_activity_actions.xml:4: error: Error: No resource found that matches the given name (at 'icon' with value '@drawable/ic_action_search').
[2014-05-13 08:27:05 - MyFirstApp] /Users/alain/code/experimental/android/adt_workspace4.4/MyFirstApp/res/menu/main_activity_actions.xml:4: error: Error: No resource found that matches the given name (at 'title' with value '@string/action_search').
在我的情况下,第一个错误是因为我引用ic_action_search但我还没有将ic_action_search.png放在res / drawable- * dpi目录中。 第二个错误是因为我引用了一个字符串“action_search”但我还没有在res / values / strings.xml中定义它
如果您点击控制台输出中的错误,ADT插件实际上会将您带到错误所在的行和文件,那将是很好的,但是现在,您必须手动执行此操作。
Eclipse的问题在于,当aapt失败时,并没有停止构建,而是继续到构建的下一个阶段,即Java编译器。命令行工具没有此问题:
生成build.xml:
$ android list targets
对我来说,我有:
Available Android targets: ---------- id: 1 or "android-16" Name: Android 4.1.2 Type: Platform API level: 16 Revision: 4 Skins: HVGA, QVGA, WQVGA400, WQVGA432, WSVGA, WVGA800 (default), WVGA854, WXGA720, WXGA800, WXGA800-7in Tag/ABIs : default/armeabi-v7a, default/mips, default/x86 ---------- id: 2 or "android-19" Name: Android 4.4.2 Type: Platform API level: 19 Revision: 3 Skins: HVGA, QVGA, WQVGA400, WQVGA432, WSVGA, WVGA800 (default), WVGA854, WXGA720, WXGA800, WXGA800-7in Tag/ABIs : default/armeabi-v7a
从上面的列表中选择您的目标,并在下一个命令中使用它:
$ android update project --target <your_target_id> --path /path/to/android/project
现在生成了build.xml,您可以使用以下方法之一构建项目:
$ ant debug
$ ant -verbose debug
$ ant -debug debug
如果构建在aapt阶段失败,它正确地不会生成R.java,但它也正确地不会继续到Java Compiler阶段。控制台输出将向您显示(就像在Eclipse控制台视图中一样)XML错误所在的文件名和行号。
以下是如何打开Eclipse中的行号:
http://www.mkyong.com/eclipse/how-to-display-line-numbers-in-eclipse/
Preferences -> General -> Editors -> Text Editors -> [x] Show line numbers
答案 20 :(得分:0)
我和这个问题共存了2个星期,今天我发现解决方案是“icrease( MINIMUM SDK必需)到最大可能”
答案 21 :(得分:0)
Sooo许多不同的解决方案! 对我来说,我发现Eclipse在错误的包中创建了错误的文件。我通过将它移动到与R.java文件相同的包中来修复它。
答案 22 :(得分:0)
提示:一次更新SDK和所有实用程序。这对我有帮助。
答案 23 :(得分:0)
此错误是因为从项目R.java
文件夹中删除了/gen
文件。如果您有项目备份,请转到项目目录并粘贴您从备份部分复制的R.java
文件。
损坏的R.java文件也可能是由XML中的错误引起的。这些错误通常不会出现在eclipse中,因此我建议您查看XML文件。之后,您还可以转到菜单栏中的Clean
来尝试Project -> Clean...
您的项目。
答案 24 :(得分:0)
如果您还没有,请尝试按照建议清洁项目。在Eclipse Indigo中,这是Project - &gt;干净...... - &gt; (确保检查您的项目) - &gt;好。之后,右键单击您的项目并选择“刷新”。
如果这仍然是一个问题,那么几个问题:
答案 25 :(得分:0)
答案 26 :(得分:-1)
我在FlashBuilder 4.7中执行我的项目,它在strings.xml中排成一行:
&lt; string name =“action_settings”&gt;设置&lt; / string&gt;
一旦我删除它,我得到了同样的错误。当它返回时,每个人都会再次工作。
答案 27 :(得分:-1)
对我来说是什么......
当我检查我的项目属性文件(/project_root/project.properties
)时,它引用了我已经不再安装的旧版Android目标
# Project target.
target=android-15
一旦我将其更改为17,它就完美地工作了,文件保存后我的gen文件夹就被构建并充气了。
# Project target.
target=android-17
答案 28 :(得分:-2)
import com.de.vogella.android.temprature1.R;