Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/sharepoint/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android:Intent';缺少s extra(使用小部件)_Android_Android Intent_Widget_Android Pendingintent - Fatal编程技术网

Android:Intent';缺少s extra(使用小部件)

Android:Intent';缺少s extra(使用小部件),android,android-intent,widget,android-pendingintent,Android,Android Intent,Widget,Android Pendingintent,我想制作一个有两个按钮的小部件(一个是带有数字的文本视图)。一个按钮应增加数字,另一个按钮应减少数字 这是我的变量(2个动作名称和一个整数表示数字) onUpdate()命令: 最后是我的onReturn(),我想在其中将计数器设置为我给Intent的值并执行操作: @Override public void onReceive(Context context, Intent intent) { super.onReceive(context, intent); counter = in

我想制作一个有两个按钮的小部件(一个是带有数字的文本视图)。一个按钮应增加数字,另一个按钮应减少数字

这是我的变量(2个动作名称和一个整数表示数字)

onUpdate()命令:

最后是我的onReturn(),我想在其中将计数器设置为我给Intent的值并执行操作:

 @Override
 public void onReceive(Context context, Intent intent) {
 super.onReceive(context, intent);
 counter = intent.getIntExtra("safeInt", 0); 

 if (PLUS_ONE.equals(intent.getAction())) {
     counter++;
     RemoteViews remoteViews = new RemoteViews(context.getPackageName(), R.layout.plus1counter_widget);
     remoteViews.setTextViewText(R.id.counter_widget, Integer.toString(counter));
     AppWidgetManager.getInstance(context).updateAppWidget(new ComponentName(context, Plus1CounterAppWidgetProvider.class), remoteViews);
 }

 if (MINUS_ONE.equals(intent.getAction())) {
     counter--;
     RemoteViews remoteViews = new RemoteViews(context.getPackageName(), R.layout.plus1counter_widget);
     remoteViews.setTextViewText(R.id.counter_widget, Integer.toString(counter));
     AppWidgetManager.getInstance(context).updateAppWidget(new ComponentName(context, Plus1CounterAppWidgetProvider.class), remoteViews);
 }}
打电话

counter = intent.getIntExtra("safeInt", 0); 
计数器始终设置为0,这意味着没有额外的值。 我就是不明白为什么!有什么解决办法吗?:)

我找到了另一个解决方案。 我只是使用了SharedReferences,而不是Intent,它起了作用!:) 代码如下:

import android.app.PendingIntent;
import android.appwidget.AppWidgetManager;
import android.appwidget.AppWidgetProvider;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.widget.RemoteViews;

public class Plus1CounterAppWidgetProvider extends AppWidgetProvider{

private static final String PLUS_ONE = "Plus1";
private static final String MINUS_ONE = "Minus1";
private static final String REFRESH_COUNTER = "Refresh";
static int counter = 0;

@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[]  appWidgetIds) {
 final int N = appWidgetIds.length;
 for (int i=0; i<N; i++) {
     int appWidgetId = appWidgetIds[i];
     RemoteViews remoteViews = new RemoteViews(context.getPackageName(),  R.layout.plus1counter_widget);
     remoteViews.setOnClickPendingIntent(R.id.counter_widget, getPendingSelfIntent(context, PLUS_ONE));
     remoteViews.setOnClickPendingIntent(R.id.img_downWid, getPendingSelfIntent(context, MINUS_ONE));
     remoteViews.setOnClickPendingIntent(R.id.img_refreshWid, getPendingSelfIntent(context, REFRESH_COUNTER));
     appWidgetManager.updateAppWidget(appWidgetId, remoteViews);
  }
 }

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

 SharedPreferences sharedPref = context.getSharedPreferences("com.plus1counter.safeFile", Context.MODE_PRIVATE);
 counter = sharedPref.getInt("safeFile", 0);
 if(counter == 100){
     counter = 0;
 }

 if (PLUS_ONE.equals(intent.getAction())) {
     counter++;
     writeSharedPrefs(sharedPref);         
 }

 if (MINUS_ONE.equals(intent.getAction())) {
     counter--;
     writeSharedPrefs(sharedPref);
 }

 if(REFRESH_COUNTER.equals(intent.getAction())){
     counter = 0;
     writeSharedPrefs(sharedPref);
 }
 RemoteViews remoteViews = new RemoteViews(context.getPackageName(), R.layout.plus1counter_widget);
 remoteViews.setTextViewText(R.id.counter_widget, Integer.toString(counter));
 AppWidgetManager.getInstance(context).updateAppWidget(new ComponentName(context, Plus1CounterAppWidgetProvider.class), remoteViews);
 }

 public void writeSharedPrefs(SharedPreferences sharedPref){
 SharedPreferences.Editor editor = sharedPref.edit();
 editor.putInt("safeFile", counter);
 editor.commit();
 }

 protected PendingIntent getPendingSelfIntent(Context context, String action) {
 Intent intent = new Intent(context, Plus1CounterAppWidgetProvider.class);
 intent.setAction(action);
 return PendingIntent.getBroadcast(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
 }

 }
导入android.app.pendingent;
导入android.appwidget.AppWidgetManager;
导入android.appwidget.AppWidgetProvider;
导入android.content.ComponentName;
导入android.content.Context;
导入android.content.Intent;
导入android.content.SharedReferences;
导入android.widget.remoteview;
公共类Plus1CounterAppWidgetProvider扩展了AppWidgetProvider{
私有静态最终字符串加上_ONE=“Plus1”;
私有静态最终字符串减去_ONE=“Minus1”;
私有静态最终字符串刷新\u COUNTER=“刷新”;
静态整数计数器=0;
@凌驾
公共void onUpdate(上下文上下文,AppWidgetManager AppWidgetManager,int[]AppWidgetId){
final int N=appWidgetIds.length;
对于(int i=0;i此处为最终应用程序
 @Override
 public void onReceive(Context context, Intent intent) {
 super.onReceive(context, intent);
 counter = intent.getIntExtra("safeInt", 0); 

 if (PLUS_ONE.equals(intent.getAction())) {
     counter++;
     RemoteViews remoteViews = new RemoteViews(context.getPackageName(), R.layout.plus1counter_widget);
     remoteViews.setTextViewText(R.id.counter_widget, Integer.toString(counter));
     AppWidgetManager.getInstance(context).updateAppWidget(new ComponentName(context, Plus1CounterAppWidgetProvider.class), remoteViews);
 }

 if (MINUS_ONE.equals(intent.getAction())) {
     counter--;
     RemoteViews remoteViews = new RemoteViews(context.getPackageName(), R.layout.plus1counter_widget);
     remoteViews.setTextViewText(R.id.counter_widget, Integer.toString(counter));
     AppWidgetManager.getInstance(context).updateAppWidget(new ComponentName(context, Plus1CounterAppWidgetProvider.class), remoteViews);
 }}
counter = intent.getIntExtra("safeInt", 0); 
import android.app.PendingIntent;
import android.appwidget.AppWidgetManager;
import android.appwidget.AppWidgetProvider;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.widget.RemoteViews;

public class Plus1CounterAppWidgetProvider extends AppWidgetProvider{

private static final String PLUS_ONE = "Plus1";
private static final String MINUS_ONE = "Minus1";
private static final String REFRESH_COUNTER = "Refresh";
static int counter = 0;

@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[]  appWidgetIds) {
 final int N = appWidgetIds.length;
 for (int i=0; i<N; i++) {
     int appWidgetId = appWidgetIds[i];
     RemoteViews remoteViews = new RemoteViews(context.getPackageName(),  R.layout.plus1counter_widget);
     remoteViews.setOnClickPendingIntent(R.id.counter_widget, getPendingSelfIntent(context, PLUS_ONE));
     remoteViews.setOnClickPendingIntent(R.id.img_downWid, getPendingSelfIntent(context, MINUS_ONE));
     remoteViews.setOnClickPendingIntent(R.id.img_refreshWid, getPendingSelfIntent(context, REFRESH_COUNTER));
     appWidgetManager.updateAppWidget(appWidgetId, remoteViews);
  }
 }

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

 SharedPreferences sharedPref = context.getSharedPreferences("com.plus1counter.safeFile", Context.MODE_PRIVATE);
 counter = sharedPref.getInt("safeFile", 0);
 if(counter == 100){
     counter = 0;
 }

 if (PLUS_ONE.equals(intent.getAction())) {
     counter++;
     writeSharedPrefs(sharedPref);         
 }

 if (MINUS_ONE.equals(intent.getAction())) {
     counter--;
     writeSharedPrefs(sharedPref);
 }

 if(REFRESH_COUNTER.equals(intent.getAction())){
     counter = 0;
     writeSharedPrefs(sharedPref);
 }
 RemoteViews remoteViews = new RemoteViews(context.getPackageName(), R.layout.plus1counter_widget);
 remoteViews.setTextViewText(R.id.counter_widget, Integer.toString(counter));
 AppWidgetManager.getInstance(context).updateAppWidget(new ComponentName(context, Plus1CounterAppWidgetProvider.class), remoteViews);
 }

 public void writeSharedPrefs(SharedPreferences sharedPref){
 SharedPreferences.Editor editor = sharedPref.edit();
 editor.putInt("safeFile", counter);
 editor.commit();
 }

 protected PendingIntent getPendingSelfIntent(Context context, String action) {
 Intent intent = new Intent(context, Plus1CounterAppWidgetProvider.class);
 intent.setAction(action);
 return PendingIntent.getBroadcast(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
 }

 }