[英]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.