我一直在做一个 android 项目,但是一个非常烦人的错误让我很生气:“R 无法解析或不是一个字段”。好吧,有很多问题得到了答案,但我现在尝试的一切都不起作用:清理项目,销毁 R.java & 清理项目,导入 xyzR;并销毁任何 import android.R;... 但它仍然存在。你能帮助我吗?
这是发生错误的代码(ListArretsActivity.java):
package com.example.onetantan;
import java.util.ArrayList;
import com.example.onetantan.rest.Arret;
import com.example.onetantan.rest.ArretRestMethod;
import com.example.onetantan.rest.ListArret;
import com.example.onetantan.R;
import android.app.ListActivity;
import android.content.Context;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
public class ListArretsActivity extends ListActivity {
... // Code that doesn't seemed revelant, for me, for the error given
class MyAsyncTask extends AsyncTask<Void, Void, Void> {
@Override
protected Void doInBackground(Void... paramArrayOfParams) {
ArretRestMethod arm = new ArretRestMethod(ListArretsActivity.this.R);
return null;
}
}
... // Code that doesn't seemed revelant, for me, for the error given
}
这是一个没有问题的代码......(ArretAdapter.java):
package com.example.onetantan;
import java.util.List;
import com.example.onetantan.rest.Arret;
import com.example.onetantan.R;
import android.content.Context;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;
public class ArretAdapter extends BaseAdapter {
private static String LOG_TAG="ArretAdapter";
private Context mContext;
private List<Arret> mListArret;
private LayoutInflater inflater;
public ArretAdapter(Context p_oContext, List<Arret> p_oListArret){
super();
mContext = p_oContext;
mListArret = p_oListArret;
this.inflater = LayoutInflater.from(mContext);
}
... // Code that doesn't seemed revelant, for me, for the error given
@Override
public View getView(int p_iPosition, View p_oConvertView, ViewGroup p_oParentView) {
if (p_oConvertView == null) {
p_oConvertView = inflater.inflate(R.layout.arret_item, null);
}
((TextView)(p_oConvertView.findViewById(R.id.name))).setText("Heure");
((TextView)(p_oConvertView.findViewById(R.id.dist))).setText("Heure");
return p_oConvertView;
}
... // Code that doesn't seemed revelant, for me, for the error given
}
最后,我的 src 和 gen 文件夹的包资源管理器的图片。想发布图片,但由于我是新用户而没有足够的声誉,所以这里有一个链接:http: //img217.imageshack.us/img217/5511/tosend.png
我已经一个星期没有做任何事情了……也许是我看不到的太明显的事情,或者是一个严重的问题,但我真的需要你的帮助。
提前感谢您可以给我的任何答案(即使它是我尝试过 3 次的其他问题的答案,如果需要我会再试一次)。
编辑:您的答案之一是检查我的 xml 文件是否有任何错误。但是 Eclipse 没有发回任何错误,我也没有看到任何错误(我根本没有尝试过......:/)。在我的 res>layout 文件夹中:arret_item.xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<TextView
android:id="@+id/name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="TextView" />
<TextView
android:id="@+id/dist"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="TextView" />
</LinearLayout>
在我的 res>layout 文件夹中:arret_item.xml:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".ListArretsActivity" >
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true"
android:text="@string/hello_world" />
</RelativeLayout>
这些是我的 res.layout 中唯一可以编辑的两个 .xml 文件。
编辑 2:运行 Android Lint,它只返回警告:
不针对最新版本的 Android;兼容性模式适用。不建议使用 .gif 格式的位图(64 项) 在 densityless 文件夹中找到可绘制的位图 res/drawable/l_1.gif(68 项) ressource R.drawable.l_1 似乎未使用(70 项)
我立即纠正了第一个问题,因为我正在使用 API 17(Android 4.2),而我的清单是 16。但它并没有纠正我的错误。
对于其他 3 个警告,这是正常的,因为我暂时不使用它们,因为我得到了这些项目。
好吧,这是我的 AndroidManifest.xml,因为我编辑了它:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.onetantan"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="17" />
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name="com.example.onetantan.ListArretsActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
答:对不起大家,有一个代码我没有给出,它是ArretRestMethod.java。如果我给你这个,你可能会明白:
package com.example.onetantan.rest;
import ...
public class ArretRestMethod {
private static String LOG_TAG="ArretRestMethod";
Context mContext=null;
public ArretRestMethod(Context context) {
mContext = context.getApplicationContext();
}
...
}
我的一位朋友指出我在 ListArretsActivity.java 中的行
ArretRestMethod arm = new ArretRestMethod(ListArretsActivity.this.R);
必须这样写:
ArretRestMethod arm = new ArretRestMethod(ListArretsActivity.this);
任何想要惩罚我的人都会得到免费的鞭子......:x(我很惭愧我没有看到这个......对不起大家。但我在那里问至少学到了一些东西。)