1

我有以下课程:

package com.somedomain.enigma;

import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import java.util.List;

import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;

import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.util.Log;

public class APICall {
    private String DEBUG_TAG = "enigma";

    public void register(Context context, Intent intent) {
        final String URL = "http://somedomain.com:8888/register";

        String registrationId = intent.getStringExtra("registration_id");
        String error = intent.getStringExtra("error");
        String unregistered = intent.getStringExtra("unregistered"); 

        HttpClient httpclient = new DefaultHttpClient();
        HttpPost httppost = new HttpPost(URL);

        // Send a POST to the server to register the device
        if (registrationId != null) {
            List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(1);
            nameValuePairs.add(new BasicNameValuePair("registrationId", registrationId));
            try {
                httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
                HttpResponse response = httpclient.execute(httppost);
                int responseCode = response.getStatusLine().getStatusCode();
                if(responseCode == 200) {
                    SharedPreferences settings = context.getPreferences(Context.MODE_PRIVATE);
                    SharedPreferences.Editor editor = settings.edit();
                    editor.putString("registrationId", registrationId);
                    editor.commit();
                    Log.d(DEBUG_TAG, "Device registered successfully");
                } else {
                    Log.d(DEBUG_TAG, "Device registration failed");
                }
            } catch (UnsupportedEncodingException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (ClientProtocolException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }

        if (unregistered != null) {
            // get old registration ID from shared preferences
            // notify 3rd-party server about the unregistered ID
            Log.d(DEBUG_TAG, "Unregister request");
        } 

        if (error != null) {
            if ("SERVICE_NOT_AVAILABLE".equals(error)) {
               // optionally retry using exponential back-off
                Log.d(DEBUG_TAG, "Service not available");
            } else {
                // Unrecoverable error, log it
                Log.d(DEBUG_TAG, "Received error: " + error);
            }
        }
    }
}

"The method getPreferences(int) is undefined for the type Context"在这一行收到错误:

SharedPreferences settings = context.getPreferences(Context.MODE_PRIVATE);

我使用Context context = getApplicationContext();任何想法从以前的方法传递上下文如何解决这个问题?

4

1 回答 1

1

试试吧

SharedPreferences settings = context.getSharedPreferences("MyPreferencesName",Context.MODE_PRIVATE);

直接从文档中,没有getPreferences方法,但是有getSharedPreferences()方法。

请注意,如果您使用的是默认 SharedPreferences 文件,则可以执行

SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(context); 

编辑: getSharedPreferences()只是Activity课程的一部分。这种方法实际上是一种方便的方法。

这只是通过传入此活动的类名作为首选项名称来调用底层的 getSharedPreferences(String, int) 方法。

因此,如果您绝对确定这context是 Activity 的实例,您可以更改方法声明:

public void register(Activity activity, Intent intent) {

或投

SharedPreferences settings = ((Activity)context).getPreferences(Context.MODE_PRIVATE);

但是,如果context不是Activity实例,您将不得不依赖其他方法来访问 Preferences。

于 2013-01-23T18:28:45.700 回答