从MySQL使用JSON无法检索数据,并把它们与片段一个ListView [英] Cannot retrieve data from MySQL using JSON and put them in a ListView with Fragments

查看:129
本文介绍了从MySQL使用JSON无法检索数据,并把它们与片段一个ListView的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

来源$ C ​​$ C

public class VendingFragment extends ListFragment {

private String Tag = "VendingFragment";
private static final String TAG_SUCCESS = "success";

private ListView listView;

// Progress Dialog
private ProgressDialog pDialog;
// Creating JSON Parser object
JSONParser jsonParser = new JSONParser();
JSONArray vendingmachine = null;

ArrayList<HashMap<String, String>> vendinglist;

// url to get all products list
MainActivity main = new MainActivity();
private String url_all_vendingmachine = main.getIP()
        + "vendingmachine/get_all_vendingmachine.php";

// products JSONArray

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.vending_main, container, false);
    vendinglist = new ArrayList<HashMap<String, String>>();
    //listView = (ListView) view.findViewById(R.id.allVendingListView);

    listView = getListView();
    new get_all_vendingmachine().execute();

    return view;
}

class get_all_vendingmachine extends AsyncTask<String, String, String> {

    /**
     * Before starting background thread Show Progress Dialog
     * */
    @Override
    protected void onPreExecute() {
        super.onPreExecute();
        pDialog = new ProgressDialog(getActivity());
        pDialog.setMessage("Creating Product..");
        pDialog.setIndeterminate(false);
        pDialog.setCancelable(true);
        pDialog.show();
        Log.i(Tag, "pDialog");
    }

    protected String doInBackground(String... args) {

        // Building Parameters
        List<NameValuePair> params = new ArrayList<NameValuePair>();

        Log.i(Tag, url_all_vendingmachine);
        // getting JSON Object
        // Note that create product url accepts POST method

        JSONObject json = jsonParser.makeHttpRequest(
                url_all_vendingmachine, "GET", params);

        // check log cat for response
        Log.i(Tag, json.toString());

        // check for success tag
        try {
            int success = json.getInt(TAG_SUCCESS);

            if (success == 1) {
                // Ada record Data (SUCCESS = 1)
                // Getting Array of vendingmachine
                vendingmachine = json.getJSONArray("vendings");

                // looping through All vendingmachine
                for (int i = 0; i < vendingmachine.length(); i++) {
                    JSONObject c = vendingmachine.getJSONObject(i);

                    // Storing each json item in variable
                    String id = c.getString("VMid");
                    String name = c.getString("Name");
                    String address = c.getString("Address");

                    // creating new HashMap
                    HashMap<String, String> map = new HashMap<String, String>();
                    // adding each child node to HashMap key => value
                    map.put("VMid", id);
                    map.put("Name", name);
                    map.put("Address", address);

                    // adding HashList to ArrayList
                    vendinglist.add(map);
                }

            } else {
                // failed to create product
                getActivity().finish();
            }
        } catch (JSONException e) {
            e.printStackTrace();
        }

        return null;
    }

    /**
     * After completing background task Dismiss the progress dialog
     * **/
    protected void onPostExecute(String file_url) {
        // dismiss the dialog once done
        pDialog.dismiss();
        getActivity().runOnUiThread(new Runnable() {
            @Override
            public void run() {
                // updating listview
                String[] from = { "name", "address", "id" };                    int[] to = { R.id.vending_name, R.id.vending_address,
                        R.id.vending_id };

                SimpleAdapter adapter = new SimpleAdapter(getActivity(),
                        vendinglist, R.layout.vending_list, from, to);
                listView.setAdapter(adapter);
            }
        });
    }

}

}

我运行是,发现在logcat中的错误一旦应用程序启动,没有在logcat中显示log.i

I run is and found the error in the logcat once the application launched, no log.i displayed in the logcat

错误消息:

    03-15 18:21:48.680: W/dalvikvm(13868): threadid=1: thread exiting with uncaught exception (group=0x40cf12d0)
03-15 18:21:48.710: E/AndroidRuntime(13868): FATAL EXCEPTION: main
03-15 18:21:48.710: E/AndroidRuntime(13868): java.lang.IllegalStateException: Content view not yet created
03-15 18:21:48.710: E/AndroidRuntime(13868):    at android.app.ListFragment.ensureList(ListFragment.java:386)
03-15 18:21:48.710: E/AndroidRuntime(13868):    at android.app.ListFragment.getListView(ListFragment.java:280)
03-15 18:21:48.710: E/AndroidRuntime(13868):    at com.ecnu.vendingmachine.VendingFragment.onCreateView(VendingFragment.java:54)
03-15 18:21:48.710: E/AndroidRuntime(13868):    at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:828)
03-15 18:21:48.710: E/AndroidRuntime(13868):    at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1032)
03-15 18:21:48.710: E/AndroidRuntime(13868):    at android.app.BackStackRecord.run(BackStackRecord.java:622)
03-15 18:21:48.710: E/AndroidRuntime(13868):    at android.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1382)
03-15 18:21:48.710: E/AndroidRuntime(13868):    at android.app.FragmentManagerImpl$1.run(FragmentManager.java:426)
03-15 18:21:48.710: E/AndroidRuntime(13868):    at android.os.Handler.handleCallback(Handler.java:605)
03-15 18:21:48.710: E/AndroidRuntime(13868):    at android.os.Handler.dispatchMessage(Handler.java:92)
03-15 18:21:48.710: E/AndroidRuntime(13868):    at android.os.Looper.loop(Looper.java:137)
03-15 18:21:48.710: E/AndroidRuntime(13868):    at android.app.ActivityThread.main(ActivityThread.java:4456)
03-15 18:21:48.710: E/AndroidRuntime(13868):    at java.lang.reflect.Method.invokeNative(Native Method)
03-15 18:21:48.710: E/AndroidRuntime(13868):    at java.lang.reflect.Method.invoke(Method.java:511)
03-15 18:21:48.710: E/AndroidRuntime(13868):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:787)
03-15 18:21:48.710: E/AndroidRuntime(13868):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:554)
03-15 18:21:48.710: E/AndroidRuntime(13868):    at dalvik.system.NativeStart.main(Native Method)

这就是我把列表视图成片段。现在我需要把它扩大到使用viewpager,在片段有一个viewpaper和三个片段里面。人们可以水平滑动并选择frament显示到屏幕上。

This is where i put the listview into a fragment. and now i need to extend it to using viewpager, in the fragment there is a viewpaper and three fragment inside it. people can horizontal slip it and choose the frament display into the screen.

每个片断都包含自己的列表视图,并从MySQL中获取数据,任何人都可以教我如何编码它...我很迷茫吧。

推荐答案

onCreateView 只能返回重新present片段的视图。在查看其他业务应在另一个回调来执行,你的code必须是类似以下内容:

onCreateView must only return the view that represent the fragment. Other operations on the View should be performed in another callback, your code must be like following:

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

    return inflater.inflate(R.layout.vending_main, container, false);
}

 @Override 
 public void onViewCreated (View view, Bundle savedInstanceState) {

    vendinglist = new ArrayList<HashMap<String, String>>();
    listView = (ListView) view.findViewById(R.id.allVendingListView);

    listView = getListView();
    new get_all_vendingmachine().execute();
}

这篇关于从MySQL使用JSON无法检索数据,并把它们与片段一个ListView的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆