1
나는 간단한 위젯을 가지고 있으며, onUpdate 메소드 밖에서 내용을 업데이트하려고합니다. 나는 : context와 appWidgetManager 필드 변수를 만들었고 컴파일러는 오류를주지 않지만 AppWidgetManager를 선언 한 두 줄에서 NullPointerException을 수신합니다.onUpdate 외부 AppWidgetManager?
NEF에게 필드 변수를 사용하는 이유는 무엇입니까?
private void ref(int z) {
views.setTextViewText(R.id.igePrint, ige[z].azIge);
AppWidgetManager manager = AppWidgetManager.getInstance(context);
manager.updateAppWidget(thisWidget, views);
//Log.e("<<check value>>", "the value of z is: " + z);
}
그리고 코드의 나머지 부분의 일부
: 당신이 값을 지정하지도package com.example.napiige;
import android.appwidget.AppWidgetManager;
import android.appwidget.AppWidgetProvider;
import android.content.ComponentName;
import android.content.Context;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
import android.widget.RemoteViews;
import android.widget.TextView;
public class MainActivity extends AppWidgetProvider {
RemoteViews views;
String azIge;
String igeBack;
static MainActivity[] ige = new MainActivity[3];
int x;
public static ComponentName thisWidget;
Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
x = (Integer)msg.obj;
ref(x);
}
};
Context context;
@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
views = new RemoteViews(context.getPackageName(), R.layout.example_appwidget);
thisWidget = new ComponentName(context, MainActivity.class);
final int N = appWidgetIds.length;
// Perform this loop procedure for each App Widget that belongs to this provider
for (int i=0; i<N; i++) {
int appWidgetId = appWidgetIds[i];
String ig1 = context.getString(R.string.ige1);
String ig2 = context.getString(R.string.ige2);
String ig3 = context.getString(R.string.ige3);
ige = new MainActivity[3];
ige[0] = new MainActivity();
ige[1] = new MainActivity();
ige[2] = new MainActivity();
ige[0].azIge = ig1;
ige[1].azIge = ig2;
ige[2].azIge = ig3;
Runnable myRunnable1 = new Task();
Thread myThread = new Thread(myRunnable1);
myThread.start();
appWidgetManager.updateAppWidget(thisWidget, views);
}
}
private void ref(int z) {
views.setTextViewText(R.id.igePrint, ige[z].azIge);
AppWidgetManager manager = AppWidgetManager.getInstance(context);
manager.updateAppWidget(thisWidget, views);
//Log.e("<<check value>>", "the value of z is: " + z);
}
class Task implements Runnable {
@Override
public void run() {
for (int i = 0; i < 3; i++) {
try {
Thread.sleep(3000);
// refreshing the text inside the loop calling the above refreshTextView method
int data = i;
Message msg = handler.obtainMessage(1, (int)data);
handler.sendMessage(msg);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
}
제안 주셔서 감사합니다 @ Toon Borgers ... 값을 추가하려고했지만 또 다른 NullPointerException으로 끝납니다. 내부에서 하나를 대상으로 지정할 방법을 찾을 수 없습니다. 시도 : "AppWidgetManager manager = AppWidgetManager.getInstance (context); manager.updateAppWidget (thisWidget, views);"- 일부 코드를 사용하여 시연 해 주시겠습니까? (페이지 상단에 코드를 업데이트했습니다) –