android - 无法使用 JSON 从 MySQL 检索数据并将其放入带有 Fragments 的 ListView 中

标签 android mysql json listview android-fragments

源代码

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);
            }
        });
    }

}

}

我运行is并在应用程序启动后发现logcat中出现错误,logcat中没有显示log.i

错误信息:

    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)

这是我将 ListView 放入 fragment 中的地方。现在我需要将其扩展为使用 viewpager,在 fragment 中有一个 View 纸和其中的三个 fragment 。人们可以水平滑动它并选择框架显示到屏幕中。

每个 fragment 都包含自己的 ListView 并从mysql获取数据,任何人都可以教我如何编码它......我对此很困惑。

最佳答案

onCreateView 必须仅返回表示 fragment 的 View 。 View 上的其他操作应在另一个回调中执行,您的代码必须如下所示:

@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();
}

关于android - 无法使用 JSON 从 MySQL 检索数据并将其放入带有 Fragments 的 ListView 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22422186/

相关文章:

java - android 中的事件处理程序 - 设计器时间自动化并在单独的处理程序中处理 2 个 View

javascript - js obj -> json 文件(ajax、php)

javascript - 使用 JavaScript 解析来自外部站点的 json

mysql - 存储过程输出始终返回 0.0

mysql - 在 MySQL 导入 : ERROR at line 32769: Unknown command '\' '

具有 10+ 百万行的 MySQL 表 - 如何使用索引加快搜索速度?

javascript - 如何删除对象中的键并替换为它的值?

java - NXP NFC NDEF 标签内存大小问题

android - 使用 Retrofit 发布正文 JSON

android - Android中保存文件的正确路径