2013-12-21 2 views
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(); 
      } 
     } 
    } 
    } 

} 

답변

1

appWidgetManager 필드가 null입니다.

+0

제안 주셔서 감사합니다 @ Toon Borgers ... 값을 추가하려고했지만 또 다른 NullPointerException으로 끝납니다. 내부에서 하나를 대상으로 지정할 방법을 찾을 수 없습니다. 시도 : "AppWidgetManager manager = AppWidgetManager.getInstance (context); manager.updateAppWidget (thisWidget, views);"- 일부 코드를 사용하여 시연 해 주시겠습니까? (페이지 상단에 코드를 업데이트했습니다) –

관련 문제