我是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));
}
}
}
当我执行我的应用时,我有这个结果
但我想获得这个结果:
请帮助我!
编辑:对不起,如果我复制一个主题,但经过多次搜索,我找不到肯定的结果。如果我的英语很差,我也会说法语;
亲切!
更新
这是我数据库的代码
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){
}
}
答案 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;