我正在尝试使用JSON显示数据,具体取决于“共享首选项”,但是它不起作用。是否应该将共享首选项更改为全局变量?

 //Fetching email from shared preferences
        SharedPreferences sharedPreferences = getSharedPreferences(Config.SHARED_PREF_NAME, Context.MODE_PRIVATE);
        String email = sharedPreferences.getString(Config.EMAIL_SHARED_PREF,"Not Available");


这是我采用共享首选项的代码。我想显示以下代码:

private class GetContacts extends AsyncTask<Void, Void, Void> {

        @Override
        protected void onPreExecute() {
            super.onPreExecute();
            Toast.makeText(MapsActivity.this, "Json Data is downloading", Toast.LENGTH_LONG).show();
        }

        @Override
        protected Void doInBackground(Void... arg0) {
            HttpHandler sh = new HttpHandler();
            // Making a request to url and getting response
            String url = "http://192.168.43.176/GOLearn/lokasi.php?id="+email;
            String jsonStr = sh.makeServiceCall(url);

            Log.e(TAG, "Response from url: " + jsonStr);
            if (jsonStr != null) {
                try {
                    JSONObject jsonObj = new JSONObject(jsonStr);

                    // Getting JSON Array node
                    JSONArray contacts = jsonObj.getJSONArray("lokasi");

                    // looping through All Contacts
                    for (int i = 0; i < contacts.length(); i++) {
                        JSONObject c = contacts.getJSONObject(i);
                        String id = c.getString("id");
                        String name = c.getString("name");
                        String latitude = c.getString("latitude");
                        String longitude = c.getString("longitude");


                        // tmp hash map for single contact
                        HashMap<String, String> map = new HashMap<>();

                        // adding each child node to HashMap key => value
                        map.put("id", id);
                        map.put("name", name);
                        map.put("latitude", latitude);
                        map.put("longitude", longitude);
                        //contact.put("mobile", mobile);

                        // adding contact to contact list
                        dataList.add(map);
                    }
                } catch (final JSONException e) {
                    Log.e(TAG, "Json parsing error: " + e.getMessage());
                    runOnUiThread(new Runnable() {
                        @Override
                        public void run() {
                            Toast.makeText(getApplicationContext(),
                                    "Json parsing error: " + e.getMessage(),
                                    Toast.LENGTH_LONG).show();
                        }
                    });

                }

            } else {
                Log.e(TAG, "Couldn't get json from server.");
                runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        Toast.makeText(getApplicationContext(),
                                "Couldn't get json from server. Check LogCat for possible errors!",
                                Toast.LENGTH_LONG).show();
                    }
                });
            }

            return null;
        }


请帮忙

最佳答案

方法getSharedPreferences()不是AsyncTask中定义的方法,而是为Context或Activity对象定义的方法。

这里最好的方法可能是将Context传递给AsynkTask,您应该使用AsyncTask的构造器进行此操作。

public GetContacts(Context ctx){
    context = ctx;
}


自然地,您在GetContacts类中定义了Context context属性。

有了AsyncTask中可用的上下文,您可以执行以下操作:

SharedPreferences sharedPreferences = context.getSharedPreferences(Config.SHARED_PREF_NAME, Context.MODE_PRIVATE);


并且您的SharedPreferences将在AsyncTask内部起作用。

关于android - 如何显示来自MySQL的数据取决于android中的共享首选项?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41540655/

10-10 22:33