2013-07-02 22 views
6

Tôi gặp sự cố khi gửi dữ liệu (chuỗi) từ hoạt động của mình đến lớp ứng dụngWidgetProvide của tôi.Gửi dữ liệu đến tiện ích (màn hình chính) của tôi

Tôi có phương thức có tên là updateWidget. Điều này được gọi bởi các widget cấu hình hoạt động khi widget đầu tiên được đặt trong màn hình chủ. Phương thức này cũng được gọi bởi phương thức onReceive khi nó nhận dữ liệu từ một trong các hoạt động của tôi khi người dùng nhập dữ liệu vào hoạt động đó.

Đây là vấn đề của tôi: tiện ích được đặt trong màn hình chính với tất cả dữ liệu ở đúng nơi. Nhưng khi hoạt động của tôi gửi dữ liệu onReceive (sử dụng ý định và tính năng bổ sung) dữ liệu không đi qua. Tôi chỉ nhận được một chuỗi rỗng trên extras.getString.

Tôi đã sử dụng ý định để gửi dữ liệu giữa các hoạt động trước đây, tôi có cần phải làm điều gì đó khác khi tôi gửi dữ liệu đến tiện ích con cung cấp lớp học không? Hoặc tôi chỉ là ngu ngốc và thiếu một cái gì đó hiển nhiên?

Tôi đã đính kèm (những gì tôi nghĩ là) các bit có liên quan của mã. Hãy cho tôi biết nếu bạn cần bất kỳ làm rõ hay bất kỳ mã nào khác.

Cảm ơn đã dành thời gian để đọc và cho bất kỳ sự giúp đỡ mà bạn có thể cung cấp cho,

Cheers Rakshak

các onListItemClick trong lớp phụ tùng cấu hình.

@Override 
    protected void onListItemClick(ListView l, View v, int position, long id) { 
     super.onListItemClick(l, v, position, id); 

     Cursor note = mDbHelper.fetchNote(id); 
     startManagingCursor(note); 
     String title = note.getString(note.getColumnIndexOrThrow(NotesDbAdapter.KEY_TITLE)); 
     String text = note.getString(note.getColumnIndexOrThrow(NotesDbAdapter.KEY_BODY)); 
     loadData(title); 


     Intent resultValue = new Intent(); 
     resultValue.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, mAppWidgetId);    
     setResult(RESULT_OK,resultValue); 
     finish(); 
} 



void loadData(String title) { 

    AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(this); 

    SingleNote.updateWidget(this, appWidgetManager, mAppWidgetId, title); 

} 

Mục đích đó gửi dữ liệu đến các onReceive (đây là một trong các lớp học hoạt động của tôi)

private void updateWidget() { 
    Intent i = new Intent(this, SingleNote.class); 
    i.setAction(SingleNote.UPDATE_ACTION); 
    Toast.makeText(getApplicationContext(),mTitleText.getText()+"from the activity", 
      Toast.LENGTH_SHORT).show();//This works just fine 
    i.putExtra("title", mTitleText.getText()); 
    sendBroadcast(i); 

}

phụ tùng của tôi cung cấp lớp

public class SingleNote extends AppWidgetProvider { 

public static String UPDATE_ACTION = "ActionUpdateSinglenoteWidget"; 
private static NotesDbAdapter mDbHelper; 



public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) { 
    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]; 



    // Tell the AppWidgetManager to perform an update on the current app widget 
     RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.singlenote_widget); 
     appWidgetManager.updateAppWidget(appWidgetId, views); 




    } 
} 

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

     String action = intent.getAction(); 
     Bundle extras = intent.getExtras(); 
     String title1 = extras.getString("title");//this value does not come through 
     Toast.makeText(context, title1,Toast.LENGTH_LONG).show();//this gives an empty space 

     if (action != null && action.equals(UPDATE_ACTION)) { 
       final AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context); 
       ComponentName name = new ComponentName(context, SingleNote.class); 
       int[] appWidgetId = AppWidgetManager.getInstance(context).getAppWidgetIds(name); 
       final int N = appWidgetId.length; 
       if (N < 1) 
       { 
        return ; 
       } 
       else { 
        int id = appWidgetId[N-1]; 
        updateWidget(context, appWidgetManager, id ,title1); 
       } 
     } 

     else { 
       super.onReceive(context, intent); 
     } 
} 



static void updateWidget(Context context, AppWidgetManager appWidgetManager, int appWidgetId, String title){ 

    RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.singlenote_widget); 
    views.setTextViewText(R.id.single_note_title, title); 
    appWidgetManager.updateAppWidget(appWidgetId, views); 



} 

Trả lời

0

Tôi đề nghị để thử thay thế i.putExtra("title", mTitleText.getText()); trong updateWidget() bằng i.putExtra("title", mTitleText.getText().toString());

String title1 = extras.getString("title"); 

hy vọng chuỗi, và mTitleText.getText() lợi nhuận Editable - điều này có thể không phù hợp

+0

Cảm ơn người đàn ông, mà chỉ làm việc tốt. – DrkStr