简体   繁体   English

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

[英]I can't read database information in activity from fragment in android

I'm beginner in android programmation but and I have difficulty to read sqlite database information in activity from fragment. 我是android编程的初学者,但是我很难从片段中读取活动中的sqlite数据库信息。

That is my Fragment activity: 那是我的Fragment活动:

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);
  }
}

And that is my activity: 那就是我的活动:

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));
    }
  }
}

When I execute my app, I have this result 当我执行我的应用程序时,我得到了这个结果

在此处输入图片说明

But I want to obtain this result: 但我想获得以下结果:

在此处输入图片说明

Please help me! 请帮我!

edit: excuse me if I duplicate one topic but after a many searching I don't find a positive result. 编辑:对不起,如果我重复一个主题,但是经过多次搜索后,我没有找到正面的结果。 Also excuse me if my English is poor I'm a French-speaking; 如果我的英语不好,也请说法语。

Cordially! 热诚!


UPDATE 更新

that is the code of my database 那是我数据库的代码

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){

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

you didnt pass the putExtra Argument Name. 您没有传递putExtra参数名称。

Try 尝试

 intent.putExtra("nom", selection);

And in your DBHelper Class 在您的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);
}

Your syntax is wrong .you wrote " exit " instead of " exists " 您的语法错误。您写了“ exit”而不是“ existing”

Change your intent.putExtra("", selection); 更改您的intent.putExtra("", selection); to intent.putExtra("nom", selection); intent.putExtra("nom", selection); in FragmentRecherche class FragmentRecherche类中

Remember 记得

intent.putExtra() always be in the form of key value pair. intent.putExtra()始终为键值对形式。 If you want to get data from intent you have to use the same key in getIntent().getStringExtra() which you have passed in intent.putExtra() 如果要从intent获取数据,则必须在getIntent().getStringExtra()中使用与传入intent.putExtra()相同的key

For Example -: 例如 -:

sending extras with intent from Activity one 从活动一发送额外意图

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

getting extras from intent in Second Activity 从第二次活动的意图中获得额外收益

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

Now, Your code must be to your FragmentRecherche 现在,您的代码必须位于FragmentRecherche

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM