Android上下文错误
我有以下课程:Android上下文错误,android,android-context,Android,Android Context,我有以下课程: 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
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);
}
}
}
}
我使用context-context=getApplicationContext()从上一个方法传入上下文代码>有什么办法可以解决这个问题吗?试试看
SharedPreferences settings = context.getSharedPreferences("MyPreferencesName",Context.MODE_PRIVATE);
直接从中,没有getPreferences
方法,但是有一个getSharedReferences()
方法
请注意,如果使用默认的SharedReferences文件
编辑:只是活动的一部分。这种方法实际上是一种方便的方法
这只是调用底层的getSharedReferences(String,int)
方法,将此活动的类名作为首选项传入
名字
因此,如果您完全确定context
是活动的实例,则可以更改方法声明:
public void register(Activity activity, Intent intent) {
或铸造
SharedPreferences settings = ((Activity)context).getPreferences(Context.MODE_PRIVATE);
但是,如果context
不是活动的实例,则您必须依赖其他方法来访问首选项。请尝试
SharedPreferences settings = context.getSharedPreferences("MyPreferencesName",Context.MODE_PRIVATE);
直接从中,没有getPreferences
方法,但是有一个getSharedReferences()
方法
请注意,如果使用默认的SharedReferences文件
编辑:只是活动的一部分。这种方法实际上是一种方便的方法
这只是调用底层的getSharedReferences(String,int)
方法,将此活动的类名作为首选项传入
名字
因此,如果您完全确定context
是活动的实例,则可以更改方法声明:
public void register(Activity activity, Intent intent) {
或铸造
SharedPreferences settings = ((Activity)context).getPreferences(Context.MODE_PRIVATE);
但是,如果context
不是活动的一个实例,您将不得不依赖其他方法来访问首选项。Ahh好的,我读得不够多,我看到了这个代码示例,但我想这只是一个活动。”SharedPreferences sharedPref=getActivity().getPreferences(Context.MODE_PRIVATE);'@ρцσѕρєK仅是一个活动方法。@user2004988这只是活动的一部分,所以是的,你是对的:)@user2004988不客气:-)请随意接受这个答案(单击镂空的复选标记)。啊,好吧,我读得不够,我看到了这个代码示例,但我想它只是为了一个活动SharedPreferences sharedPref=getActivity().getPreferences(Context.MODE_PRIVATE);'@ρцσѕρєK只有一个活动方法。@user2004988这只是活动的一部分,所以是的,你是对的:)@user2004988不客气:-)请随意接受这个答案(单击镂空的复选标记)。