0

我一直在做一个 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(我很惭愧我没有看到这个......对不起大家。但我在那里问至少学到了一些东西。)

4

8 回答 8

1
  • 检查您最近编辑的 xml 文件是否有错误。Eclipse 有时会遗漏 xml 文件中的错误,因此您可能必须打开最近编辑的文件。
  • 检查 res 文件夹中的任何资源文件名中是否包含非法字符。
于 2012-12-10T14:21:55.770 回答
1

我们清理你的项目....

in eclipse goto -->projects --> select clean --> select your project ( shows in popup )
于 2012-12-10T14:19:00.027 回答
0

Check that <?xml version="1.0" encoding="utf-8"?> is at top of arret_item.xml. It's missing from the code you posted, but my be just a copy-paste omission. That's necessary if it isn't there and may break your R references.

Also, try running Android Lint in Eclipse. It will help point to warnings that may actually be errors that aren't reported.

Lint details: http://tools.android.com/tips/lint#TOC-Eclipse-Usage

enter image description here

于 2012-12-10T14:42:36.987 回答
0
ArretRestMethod arm = new ArretRestMethod(ListArretsActivity.this.R);  

为什么在上面的行中需要 R?我相信它需要一个上下文实例。

如果是这样, 请在 onCreate 中
创建一个字段- 使用上下文作为 -Context context;
context= this;
ArretRestMethod arm = new ArretRestMethod(context);

如果需要其他一些参数,请改为传递。

于 2012-12-10T16:04:16.707 回答
0

我有同样的问题。在与 Clean、Restarts 和其他第一手尝试进行了多次斗争之后,我删除了:

导入android.R;

并将其替换为我的包裹名称

导入 com.josh.microqr

看起来很愚蠢,但经过多次清洁后,像这样的小错误会持续下去。

于 2014-04-24T10:37:18.877 回答
0

如果您确定您的 xml 和其他设置没有问题,那么首先备份您的项目并删除“gen”文件夹中的 R 文件现在再次构建项目,这将重新生成您的 R 文件(这仅在您的项目不除了“R 无法解析或不是字段”之外,没有错误)。

于 2014-11-07T06:10:14.947 回答
0

IF ALL ELSE FAILS...创建一个新项目并手动复制所有文件。

我最近正在对 15 个月内未触及的代码进行更新,并且无法通过此操作。我可能错过了一个配置设置或其他一些琐碎的设置,但我希望我在 3 小时前刚刚完成。

于 2013-09-17T07:59:05.557 回答
0

我认为以下任何一项都可以帮助您解决此问题:

  • 检查您的 xml 文件是否有错误。
  • 检查您的 res 文件夹中是否包含文件名中包含无效字符的文件
  • 做项目->清理项目。它将重新生成 R.java 文件。

RK
http://ctrlaltsolve.blogspot.in

于 2015-06-04T06:36:51.890 回答