java - 试图完成输入事件,但输入事件接收器已被释放

标签 java android

我正在试用我在网上看到的教程,该应用程序从服务器获取并显示 JSONfeed,这部分工作正常,我试图在自定义 ListView 中显示此提要,但是当我尝试这样做时,我得到“Attempted to完成输入事件,但输入事件接收器已被处理”logcat 中的错误,应用程序中没有任何反应,我有一个适配器类:

public class UserAdapter extends ArrayAdapter<UserData>{

    private Context context;
    private List<UserData> users_list;

    public UserAdapter(Context context, int resource,List<UserData> objects) {
        super(context, resource);
        this.context= context;
        this.users_list= objects;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {

        LayoutInflater inflater= (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        View customview= inflater.inflate(R.layout.item_user, parent, false);

        UserData userData=  users_list.get(position);
        TextView tv = (TextView) customview.findViewById(R.id.textview1);
        tv.setText(userData.getName());

        return customview;
    }
}

我的主要 Activity :

import android.app.ListActivity;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.os.AsyncTask;

import android.view.Menu;
import android.view.MenuItem;

import android.widget.Toast;

import java.util.ArrayList;
import java.util.List;

public class MainActivity extends ListActivity  {



    List<MyTask> tasks;

    List<UserData> userDataList;


    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.menu_main, menu);

        userDataList= new ArrayList<>();

        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {


        int id = item.getItemId();


        if (id == R.id.ac) {

            if (isOnline()) {
                requestData("http://192.168.1.4/database/getInfoDroid.php");

            } else {
                Toast.makeText(MainActivity.this, "Network Unavailable", Toast.LENGTH_LONG).show();
            }


            return true;
        }

        return super.onOptionsItemSelected(item);
    }

    private void requestData(String uri) {
        MyTask task=new MyTask();
        task.execute(uri);
    }

    protected void updateDisplay(){
      UserAdapter adapter= new UserAdapter(this,R.layout.item_user,userDataList);
        setListAdapter(adapter);

    }

    protected boolean isOnline(){
        ConnectivityManager cm= (ConnectivityManager) getSystemService(CONNECTIVITY_SERVICE);
        NetworkInfo netinfo= cm.getActiveNetworkInfo();
        if(netinfo!= null && netinfo.isConnectedOrConnecting()){
            return true;
        }
        else {
            return false;
        }



    }


    private class MyTask extends AsyncTask {

        @Override
        protected void onPreExecute() {


        }


        @Override
        protected Object doInBackground(Object[] objects) {

            System.out.print("Do in background ");

            String content =HttpManager.getData(objects[0].toString());
            System.out.print(content);
            return content;


        }

        @Override
        protected void onPostExecute(Object o) {


            if (o.toString()==null){
                Toast.makeText(MainActivity.this,"Cant connect to Web",Toast.LENGTH_LONG).show();
            }


            userDataList= UserDataJsonParser.parseFeed(o.toString());
            System.out.print(userDataList);
            updateDisplay();

        }


        @Override
        protected void onProgressUpdate(Object[] values) {
            //updateDisplay(values[0].toString());
        }
    }



}

日志:

11-28 20:50:12.115 28063-28078/hilz.myapplication W/EGL_emulation: eglSurfaceAttrib not implemented
11-28 20:50:12.115 28063-28078/hilz.myapplication W/OpenGLRenderer: Failed to set EGL_SWAP_BEHAVIOR on surface 0xa50c8260, error=EGL_SUCCESS
11-28 20:50:13.287 28063-28063/hilz.myapplication W/InputEventReceiver: Attempted to finish an input event but the input event receiver has already been disposed.

最佳答案

在您的 Public UserAdapter 函数中,您的 super 没有传入对象。

应该是:

public UserAdapter(Context context, int resource,List<UserData> objects)
{
    super(context, resource, objects);
    this.context= context;
    this.users_list= objects;
}

而不是:

public UserAdapter(Context context, int resource,List<UserData> objects)
{
    super(context, resource);
    this.context= context;
    this.users_list= objects;
}

关于java - 试图完成输入事件,但输入事件接收器已被释放,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33975140/

相关文章:

c# - 从 Android 调用到 C# 的服务不起作用

android - 将 PDFViewCtrl 滚动到文档中的绝对位置

android - 使用 viewHolder 接口(interface)更新状态到 Listview

java - 对数组值进行排序,使其对应于其他正在排序的数组(当它实际上未更改时)

java - 在 Jsoup 中返回包含关键字的元素

java - Lucene搜索保存文件内容时不返回结果

android - 如何使用属性 android :fontStyle ="bold" 在 font_family.xml 中设置自定义字体

java - jspWriter的输出缓冲区输出到日志的方法

Java 8 map 过滤和排序

Android/Java 初学者 : Overriding ArrayAdapter's getView