Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 带有片段的getBaseContext()错误_Android_Sqlite - Fatal编程技术网

Android 带有片段的getBaseContext()错误

Android 带有片段的getBaseContext()错误,android,sqlite,Android,Sqlite,我正在创建一个待办事项列表。我正在处理数据库部分,以便用户可以键入项目,当他们单击“添加”按钮时,列表将填充。现在,当我使用getBaseContext时,不断出现错误 我在关注这家伙的教程,而我的教程使用的是片段,我不断得到一个错误,我想这是因为我使用片段 我在getBaseContext中遇到一个错误 这是我的FragmentTasks.Java package com.example.navbar; import android.content.Context; import andro

我正在创建一个待办事项列表。我正在处理数据库部分,以便用户可以键入项目,当他们单击“添加”按钮时,列表将填充。现在,当我使用getBaseContext时,不断出现错误

我在关注这家伙的教程,而我的教程使用的是片段,我不断得到一个错误,我想这是因为我使用片段

我在getBaseContext中遇到一个错误

这是我的FragmentTasks.Java

package com.example.navbar;

import android.content.Context;
import android.content.ContentValues;
import android.content.Context;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.ListFragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;


/**
 * A simple {@link Fragment} subclass.
 * 
 */
public class FragmentTasks extends ListFragment implements OnClickListener{

    public FragmentTasks() {
        // Required empty public constructor
    }
    EditText task;
    DataHandler handler;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        // Inflate the layout for this fragment

        View view = inflater.inflate(R.layout.fragment_tasks, container, false);
        Button button = (Button)view.findViewById(R.id.button1);
        button.setOnClickListener(this);
        task = (EditText)view.findViewById(R.id.editText1);


        //return inflater.inflate(R.layout.fragment_tasks, container, false);
        /* button.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                Activity activity = getActivity();

                if (activity != null) {
                    Toast.makeText(activity, R.string.toast_you_just_clicked_a_fragment, Toast.LENGTH_LONG).show();
                }
            }

        });


        */

        return view;

    }

    @Override
    public void onActivityCreated(Bundle savedInstanceState){
        super.onActivityCreated(savedInstanceState);

        ArrayAdapter adapter=ArrayAdapter.createFromResource(getActivity(), R.array.tasks, android.R.layout.simple_list_item_1);
        setListAdapter(adapter);
    }

    public void onItemClick(AdapterView<?> adapterView, View view, int i, long l){
        Toast.makeText(getActivity(), "Item "+i,Toast.LENGTH_SHORT).show();

    }

    @Override
    public void onClick(View v) {
        // TODO Auto-generated method stub
        String getTasks = task.getText().toString();
        handler = new DataHandler(getBaseContext()); **//Error is here!**
        handler.open();
        long id = handler.insertData(getTasks);
        Toast.makeText(getBaseContext(), "Data inserted", Toast.LENGTH_LONG).show(); **//And Here!**
        handler.close();


    }

}

尝试使用getActivity而不是getBaseContext。承载片段的活动用作片段的上下文

下面是官方的android开发者指南,它解释了如何在片段中获取上下文

以下是相关段落

注意:如果在片段中需要上下文对象,可以调用getActivity。但是,请注意,仅当片段附加到活动时才调用getActivity。当片段尚未附加或在其生命周期结束时被分离时,getActivity将返回null

基于上面的文档,我认为最终的问题是您正在将onClickListener实现为片段的一种方法,因此我不确定该活动是否已经创建。您可以尝试使用getApplicationContext,或者最好将onclicklistener移动到您的onCreateView方法中

更换

button.setOnClickListener(this);

尝试使用v.getContext

Toast.makeText(v.getContext(), "Data inserted", Toast.LENGTH_LONG).show();
  button.setOnClickListener(new OnClickListener() { ... } );
Toast.makeText(v.getContext(), "Data inserted", Toast.LENGTH_LONG).show();