0

我正在创建一个运行三个片段的 Android 应用程序,每个片段包含一个列表视图。目前,我正在尝试使用我在 Parse.com 上创建的表中的内容填充其中一个列表视图。我遵循了本教程:http ://www.androidbegin.com/tutorial/android-parse-com-listview-images-and-texts-tutorial/并将其应用于我的片段中。问题是,每次我运行我的应用程序时,它都会加载大约 3 秒的数据,然后突然崩溃并给我这个错误:

ddmlib: Broken pipe
java.io.IOException: Broken pipe
    at sun.nio.ch.FileDispatcher.write0(Native Method)
    at sun.nio.ch.SocketDispatcher.write(SocketDispatcher.java:29)
    at sun.nio.ch.IOUtil.writeFromNativeBuffer(IOUtil.java:69)
    at sun.nio.ch.IOUtil.write(IOUtil.java:40)
    at sun.nio.ch.SocketChannelImpl.write(SocketChannelImpl.java:336)
    at com.android.ddmlib.JdwpPacket.writeAndConsume(JdwpPacket.java:213)
    at com.android.ddmlib.Client.sendAndConsume(Client.java:642)
    at com.android.ddmlib.HandleHeap.sendREAQ(HandleHeap.java:348)
    at com.android.ddmlib.Client.requestAllocationStatus(Client.java:488)
    at com.android.ddmlib.DeviceMonitor.createClient(DeviceMonitor.java:835)
    at com.android.ddmlib.DeviceMonitor.openClient(DeviceMonitor.java:803)
    at com.android.ddmlib.DeviceMonitor.processIncomingJdwpData(DeviceMonitor.java:763)
    at com.android.ddmlib.DeviceMonitor.deviceClientMonitorLoop(DeviceMonitor.java:652)
    at com.android.ddmlib.DeviceMonitor.access$100(DeviceMonitor.java:44)
    at com.android.ddmlib.DeviceMonitor$3.run(DeviceMonitor.java:580)

我完全不知道为什么会收到此错误。这是我试图从中填充列表视图的片段中的代码。我也在为列表视图使用自定义适配器,但我使用的是我的另一个项目中的同一个适配器,所以我确信它工作正常。为了获取数据,我调用 new RemoteDataTask().execute(); 在 onCreateView 。这就是我认为它出错的地方。我也确信我的所有表名在我的解析数据库中都是正确的。

public class fraternitiesFragment extends Fragment {

    private SwipeRefreshLayout swipeLayoutFraternities;
    private ListView fratList;
    List<ParseObject> objList;
    ProgressDialog mProgressDialog;
    fraternitiesAdapter fratAdapter;
    private List<Frat> fraternitiesList = null;
    public fraternitiesFragment()
    {

    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {

        View view = inflater.inflate(R.layout.frat_fragment, null);


        // Retrieve the SwipeRefreshLayout and ListView instances
        swipeLayoutFraternities = (SwipeRefreshLayout)view.findViewById(R.id.swipe_refresh_fraternities);
        swipeLayoutFraternities.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
            @Override
            public void onRefresh() {
                new Handler().postDelayed(new Runnable() {
                    @Override public void run() {
                        swipeLayoutFraternities.setRefreshing(false);
                    }
                }, 3000);
            }
        });
        // Set the color scheme of the SwipeRefreshLayout by providing 4 color resource ids
        swipeLayoutFraternities.setColorScheme(
                R.color.tech_blue,
                R.color.tech_gold,
                R.color.tech_blue,
                R.color.tech_gold);

        new RemoteDataTask().execute();
        return view;

    }


    private class RemoteDataTask extends AsyncTask<Void, Void, Void> {
        @Override
        protected void onPreExecute() {
            super.onPreExecute();

            mProgressDialog = new ProgressDialog(getActivity());
            mProgressDialog.setTitle("Loading Fraternities");
            mProgressDialog.setMessage("Loading...");
            mProgressDialog.setIndeterminate(false);
            mProgressDialog.show();
        }

        @Override
        protected Void doInBackground(Void... params) {
            fraternitiesList = new ArrayList<Frat>();
            try{

                ParseQuery<ParseObject> fraternitiesQuery = new ParseQuery<ParseObject>("Fraternities");
                Log.i("Query", " Created");
                fraternitiesQuery.orderByAscending("fratName");
                objList = fraternitiesQuery.find();
                for(ParseObject Fraternity : objList)
                {
                    Frat fraternity = new Frat();
                    fraternity.setFratName((String) Fraternity.get("fratName"));
                    fraternity.setVoteCount((Integer) Fraternity.get("VoteCount"));
                    fraternitiesList.add(fraternity);
                }

            } catch (ParseException e)
            {
                Log.e("Error", e.getMessage());
                e.printStackTrace();
            }
            return null;
        }

        @Override
        protected void onPostExecute(Void result)
        {
            fratList = (ListView)getActivity().findViewById(R.id.frat_list);
            fratAdapter = new fraternitiesAdapter(getActivity(), fraternitiesList);
            Log.d("Adapter Created", "Created");
            mProgressDialog.dismiss();
            fratList.setAdapter(fratAdapter);

        }
    }

}

我真的需要帮助找出导致此断管错误的问题所在。非常感谢任何帮助或反馈!

4

1 回答 1

0

Parse 已经有异步方法,试试这个

 ParseQuery<ParseObject> query = ParseQuery.getQuery("Fraternities");
        query.findInBackground(new FindCallback<ParseObject>() {
            public void done(List<ParseObject> fraternityList, ParseException e) {
                // Do your work here
            }
        });
于 2014-06-09T04:38:56.897 回答