Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/206.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Android无法更新ArrayAdapter,因为;非静态方法&x27;notifyDataSetChanged()';无法从静态上下文引用;_Java_Android_Asynchronous_Static_Android Arrayadapter - Fatal编程技术网

Java Android无法更新ArrayAdapter,因为;非静态方法&x27;notifyDataSetChanged()';无法从静态上下文引用;

Java Android无法更新ArrayAdapter,因为;非静态方法&x27;notifyDataSetChanged()';无法从静态上下文引用;,java,android,asynchronous,static,android-arrayadapter,Java,Android,Asynchronous,Static,Android Arrayadapter,我正在使用一段名为WebRequest()的代码来帮助我从web上提取数据。它提供用于检索异步数据的回调。但是,我无法更新ArrayAdapter,因为我收到一个错误“无法从静态上下文引用非静态方法'notifyDataSetChanged()” 现在,我在这里看到了许多类似的问题。有人建议将notifyDataSetChanged命令放在适配器类本身中。有些人建议使用处理程序,有些人建议使用加载程序。然而,我没有运气实际实施这些解决方案。这是我的密码: new WebRequest()

我正在使用一段名为WebRequest()的代码来帮助我从web上提取数据。它提供用于检索异步数据的回调。但是,我无法更新ArrayAdapter,因为我收到一个错误“无法从静态上下文引用非静态方法'notifyDataSetChanged()”

现在,我在这里看到了许多类似的问题。有人建议将notifyDataSetChanged命令放在适配器类本身中。有些人建议使用处理程序,有些人建议使用加载程序。然而,我没有运气实际实施这些解决方案。这是我的密码:

    new WebRequest().get().to(stringSQLUrl).executeAsync(new WebRequest.Callback() {
        public void onSuccess(int responseCode, String responseText) {
            try {
                DataHistory = CsvUtil.fromCsvTable(responseText);
                DataHistory.remove(0);  //Removes header row
            } catch (Exception e) {
                Log.e("Main pullWebData","Error converting from CsvTable: " + e.getMessage());
            }
            DataAdapter.notifyDataSetChanged();  //  <-- ERROR HERE
            runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        DataAdapter.notifyDataSetChanged();   // <-- ALSO ERROR HERE
                    }
                });
        }
        public void onError() {
            Log.e("Main pullWebData","Error pulling data from web");
        }
    });
最后,我在适配器定义中创建了一个方法来通知自己,但调用该方法会产生相同的静态/非静态错误:

public void updateMe() {
    this.notifyDataSetChanged();
}
长话短说——关于同一个主题,似乎有很多问题和很多建议,但我在实施中没有成功。有人能告诉我我该如何实施这一点吗

谢谢大家!


还有一件事:我正在考虑从Web数据切换到Azure SQL DB,但这也会使用回调,我想也有同样的问题?

您只能使用
ClassName.methodName()调用静态方法notifyDataSetChanged()
不是静态方法。i、 e.
notifyDataSetChanged()
的工作方式取决于适配器的实例

为确保此操作有效,应在自定义适配器的对象上使用
notifyDataSetChanged()

如果您有以下情况:

DataAdapter customAdapter = new DataAdapter(//params);
listView.setAdapter(customAdapter);
你应致电:

customAdapter.notifyDataSetChanged(); 

你读过了吗?你明白什么是静态引用吗?我没有读过那个。我想我明白静态在这里意味着什么。或者至少我认为notifyDataSetChanged是非静态的,因为它属于ArrayAdapter(在我的示例中是DataAdapter)的特定实现。我不明白为什么这里的上下文被认为是静态的,或者我有一个非静态上下文来调用这个method.smh。我把类和实例搞混了。你说得对-我在适配器类上调用notifyDataSetChanged,而不是我创建的实例。非常感谢。
customAdapter.notifyDataSetChanged();