簡體   English   中英

嘗試調用虛擬方法 'java.lang.Object android.content.Context.getSystemService(java.lang.String)

[英]Attempt to invoke virtual method 'java.lang.Object android.content.Context.getSystemService(java.lang.String)

我想問一下,為什么我的代碼在設備上運行時不起作用,但是當我像 Genymotion 一樣在模擬器 android 上運行時,它運行良好..

有人在此鏈接上這樣說:除非在某些情況下,否則在 super.onCreate() 之后才能調用 Activity 超類上的方法。 請將 promptsView 的初始化推遲到調用 super.onCreate() 之后。

還是沒搞懂,如果有同樣的問題請告訴我。。

無論如何,如果我的解釋不好,我很抱歉..

public class DestinationListAdapter extends ArrayAdapter<DestinationModel> {

    Context context;
    int layoutResourceId;
    List<DestinationModel> data = Collections.emptyList();

    public DestinationListAdapter(Context context, int layoutResourceId, List<DestinationModel> data) {
        super(context, layoutResourceId, data);
        this.layoutResourceId = layoutResourceId;
        this.context = context;
        this.data = data;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {

        View row = convertView;
        DestinationHolder holder = null;

        if(row == null)
        {
            // Predicted Error At Line Below
            LayoutInflater inflater = ((Activity)context).getLayoutInflater();
            row = inflater.inflate(layoutResourceId, parent, false);

            holder = new DestinationHolder();
            holder.destination_id = (TextView) row.findViewById(R.id.destination_id);
            holder.destination_name = (TextView) row.findViewById(R.id.destination_name);

            row.setTag(holder);
        }
        else
        {
            holder = (DestinationHolder)row.getTag();
        }

        DestinationModel weather = data.get(position);
        holder.destination_id.setText(weather.getDestination_id());
        holder.destination_name.setText(weather.getDestination_name());

        return row;
    }

為了確保何時返回並繼續之前的活動,我剛剛添加並檢查了 getContext()!=null

這是一個很好的例子:

塊前

adapter = new ExampleAdapter(getContext());
adapter.setData(items);
listView.setAdapter(adapter);

並更好地替換 getActivity()!=null

例如:

if (getActivity()!=null){
    adapter = new ExampleAdapter(getActivity());
    adapter.setData(items);
    listView.setAdapter(adapter);
}

我認為這解決了所有與我的問題一樣出現相同錯誤的問題!

意識到您在生命周期中的哪個位置。 getContext()的值可能尚不可用。

例如,在DialogFragment ,在調用onCreateDialog()之前,上下文將不可用。 所以不要嘗試在構造函數中創建適配器,因為此時上下文仍然為空。

實際上,當某些東西作為空字節出現時,就會出現這個問題。 當我們使用回收器視圖時,它主要出現。 因為大多數人在 RecyclerViewAdpater 的 onCreateView 中混淆了。 一些代碼編寫者將 Layout inflater 編寫為 Tab 的布局。 但在這里我們將使用另一種布局,我們將在其中提及我們的內部 Recyclerview 布局。

view= LayoutInflater.from(mcontext).inflate(R.layout.**item_tab14**,parent,false);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM