2014-02-24 55 views
-1

我創建appwidget,我試圖表明JSON的項目(圖像的和文字)在我appwidget(stackview插件)我成功創建的應用程序插件,我還可以在小部件顯示JSON但當我應該插件單擊我有錯誤NullPointerException異常機器人無法啓動接收機顯示java.lang.NullPointerException

這是我的代碼:

public class BriGeRemoteViewsService extends RemoteViewsService { 
@Override 
public RemoteViewsFactory onGetViewFactory(Intent intent) { 

    return new BriGeRemoteViewsFactory(this.getApplicationContext(), intent); 
} 

static class BriGeRemoteViewsFactory implements RemoteViewsFactory { 

    public static ArrayList<ItemI> itemList; 
    private static Context context; 
    private int appWidgetId; 

    public BriGeRemoteViewsFactory(Context context, Intent intent) { 
     this.context = context; 
        itemList = new ArrayList<ItemI>(); 
     this.appWidgetId = intent.getIntExtra(
       AppWidgetManager.EXTRA_APPWIDGET_ID, 
       AppWidgetManager.INVALID_APPWIDGET_ID); 
    } 

    @Override 
    public void onCreate() { 
     itemList = getData(); 
    } 

    @Override 
    public void onDataSetChanged() { 
     itemList = getData(); 
    } 

    @Override 
    public void onDestroy() { 
     itemList.clear(); 
    } 

    @Override 
    public int getCount() { 
     if (itemList != null) 
      return itemList.size(); 
     else 
      return 0; 
    } 

    @Override 
    public RemoteViews getViewAt(int position) { 
     ItemI item = itemList.get(position); 

     RemoteViews rv = new RemoteViews(context.getPackageName(), 
       R.layout.item_view); 

     rv.setTextViewText(R.id.widgettitle, item.getTitle()); 

     rv.setImageViewBitmap(R.id.img, getImageBitmap(item.getImage())); 

     Bundle extras = new Bundle(); 
     extras.putInt(BriGeWidgetProvider.EXTRA_ITEM, position); 
     Intent fillIntent = new Intent(); 
     fillIntent.putExtras(extras); 

     rv.setOnClickFillInIntent(R.id.item_root, fillIntent); 

     return rv; 
    } 

    private Bitmap getImageBitmap(String url) { 
     Bitmap bm = null; 
     try { 
      URL aURL = new URL(url); 
      URLConnection conn = aURL.openConnection(); 
      conn.connect(); 
      InputStream is = conn.getInputStream(); 
      BufferedInputStream bis = new BufferedInputStream(is); 
      bm = BitmapFactory.decodeStream(bis); 
      bis.close(); 
      is.close(); 
     } catch (IOException e) { 
     } 
     return bm; 
    } 

    @Override 
    public RemoteViews getLoadingView() { 
     return null; 
    } 

    @Override 
    public int getViewTypeCount() { 
     return 1; 
    } 

    @Override 
    public long getItemId(int position) { 
     return position; 
    } 

    @Override 
    public boolean hasStableIds() { 
     return true; 
    } 

    private static ArrayList<ItemI> getData() { 
     JsonParser jp = new JsonParser(context); 
     return jp.getDataAsList(); 
    } 
} 

}

public class BriGeWidgetProvider extends AppWidgetProvider { 
public static final String TOAST_ACTION = "com.example.android.stackwidget.TOAST_ACTION"; 
public static final String EXTRA_ITEM = "com.example.android.stackwidget.EXTRA_ITEM"; 
private RemoteViews views; 
private Intent intent; 


@Override 
public void onDeleted(Context context, int[] appWidgetIds) { 
    super.onDeleted(context, appWidgetIds); 
} 
@Override 
public void onDisabled(Context context) { 
    super.onDisabled(context); 
} 

@Override 
public void onEnabled(Context context) { 
    super.onEnabled(context); 
} 

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

    if (intent.getAction().equals(TOAST_ACTION)) { 

     int viewIndex = intent.getIntExtra(EXTRA_ITEM, 0); 

     ItemI item = BriGeRemoteViewsFactory.itemList.get(viewIndex); 

     context.startActivity(new Intent(context, WidgetResult.class) 
       .putExtra("KEY_title", item.getTitle()) 
       .putExtra("KEY_desc", item.getDescription()) 

       .putExtra("KEY_tabula", item.getJournal()) 
       .putExtra("KEY_datetime", item.getPubDate()) 
       .putExtra("KEY_image", item.getImage()) 
       .putExtra("KEY_startID", item.getStatID()) 

       .addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)); 

    } 
    super.onReceive(context, intent); 
} 

@SuppressWarnings("deprecation") 
@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]; 

     intent = new Intent(context, BriGeRemoteViewsService.class); 

     intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId); 

     views = new RemoteViews(context.getPackageName(), 
       R.layout.widget_layout); 
     views.setRemoteAdapter(appWidgetId, R.id.stackWidgetView, intent); 

     views.setEmptyView(R.id.stackWidgetView, R.id.stackWidgetEmptyView); 

     Intent templateIntent = new Intent(context, 
       BriGeWidgetProvider.class); 
     templateIntent.setAction(BriGeWidgetProvider.TOAST_ACTION); 
     templateIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, 
       appWidgetId); 
     intent.setData(Uri.parse(intent.toUri(Intent.URI_INTENT_SCHEME))); 
     PendingIntent templatePendingIntent = PendingIntent.getBroadcast(
       context, 0, templateIntent, 
       PendingIntent.FLAG_UPDATE_CURRENT); 
     views.setPendingIntentTemplate(R.id.stackWidgetView, 
       templatePendingIntent); 

     appWidgetManager.updateAppWidget(appWidgetId, views); 
    } 
    super.onUpdate(context, appWidgetManager, appWidgetIds); 
} 

}

的例外是此行

ItemI item = BriGeRemoteViewsFactory.itemList.get(viewIndex); 

這是一個WidgetResult類

public class WidgetResult extends Activity { 
public TextView widgetTitle, widgetDescription, widgetTabula, widgetDate; 
public String resulttitle, resutlTabul, resultdesc, resultimage, 
     resultPutdate, resutlStartID; 
public ImageView img; 

private ConnectionDetector cd; 
AlertDialogManager alert = new AlertDialogManager(); 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    requestWindowFeature(Window.FEATURE_NO_TITLE); 
    setContentView(R.layout.widget_result); 

    cd = new ConnectionDetector(getApplicationContext()); 

    widgetTitle = (TextView) findViewById(R.id.widgettitleDetails); 
    widgetDescription = (TextView) findViewById(R.id.widgetdescriptionDetails); 
    img = (ImageView) findViewById(R.id.widgetimageDetails); 
    widgetTabula = (TextView) findViewById(R.id.widgetDateTimeDetails); 
    widgetDate = (TextView) findViewById(R.id.widgetTabula); 

    Intent intent = getIntent(); 

    resulttitle = intent.getStringExtra("KEY_title"); 
    resultdesc = intent.getStringExtra("KEY_desc"); 

    resutlTabul = intent.getStringExtra("KEY_tabula"); 
    resultimage = intent.getStringExtra("KEY_image"); 
    resultPutdate = intent.getStringExtra("KEY_datetime"); 
    resutlStartID = intent.getStringExtra("KEY_startID"); 

    widgetTabula.setText(resutlTabul); 
    widgetTabula.setTypeface(MainActivity.tf2); 
    String ab = resultimage.replaceAll("-c.jpg", ".jpg"); 

    Log.e("imageeeeeeeeeeeeeeeeeeeeeeeeeeeee", ab); 
    if (!cd.isConnectingToInternet()) { 

    } else { 
     new DownloadTask().execute(ab); 
    } 

    widgetTitle.setText(resulttitle); 
    widgetTitle.setTypeface(MainActivity.tf2); 

    resultdesc = resultdesc.trim(); 

    widgetDescription.setText(resultdesc); 

} 

private Bitmap downloadUrl(String strUrl) throws IOException { 
    Bitmap bitmap = null; 
    InputStream iStream = null; 
    try { 
     URL url = new URL(strUrl); 

     HttpURLConnection urlConnection = (HttpURLConnection) url 
       .openConnection(); 

     urlConnection.connect(); 

     iStream = urlConnection.getInputStream(); 

     bitmap = BitmapFactory.decodeStream(iStream); 

    } catch (Exception e) { 
     Log.d("Exception while downloading url", e.toString()); 
    } finally { 
     iStream.close(); 
    } 

    return bitmap; 
} 

private class DownloadTask extends AsyncTask<String, Integer, Bitmap> { 
    Bitmap bitmap = null; 

    @Override 
    protected Bitmap doInBackground(String... url) { 
     try { 
      bitmap = downloadUrl(url[0]); 
     } catch (Exception e) { 
      Log.d("Background Task", e.toString()); 
     } 
     return bitmap; 
    } 

    @Override 
    protected void onPostExecute(Bitmap result) { 

     img.setImageBitmap(result); 
     Log.e("Bitmapppppppppppppppp", result.toString()); 

     // Toast.makeText(getBaseContext(), 
     // "Image downloaded successfully",Toast.LENGTH_SHORT).show(); 
    } 

} 

}

首次應用工作完美,但我可以插件聯繫,我沒有問題,但是當我關閉應用程序然後應該點擊 - 有一個例外

,如果有人知道的解決方案,請幫助我 感謝

My Log Cat error

+0

後整個日誌貓異常的構造,包括HTE引起,由 –

+0

這是我的錯誤logcat中(http://postimg.org/實例圖像/ 6688yt9z1 /) – user3293967

+0

你需要將它張貼你的問題,全面異常,並引起任何逐個的 –

回答

0

itemListBriGeRemoteViewsFactory從不實例化,所以當你做BriGeRemoteViewsFactory.itemList爲null。解決方法是通過添加下面一行到BriGeRemoteViewsFactory

itemList = new ArrayList<ItemI>(); 
+0

的一部分,謝謝你,我加入這一行,但我也有錯誤。我更新了我的職位(代碼)和 – user3293967

+0

您需要清理的問題,然後(刪除不必要的代碼,並張貼必要的logcat)再看看討好。我甚至無法看到你的新問題 –

+0

我添加了這一行(itemList = new ArrayList ();)BriGeRemoteViewsFactory的構造函數,但我也有錯誤 – user3293967

相關問題