Android 无法获取小部件的SharedReference

Android 无法获取小部件的SharedReference,android,widget,sharedpreferences,Android,Widget,Sharedpreferences,我想开发一个小部件。。。但是我在从AppWidgetProvider向小部件传递字符串时遇到了一个问题…我是通过共享首选项来实现的 当我将一个变量存储在SharedReferences中时,问题就出现了。当我试图获取它的值时,它返回的不是空值,而是类似这样的值:“ 虽然WidgetPrefs.xml中存在该变量,但返回该值,我认为prefs变量有错误,但我不确定 这是WidgetConfig的代码: public class ActivityWidgetConfig extends Activi

我想开发一个小部件。。。但是我在从AppWidgetProvider向小部件传递字符串时遇到了一个问题…我是通过共享首选项来实现的

当我将一个变量存储在SharedReferences中时,问题就出现了。当我试图获取它的值时,它返回的不是空值,而是类似这样的值:“

虽然WidgetPrefs.xml中存在该变量,但返回该值,我认为prefs变量有错误,但我不确定

这是WidgetConfig的代码:

public class ActivityWidgetConfig extends Activity implements OnClickListener{

private int widgetId = 0;

private String titlestring;
private String textstring;

private EditText etTitle;
private EditText etText;

private ImageButton btnTitle;
private ImageButton btnText;

private ImageView previewIcon;

private Button iconButton;
private Button createButton;

private int icon_id;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_widgetconfig);

    Intent intentOrigen = getIntent();
    Bundle params = intentOrigen.getExtras();

    widgetId = params.getInt(AppWidgetManager.EXTRA_APPWIDGET_ID, AppWidgetManager.INVALID_APPWIDGET_ID);

    setResult(RESULT_CANCELED);

    etTitle = (EditText) findViewById(R.id.etTitle);
    etText = (EditText) findViewById(R.id.etText);
    btnTitle = (ImageButton) findViewById(R.id.btnTitle);
    btnText = (ImageButton) findViewById(R.id.btnText);
    createButton = (Button)findViewById(R.id.createButton);
    iconButton = (Button)findViewById(R.id.iconButton);

    btnTitle.setOnClickListener(this);
    btnText.setOnClickListener(this);
    createButton.setOnClickListener(this);
    iconButton.setOnClickListener(this);

    SharedPreferences prefs = getSharedPreferences("WidgetPrefs", Context.MODE_PRIVATE);
    titlestring = prefs.getString("widgettitle", "");
    textstring = prefs.getString("widgettext", "");
    icon_id = prefs.getInt("widgeticon_id", android.R.drawable.stat_sys_warning);

    etTitle.setText(titlestring);
    etText.setText(textstring);

    previewIcon = (ImageView) findViewById(R.id.previewIcon);
    previewIcon.setImageResource(icon_id);

}

@Override
public void onClick(View v) {
    SharedPreferences prefs = getSharedPreferences("WidgetPrefs", Context.MODE_PRIVATE);
    Editor editor = prefs.edit();
    switch (v.getId()){
        case R.id.btnTitle:
            editor.remove("widgettitle");
            editor.commit();
            etTitle.setText("");
            break;
        case R.id.btnText:
            editor.remove("widgettext");
            editor.commit();
            etText.setText("");
            break;
        case R.id.createButton:
            editor.putString("widgettitle", titlestring);  
            final String textstring=etText.getText().toString();
            editor.putString("widgettext", textstring);
            editor.putInt("widgeticon_id", icon_id);
            editor.commit();

            AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(ActivityWidgetConfig.this);
            WidgetOne.updateWidget(ActivityWidgetConfig.this, appWidgetManager, widgetId);
            Intent resultado = new Intent();
            resultado.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, widgetId);
            setResult(RESULT_OK, resultado);
            finish();
            break;
        case R.id.iconButton:
            Intent i = new Intent(this, ActivityIcons.class); 
            startActivityForResult(i, 1);
            break;
    }
}
 }
这是小部件的代码:

public class WidgetOne extends AppWidgetProvider {
@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {

        for (int i = 0; i < appWidgetIds.length; i++) 
        {
            //ID del widget actual
            int widgetId = appWidgetIds[i];

            //Actualizamos el widget actual
            //updateWidget(context, appWidgetManager, widgetId);
        }

}


@Override
public void onReceive(Context context, Intent intent) {

    if (intent.getAction().equals("com.iamaner.ACTUALIZAR_WIDGET")) {

//          //Obtenemos el widget manager y la lista de IDs de nuestro widget
//          ComponentName wgt = 
//              new ComponentName(context, MiWidget.class);
//          
//          AppWidgetManager widgetManager =
//              AppWidgetManager.getInstance(context);
//          
//          int[] appWidgetIds = widgetManager.getAppWidgetIds(wgt);
//          
//          //Actualizamos todos los widgets
//          for(int i=0; i<appWidgetIds.length; i++)
//              actualizarWidget(context, widgetManager, appWidgetIds[i]);

        //Obtenemos el ID del widget a actualizar
        int widgetId = intent.getIntExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, AppWidgetManager.INVALID_APPWIDGET_ID);

        //Obtenemos el widget manager de nuestro contexto
        AppWidgetManager widgetManager = AppWidgetManager.getInstance(context);

        //Actualizamos el widget
        //if (widgetId != AppWidgetManager.INVALID_APPWIDGET_ID) {
        //  actualizarWidget(context, widgetManager, widgetId);
        //}
    }

    super.onReceive(context, intent);
}

public static void updateWidget(Context context, AppWidgetManager appWidgetManager, int widgetId)
{
    SharedPreferences prefs = context.getSharedPreferences("WidgetPrefs", Context.MODE_PRIVATE);
    RemoteViews controles = new RemoteViews(context.getPackageName(), R.layout.widget_1);

    //Asociamos los 'eventos' al widget
    Intent intent = new Intent("com.iamaner.ACTUALIZAR_WIDGET");
    intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, widgetId);

    controles.setTextViewText(R.id.txtMensaje, prefs.getString("widgettitle", ""));
    controles.setTextViewText(R.id.txtMensaje, prefs.getString("widgetext", ""));

    controles.setImageViewResource(R.id.ivIcon, icon_id);

    appWidgetManager.updateAppWidget(widgetId, controles);
}

}
公共类WidgetOne扩展了AppWidgetProvider{
@凌驾
公共void onUpdate(上下文上下文,AppWidgetManager AppWidgetManager,int[]AppWidgetId){
for(int i=0;i//对于(int i=0;iNevermind),问题是我为SharedReferences字符串指定了不同的名称

通过在Widget类中执行此操作解决了此问题:

prefs.getString("widgettext","");

您是否尝试过将“WidgetPrefs”重命名为其他名称以查看其是否有效。从我所看到的情况来看,它应该可以像现在一样工作。还没有,但我会尝试…谢谢!我正在考虑字符串变量必须用final修改…您认为如何?