我无法从android中的片段中读取活动中的数据库信息

时间:2017-10-06 12:00:28

标签: android sqlite android-fragments

我是android编程的初学者但是我很难从片段中读取活动中的sqlite数据库信息。

这是我的片段活动:

package cm.mavis.easylife.les_fragment;

import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.support.design.widget.FloatingActionButton;
import android.support.v4.app.Fragment;
import android.support.v7.app.AlertDialog;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ListView;

import cm.mavis.easylife.ChoixRecherche;
import cm.mavis.easylife.DataHelper;
import cm.mavis.easylife.LectureInfos;
import cm.mavis.easylife.R;

public class FragmentRecherche extends Fragment {
String[] liste;
protected Cursor cursor;
DataHelper dbcenter;
ListView  listview;
public static Context fragmentRecherche;


public static FragmentRecherche newInstance() {
    FragmentRecherche fragment = new FragmentRecherche();
    return fragment;
}
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);


}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    View rootView = inflater.inflate(R.layout.fragment_recherche, container, false);

    FloatingActionButton floatingActionButton = rootView.findViewById(R.id.fab);
    floatingActionButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Intent intent = new Intent(getContext(), ChoixRecherche.class);
            startActivity(intent);
        }
    });


    listview = rootView.findViewById(R.id.liste_recherche);

    fragmentRecherche = getActivity();
    dbcenter = new DataHelper(getActivity());
    RefreshList();


    return rootView;
}

public void RefreshList() {
SQLiteDatabase database = dbcenter.getReadableDatabase();
cursor = database.rawQuery("select * from cni_perdu", null);
liste = new String[cursor.getCount()];
cursor.moveToFirst();

for (int cc = 0; cc < cursor.getCount(); cc++){
    cursor.moveToPosition(cc);
    liste[cc] = cursor.getString(1);
}

listview.setAdapter(new ArrayAdapter(getActivity(), android.R.layout.simple_list_item_1, liste));
listview.setSelected(true);

listview.setOnItemClickListener(new AdapterView.OnItemClickListener() {
    @Override
    public void onItemClick(AdapterView arg0, View arg1, int arg2, long arg3) {

        final String selection = liste[arg2];
        final CharSequence[] dialogitem = {"Voir", "Suprimer"};

        AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
        builder.setTitle("Option");
        builder.setIcon(R.drawable.mes_voyage);
        builder.setItems(dialogitem, new DialogInterface.OnClickListener(){
            public void onClick(DialogInterface dialog, int item){
                switch (item){
                    case 0:

                        Intent intent = new Intent(getActivity(), LectureInfos.class);
                        intent.putExtra("", selection);
                        startActivity(intent);
                        RefreshList();
                        break;

                    case 1:
                        SQLiteDatabase database = dbcenter.getWritableDatabase();
                        database.execSQL("delete from cni_perdu where prenom = '" + selection + "'");
                        dbcenter.close();
                        RefreshList();
                        break;
                }
            }
        });
        builder.create().show();
    }
});
    ((ArrayAdapter)listview.getAdapter()).notifyDataSetInvalidated();

}
@Override
}

  int id = item.getItemId();

    if (id == R.id.action_settings) {
     return super.onOptionsItemSelected(item);
  }
}

这是我的活动:

package cm.mavis.easylife;

import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.widget.TextView;

public class LectureInfos extends AppCompatActivity {
DataHelper dataHelper;
protected Cursor cursor;
TextView textView1, textView2, textView3, textView4;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_lecture_infos);

    dataHelper = new DataHelper(this);
    textView1 = (TextView) findViewById(R.id.textview1);
    textView2 = (TextView) findViewById(R.id.textview2);
    textView3 = (TextView) findViewById(R.id.textview3);
    textView4 = (TextView) findViewById(R.id.textview4);

    SQLiteDatabase database = dataHelper.getReadableDatabase();
    cursor = database.rawQuery("SELECT * FROM cni_perdu where nom = '" +
            getIntent().getStringExtra("nom") + "'", null);
    cursor.moveToFirst();

    if (cursor.getCount() > 0) {
        cursor.moveToPosition(0);
        textView1.setText(cursor.getString(1));
        textView2.setText(cursor.getString(2));
        textView3.setText(cursor.getString(3));
        textView4.setText(cursor.getString(4));
    }
  }
}

当我执行我的应用时,我有这个结果

enter image description here

但我想获得这个结果:

enter image description here

请帮助我!

编辑:对不起,如果我复制一个主题,但经过多次搜索,我找不到肯定的结果。如果我的英语很差,我也会说法语;

亲切!

更新

这是我数据库的代码

package cm.mavis.easylife;


import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;


public class DataHelper extends SQLiteOpenHelper{
private static final String DATABASE_NAME = "piece_perdu.db";
private static final  int DATABASE_VERSION = 3;
public DataHelper(Context context){
    super(context, DATABASE_NAME,null,DATABASE_VERSION);
}


public void onCreate(SQLiteDatabase database){
    String sql = "create table if not exit cni_perdu(nom text null, prenom text null, ville text null, quartier text null);";
    Log.d("Data", "onCreate: "+sql);
    database.execSQL(sql);
}

@Override
public void onUpgrade(SQLiteDatabase arg0, int arg1, int arg2){

}
}

2 个答案:

答案 0 :(得分:1)

 Intent intent = new Intent(getActivity(), LectureInfos.class);
                    intent.putExtra("nom", selection);
                    startActivity(intent);
                    RefreshList();
                    break;

你没有传递putExtra Argument Name。

尝试

 intent.putExtra("nom", selection);

在您的DBHelper类

public void onCreate(SQLiteDatabase database){
    String sql = "create table if not exists  cni_perdu(nom text null, prenom text null, ville text null, quartier text null);";
    Log.d("Data", "onCreate: "+sql);
    database.execSQL(sql);
}

你的语法错了。你写了“退出”而不是“存在”

答案 1 :(得分:1)

FragmentRecherche 类中的intent.putExtra("", selection);更改为intent.putExtra("nom", selection);

<强>记住

intent.putExtra()始终采用键值对的形式。如果您想从intent获取数据,则必须使用key中传递的getIntent().getStringExtra()中的intent.putExtra() {/ 1}}

例如 - :

从活动一中发送意图附加内容

Intent intent = new Intent(Main.this, Second.class);
                    intent.putExtra("foo", message);
                    startActivity(intent);

从第二个活动的意图中获取额外内容

String msg  = getIntent().getStringExtra("foo");

现在,您的代码必须是 FragmentRecherche

 Intent intent = new Intent(getActivity(), LectureInfos.class);
                    intent.putExtra("nom", selection);
                    startActivity(intent);
                    RefreshList();
                    break;