【问题标题】:android: no such instance fieldandroid:没有这样的实例字段
【发布时间】:2017-03-31 14:08:33
【问题描述】:

我正在尝试使用 Web 服务通过 AsyncTask 获取数据。 我不知道为什么我声明了全局变量 'arrayList1' 并且它已经被初始化了,但是我得到了 'arrayList1' 的错误并且它在新的 AsyncTask 中跳过了。

private Context mContext;
private ArrayList arrayList1;
private ArrayList<List> mData;
private ListView mListView;
private ListViewAdapter mAdapter;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

mContext = getApplicationContext();
mListView = (ListView)findViewById(R.id.listView1);
mData = new ArrayList<List>();
mData = LoadListView();
}

public ArrayList<List> LoadListView(Void...params) {
    arrayList1 = new ArrayList();
    //here error occurred.
    new AsyncTask<Void, Void, ArrayList<List>>() {
        @Override
        protected ArrayList<List> doInBackground(Void...params) {
            arrayList1 = GetData(); 
            //GetData() is another function will return a arraylist from web service.
            return arrayList1;
        }

        @Override
        protected void onPostExecute(ArrayList<List> arrayList) {
            mAdapter = new ListViewAdapter(arrayList, mContext);
            mAdapter.notifyDataSetChanged();
            mListView.setAdapter(mAdapter);
        }
    }.execute((Void[]) params); //error occurred skipped directly to here.

    return arrayList1;
}

【问题讨论】:

  • 您声明了一个 ArrayList ,对吗?列表列表?
  • 是的,是ArrayList,那是一个错误,但我已经改正了,但错误仍然出现。

标签: java android arraylist android-asynctask


【解决方案1】:

如果您使用 proGuard,请务必检查您的 gradle 中的 minifyEnabled 和 shrinkResources 以找到解决方案

【讨论】:

    【解决方案2】:

    不需要发送void参数。

    .execute();
    

    【讨论】:

      【解决方案3】:

      我猜你在一个引用中创建了两个不同的对象,试试这个代码:

      private Context mContext;
      private ArrayList<List> mData;
      private ListView mListView;
      private ListViewAdapter mAdapter;
      
      @Override
      protected void onCreate(Bundle savedInstanceState) {
          super.onCreate(savedInstanceState);
          setContentView(R.layout.activity_main);
      
          mContext = getApplicationContext();
          mListView = (ListView)findViewById(R.id.listView1);
          mData = new ArrayList<List>();
          LoadListView();
      }
      
      public void LoadListView(Void...params) {
      
          //here error occurred.
          new AsyncTask<Void, Void, ArrayList<List>>() {
      
              @Override
              protected void onPreExecute() {
                  super.onPreExecute();
              }
      
              @Override
              protected ArrayList<List> doInBackground(Void...params) {
                  mData.clear();
                  mData.addAll(GetData());
                  //GetData() is another function will return a arraylist from web service.
                  return mData;
              }
      
              @Override
              protected void onPostExecute(ArrayList<List> arrayList) {
                  mAdapter = new ListViewAdapter(arrayList, mContext);
                  mAdapter.notifyDataSetChanged();
                  mListView.setAdapter(mAdapter);
              }
          }.execute((Void[]) params); //error occurred skipped directly to here.
      
      }
      

      【讨论】:

      • 你在哪里得到这个错误“没有这样的实例字段”?
      • 我在调试时在底部面板看到了错误。除非我赢得 10 声望,否则我无法嵌入图像,但这里是错误图像的链接。 i.stack.imgur.com/CGyls.png
      • 编辑了我的答案,请检查。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-24
      • 1970-01-01
      • 2018-09-18
      相关资源
      最近更新 更多