2016-03-15 43 views
0

我在Android中从container获得空值。无法在Android中获取container.addView()

@Bind(R.id.container) 
ViewGroup container; 

private void addUploadToList(String uploadID, String filename) { 
     LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     View uploadProgressView = inflater.inflate(R.layout.view_upload_progress, null); 
     UploadProgressViewHolder viewHolder = new UploadProgressViewHolder(uploadProgressView, filename); 
     viewHolder.uploadId = uploadID; 
     container.addView(viewHolder.itemView, 0); 
     uploadProgressHolders.put(uploadID, viewHolder); 
} 

我不能让值container = null,例外的是:

System.err: java.lang.NullPointerException 
System.err:  at kr.co.composer.callrecord.recorder.CallRecordService.addUploadToList(CallRecordService.java:164) 

这个模块,我从工作完美的民俗。

https://github.com/gotev/android-upload-service/tree/master/examples/app

我想用onMultipartUploadClick()这种融入我的项目将文件保存时要成功上传。

线后:

recorder.stop();

这个文件在我的项目: http://pastebin.com/KATBMTCe

此文件extends Servicein Github responsitoryAppCompatActivity延伸。

这是所有问题,我尝试使用此GitHub中的代码responsitory来自动上传何时调用结束。

+0

您传递给addUploadToList的对象是否已正确初始化? – Nick

+0

您尚未初始化变量“容器”。 –

+0

如果是片段 – Sanny

回答

0

变量container未初始化。与初始化,

WindowManager container = (WindowManager) getSystemService(Context.WINDOW_SERVICE) 

所以你的代码会变得,

private void addUploadToList(String uploadID, String filename) { 
    LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    WindowManager container = (WindowManager) getSystemService(WINDOW_SERVICE); 
    WindowManager.LayoutParams params = new WindowManager.LayoutParams(
     //WindowManager.LayoutParams.TYPE_INPUT_METHOD | 
     WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY,// | WindowManager.LayoutParams.TYPE_SYSTEM_ALERT, 
     WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH | WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL, 
     PixelFormat.TRANSLUCENT); 
    params.gravity = Gravity.RIGHT | Gravity.TOP; 

    View uploadProgressView = inflater.inflate(R.layout.traslucent, null); 
    UploadProgressViewHolder viewHolder = new UploadProgressViewHolder(uploadProgressView, filename);  
    viewHolder.uploadId = uploadID; 
    uploadProgressHolders.put(uploadID, viewHolder); 
    container.addView(viewHolder.itemView, params); 
} 
+0

我遇到错误:无法找到符号方法getLayoutParams() – lask

+0

谢谢@K Neeraj Lal。我尝试这个代码,它运行正常,但似乎无法正常工作。 – lask

0

您正在使用Butterknife。你需要在活动/片段中注入视图。

活动

@Override public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.simple_activity); 
    ButterKnife.bind(this); 
    // TODO Use fields... 
} 

片段

@Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
    View view = inflater.inflate(R.layout.fancy_fragment, container, false); 
    ButterKnife.bind(this, view); 
    // TODO Use fields... 
    return view; 
} 
+0

是的,我使用Butterknife,但我不能像你写的那样改变代码。 – lask

+0

我不是为什么你不能这样做! –

0

如果你想使用的服务,使用LocalBroadcastManager自定义事件,从Activity听它,做下载工作中Activity作为MultipartUploadRequestAsync

CallRecordService.java

try { 
     recorder.stop(); 
     //emit event 
     LocalBroadcastManager.getInstance(this).sendBroadcast(new Intent("download-event")); 
    } catch (Exception e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 

我相信你有活性的启动service.Put低于乌尔活动代码

@Override 
    protected void onCreate(Bundle savedInstanceState) { 
     .... 


     //register and listen event 
     LocalBroadcastManager.getInstance(this).registerReceiver(new DownloadReceiver(), new IntentFilter("download-event")); 

    } 


    private class DownloadReceiver extends BroadcastReceiver { 
     @Override 
     public void onReceive(Context context, Intent intent) { 
      // call multipart download function here 
     } 
    } 

有了这样至少你在活动注入布局通常情况下,可以清楚知道为什么containernull。确保你的xml布局文件中有正确的id。