Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/357.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/199.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 为什么notifySetDataChanged在android中不起作用?_Java_Android_Listview - Fatal编程技术网

Java 为什么notifySetDataChanged在android中不起作用?

Java 为什么notifySetDataChanged在android中不起作用?,java,android,listview,Java,Android,Listview,我做了一个演示,其中我显示了来自webservice的数据。这很好。这意味着我可以在第一次点击服务时在listview上显示数据。但我需要一次又一次点击服务器并获取新数据。我可以获取新数据。但我需要在listview上显示新数据,但当我获取新数据时,我的列表将变为空白或空。为什么? 这是我的密码 @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub

我做了一个演示,其中我显示了来自webservice的数据。这很好。这意味着我可以在第一次点击服务时在listview上显示数据。但我需要一次又一次点击服务器并获取新数据。我可以获取新数据。但我需要在listview上显示新数据,但当我获取新数据时,我的列表将变为空白或空。为什么?

这是我的密码

@Override
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    setContentView(R.layout.departure_dashboard);

    try {
        Bundle bundle = getIntent().getExtras();
        String message = bundle.getString("Response");
        Log.d("=========onCreate", message);
        listView=(ListView)findViewById(R.id.listView1);
         data = new Gson().fromJson(message, deparaturedaseboarddto.class);
         listObject=data.getData();
        adapter = new CustomListAdapter(this,  listObject);

         listView.setAdapter(adapter);
         timer =new Timer();
         timer.scheduleAtFixedRate(new alertTask(), 0, 14000);
    } catch (Exception e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }



}
当计时器启动时,我使用了alerk task.com并一次又一次地调用webservice

public class alertTask extends TimerTask {

        @Override
        public void run() {
            // TODO Auto-generated method stub
            WebserviceMethod callDepartudeDashboard=new WebserviceMethod();
            callDepartudeDashboard.setObserver(Departuredashboardscreen.this);
            callDepartudeDashboard.getwebService(ConstantVariable.dashboardWebServiceURL+"a/"+"departuredashboard"+"?crsCode=hnh");


        }

    }
这是一种反复给予回应的方法

@Override
    public void getWebserviceResponse(String result) {
        // TODO Auto-generated method stub
        Log.d("timer", result);
        listObject.clear();


         deparaturedaseboarddto localdata = new Gson().fromJson(result, deparaturedaseboarddto.class);
         listObject.addAll(localdata.getData());
        adapter.notifySetDataChanged();

    }
这是我为listview定制的适配器

package com.firstgroup.components;

import java.util.ArrayList;

import com.firstgroup.applicationload.Appliacationload;
import com.firstgroup.applicationload.R;
import com.firstgroup.dto.deparaturedaseboarddto;


import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;

public class CustomListAdapter extends BaseAdapter{
    ArrayList<deparaturedaseboarddto> deparaturedaseboarddto;
    private Context context;
    public CustomListAdapter( Context context, ArrayList<deparaturedaseboarddto> deparaturedaseboarddto){
        this.deparaturedaseboarddto=deparaturedaseboarddto;
        this.context = context;
    }

    @Override
    public int getCount() {
        // TODO Auto-generated method stub
        return deparaturedaseboarddto.size();
    }

    @Override
    public Object getItem(int position) {
        // TODO Auto-generated method stub
        return deparaturedaseboarddto.get(position);
    }

    @Override
    public long getItemId(int position) {
        // TODO Auto-generated method stub
        return 0;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        // TODO Auto-generated method stub
         View v = convertView;
            if (v == null) {
                LayoutInflater mInflater = (LayoutInflater) context
                        .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                v = mInflater.inflate(R.layout.row_listitem, null);
            }

            final TextView platFormName = (TextView) v
                    .findViewById(R.id.item_platform);

            final TextView schDepart = (TextView) v
                    .findViewById(R.id.item_schDepart);
            final TextView expDepart = (TextView) v
                    .findViewById(R.id.item_expectdepart);
            final TextView arrival = (TextView) v
                    .findViewById(R.id.item_arrival);
            final TextView exparrival = (TextView) v
                    .findViewById(R.id.item_expertarrival);
            final TextView stationName = (TextView) v
                    .findViewById(R.id.item_stationName);

            final String platformValue = deparaturedaseboarddto.get(position).getPlatformNo();
            final String schDepartValue= deparaturedaseboarddto.get(position).getSchDepart();
            final String schExpectValue= deparaturedaseboarddto.get(position).getExpDepart();
            final String arrivalValue= deparaturedaseboarddto.get(position).getDestSchArrival();
            final String exparrivalValue= deparaturedaseboarddto.get(position).getDestSchArrival();
           String stationNameValue= deparaturedaseboarddto.get(position).getDestinationStation().getStationName();

            platFormName.setText(platformValue);

            schDepart.setText(schDepartValue);
            expDepart.setText(schExpectValue);
            arrival.setText(arrivalValue);
            exparrival.setText(exparrivalValue);
            stationName.setText(stationNameValue);
            return v;
    }

    public void notifySetDataChanged() {
        // TODO Auto-generated method stub
        notifyDataSetChanged();


    }

}
package com.firstgroup.components;
导入java.util.ArrayList;
导入com.firstgroup.applicationload.appliationLoad;
导入com.firstgroup.applicationload.R;
导入com.firstgroup.dto.deparaturedaseboardto;
导入android.content.Context;
导入android.view.LayoutInflater;
导入android.view.view;
导入android.view.ViewGroup;
导入android.widget.BaseAdapter;
导入android.widget.TextView;
公共类CustomListAdapter扩展了BaseAdapter{
ArrayList DeparaturedTo;
私人语境;
公共CustomListAdapter(上下文上下文,ArrayList DeparateDaseBoardTo){
this.deparaturedaseboardto=deparaturedaseboardto;
this.context=上下文;
}
@凌驾
public int getCount(){
//TODO自动生成的方法存根
将deparaturedaseboarddto.size()返回;
}
@凌驾
公共对象getItem(int位置){
//TODO自动生成的方法存根
返回deparaturedaboarddto.get(位置);
}
@凌驾
公共长getItemId(int位置){
//TODO自动生成的方法存根
返回0;
}
@凌驾
公共视图getView(int位置、视图转换视图、视图组父视图){
//TODO自动生成的方法存根
视图v=转换视图;
如果(v==null){
LayoutInflater mInflater=(LayoutInflater)上下文
.getSystemService(上下文布局\充气机\服务);
v=最小充气量(R.layout.row\u列表项,空);
}
最终文本视图平台名称=(文本视图)v
.findViewById(R.id.item_平台);
最终文本视图文件=(文本视图)v
.findViewById(R.id.item_Schdept);
最终文本视图导出=(文本视图)v
.findViewById(R.id.item_);
最终文本视图到达=(文本视图)v
.findViewById(R.id.项目到达);
最终文本视图exparrival=(文本视图)v
.findViewById(R.id.item_Expertarival);
最终文本视图站名=(文本视图)v
.findViewById(R.id.item_stationName);
最终字符串platformValue=deparaturedaseboardto.get(position.getPlatformNo();
最终字符串schDepartValue=deparaturedaseboardto.get(position.getSchDepart();
最后一个字符串scheexpectvalue=deparaturedaseboardto.get(position.getexpdefect();
最终字符串arrivalue=deparaturedaseboardto.get(position.getDestSchArrival();
最终字符串exparrivalue=deparaturedaseboardto.get(position.getDestSchArrival();
String stationNameValue=DeparaturedaseBoardTo.get(位置).getDestinationStation().getStationName();
platFormName.setText(platformValue);
schDepart.setText(schDepartValue);
expDepart.setText(scheexpectvalue);
arrival.setText(arrivalValue);
exparrival.setText(exparrivalValue);
setText(stationNameValue);
返回v;
}
public void notifySetDataChanged(){
//TODO自动生成的方法存根
notifyDataSetChanged();
}
}

当我按back键时,它会显示新列表一秒钟,然后关闭应用程序。为什么?

这可能是因为您已经在BaseAdapter中编写了
notifyDataSetChanged()
,而理想情况下,在将适配器设置为列表视图后应该调用它。 或者也可能是因为在基本适配器中有一个方法

public void notifySetDataChanged() {
        // TODO Auto-generated method stub
        notifyDataSetChanged();
}
但是,您没有使用数组适配器实例在方法内部调用您的
notifyDataSetChanged()

请参阅此

尝试通过为适配器分配完整的列表视图(如list view.set adapter())和新数据来重置适配器。抱歉,我的缩进不好

除非您将
DataSetObserver
注册到适配器,否则它将无法工作。我将如何注册?您最简单的方法可能是调用
listView.setAdapter(适配器)listObject.addAll(localdata.getData())之后添加code>。首先注释掉基本适配器中的notifySetDataChanged()方法,并添加这行代码适配器。notifySetDataChanged();在listView.setAdapter(适配器)之后;。请看我给你的链接,它解释了这一点。