如何将数据从 sqlite 数据库传递到另一个活动?
Posted
技术标签:
【中文标题】如何将数据从 sqlite 数据库传递到另一个活动?【英文标题】:How do I pass data from sqlite database to another activity? 【发布时间】:2016-11-13 10:46:19 【问题描述】:我有一个包含列 id,eng,kurd,ar 的数据库,并从中填充了一个列表视图,该列表视图仅显示数据库中的 eng。当用户单击列表视图中的项目时,我想传递具有相同 id 的 eng,kurd,ar,但是当我单击一个项目时,我的应用程序崩溃,但其他一切正常,非其他类的[适配器,sqliteopenhelper]
MainActivity.class
package com.rawa.rawadict;
import android.content.Intent;
import android.database.Cursor;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.TextView;
import java.io.IOException;
import java.sql.SQLException;
import java.util.ArrayList;
public class MainActivity extends AppCompatActivity
Adapter adapter;
ArrayList<Item> myList = new ArrayList<Item>();
ListView myListView;
Databasehelper myDbHelper = new Databasehelper(this);
String engRes,kurdRes,arRes;
@Override
protected void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
try
myDbHelper.createDatabase();
myDbHelper.openDatabase();
catch (IOException e)
throw new Error("Unable to create database");
Cursor cursor = myDbHelper.QueryData("select * from zankodict");
if (cursor != null)
if (cursor.moveToFirst())
do
Item itemm = new Item();
itemm.setId(cursor.getString(0));
itemm.setEng(cursor.getString(1));
myList.add(itemm);
while (cursor.moveToNext());
adapter = new Adapter(this, R.layout.single_row, myList);
myListView = (ListView) findViewById(R.id.lView);
myListView.setAdapter(adapter);
adapter.notifyDataSetChanged();
myListView.setOnItemClickListener(new AdapterView.OnItemClickListener()
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id)
TextView text_id = (TextView) view.findViewById(R.id.tid);
String sel_id = text_id.getText().toString();
Cursor cursor = myDbHelper.QueryData("SELECT * FROM zankodict WHERE id =" + sel_id);
if (cursor != null)
if (cursor.moveToFirst())
do
engRes = cursor.getString(1);
kurdRes=cursor.getString(2);
arRes= cursor.getString(3);
while (cursor.moveToNext());
// create intent to start another activity
Intent intent = new Intent(MainActivity.this, Result.class);
// add the selected text item to our intent.
Bundle extras = new Bundle();
extras.putString("eng",engRes);
extras.putString("kurd",kurdRes);
extras.putString("ar",arRes);
intent.putExtras(extras);
startActivity(intent);
) ;
Result.class
package com.rawa.rawadict;
import android.content.Intent;
import android.database.Cursor;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.widget.TextView;
import java.io.IOException;
import java.util.ArrayList;
public class Result extends AppCompatActivity
TextView etView2,ktView2,atView2;
@Override
protected void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
setContentView(R.layout.result_view);
etView2 = (TextView) findViewById(R.id.etextView2);
ktView2 = (TextView) findViewById(R.id.ktextView2);
atView2 = (TextView) findViewById(R.id.atextView2);
Intent intent = getIntent();
Bundle extras = intent.getExtras();
String enG = extras.getString("eng");
String kurD = extras.getString("kurd");
String aR = extras.getString("ar");
etView2.setText(enG);
etView2.setText(kurD);
etView2.setText(aR);
我想将 Bundle 传递给 Result.class
【问题讨论】:
您说它崩溃了,请添加您的 Logcat 输出,以便我们看到崩溃错误。 兄弟它给了我这个错误错误类型3错误:活动类不存在 ***.com/questions/20915266/… 我也尝试过此链接中的技术,但它不起作用。 【参考方案1】:将数据从活动传递到活动,特别是从您的数据库传递数据的最佳方法是传递一个 (id) 作为额外的意图,然后当您到达目标活动时,提取它并使用它来查询您的数据库身份证。
这将减少您必须通过您的意图实例的数据量。
但是,如果您只想传递 3 个项目,则可以使用 Intent Extras 而不是这样的 Bundle:
Intent intent = new Intent(MainActivity.this, Result.class);
intent.putExtra("eng",engRes);
intent.putExtra"kurd",kurdRes);
intent.putExtra("ar",arRes);
startActivity(intent);
在您的结果活动中提取它;
Intent intent = getIntent();
String enG = intent.getExtras().getString("eng");
String kurD = intent.getExtras().getString("kurd");
String aR = intent.getExtras().getString("ar");
我希望这会有所帮助,祝你好运!
【讨论】:
他以捆绑的形式通过;不直接作为额外的 本质上是一样的。这不会解决任何错误 @Eenvincible 这和我做过的一样吗?错误日志是什么意思,因为我是android开发的新手。谢谢 当您的应用程序崩溃时,您的 IDE 控制台中会打印出一个原因!那是错误日志; 顺便说一句,我以为你还有别的想法。以上是关于如何将数据从 sqlite 数据库传递到另一个活动?的主要内容,如果未能解决你的问题,请参考以下文章
如何将价值从 recyclerview 项目传递到另一个活动