Android由众多Activity组成,每个Activity对应不同的功能和UI,但是每个Activity都是一个单独的类,所以需要传递参数。一般来讲,Android中传递参数是在不同的Activity中。大致上有5类方案:
1 静态 static
定义方法:
public class MainActivity extends TabActivity {
public static DatabaseHelper mHelper;
public static SQLiteDatabase db;
}
使用方法:
public class QQList extends Activity{
try{
db=MainActivity.db;
}catch(Exception e){
e.printStackTrace();
}
}
2 单例 Singleton
定义方法:
public class SingleSocket {
/*
* GG单例模式的第四个版本,既解决了“懒汉式的”多线程问题,又解决了资源浪费的现象,看上去是一种不错的选择
*/
//Socket成员
private Socket socket=null;
//对单例本身引用的名称
private static SingleSocket sSocket;
public Socket getSocket() {
return socket;
}
public void initSocket(String ip,int port ) {
try{
socket=new Socket(ip,port);
}catch(Exception e){
e.printStackTrace();
}
}
//构造函数私有化
private SingleSocket() {
}
//提供一个全局的静态方法
public static SingleSocket getSingle() {
if(sSocket == null) {
synchronized (SingleSocket.class) {
if(sSocket == null) {
sSocket = new SingleSocket();
}
}
}
return sSocket;
}
}
使用方法:
public class MainActivity extends TabActivity {
private SingleSocket olsocket=SingleSocket.getSingle();
private Socket socket=null;
}
3 通过Intent传递
Intent是Android的类,含有传递参数的方法,类似于jsp中的get,但可传的参数类型支持很少。
定义方法:
public class ClientActivity extends Activity {
Intent intent = new Intent();
Bundle bundle = new Bundle();
bundle.putString("Usr", Usr);
bundle.putString("Psd", Psd);
intent.putExtras(bundle);
intent.setClass(ClientActivity.this, MainActivity.class);
}
使用方法:
Bundle bundle = getIntent().getExtras();
Usr = bundle.getString("Usr");
Psd=bundle.getString("Psd");
4 Socket传递
这个无需多说,创建Socket和ServerSocket对,进行通信。
5 SQLite数据库
创建数据库方法:
package com.android.client;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.database.sqlite.SQLiteDatabase.CursorFactory;
public class DatabaseHelper extends SQLiteOpenHelper{
/*public static final String TB_XINLANGWEIBO="XINLANGWEIBO";
public static final String TB_QQGROUP="QQGROUP";
public static final String TB_WEB="WEB";
public static final String TB_QQLIST="QQLIST";
public static final String TB_CLIENTPUB="CLIENTPUB";
public static final String XINLANGWEIBO_ID="_id";
public static final String QQGROUP_ID="_id";
public static final String WEB_ID="_id";
public static final String CLIENTPUB_ID="_id";
public static final String QQLIST_ID="_id";
public static final String QQLIST_NICK="NICK";*/
public static final String TB_BUSINESS="BUSINESS";
public static final String ID="_id";
public static final String CLASS="CLASS";
public static final String CONTENT="CONTENT";
public static final String FROM="FRM";
public static final String WHO="WHO";
public DatabaseHelper(Context context,String name,CursorFactory factory,int version){
super(context,name,factory,version);
}
@Override
public void onCreate(SQLiteDatabase arg0){
//arg0.execSQL("CREATE TABLE IF NOT EXISTS "+TB_XINLANGWEIBO+"(_id INTEGER PRIMARY KEY AUTOINCREMENT,CONTENT TEXT);");
//arg0.execSQL("CREATE TABLE IF NOT EXISTS "+TB_QQGROUP+"(_id INTEGER PRIMARY KEY AUTOINCREMENT,CONTENT TEXT);");
//arg0.execSQL("CREATE TABLE IF NOT EXISTS "+TB_WEB+"(_id INTEGER PRIMARY KEY AUTOINCREMENT,CONTENT TEXT);");
//arg0.execSQL("CREATE TABLE IF NOT EXISTS "+TB_QQLIST+"(_id TEXT PRIMARY KEY,NICK TEXT);");
//arg0.execSQL("CREATE TABLE IF NOT EXISTS "+TB_CLIENTPUB+"(_id INTEGER PRIMARY KEY AUTOINCREMENT,CONTENT TEXT);");
arg0.execSQL("CREATE TABLE IF NOT EXISTS "+TB_BUSINESS+"(_id INTEGER PRIMARY KEY AUTOINCREMENT,CLASS TEXT,CONTENT TEXT,FRM TEXT,WHO TEXT);");
}
@Override
public void onUpgrade(SQLiteDatabase db,int oldVertion,int newVersion){
//db.execSQL("DROP TABLE IF EXISTS"+TB_XINLANGWEIBO);
//db.execSQL("DROP TABLE IF EXISTS"+TB_QQGROUP);
//db.execSQL("DROP TABLE IF EXISTS"+TB_WEB);
//db.execSQL("DROP TABLE IF EXISTS"+TB_QQLIST);
onCreate(db);
}
}
调用之:
try{
//创建数据库(如果数据库文件已经存在就不会再创建)
mHelper = new DatabaseHelper(this,DB_NAME,null,VERSION);
db=mHelper.getWritableDatabase();
}catch (Exception ee){
AlertDialog dlg1=new AlertDialog.Builder(this)
.setMessage(ee.getMessage())
.setPositiveButton("Ok", null)
.show();
}
使用方法,其实就是查询数据库:
try{
cursor=db.query(TB_NAME, new String []{"_id","NICK"},null, null, null, null,null);
}catch(Exception ee){
ee.printStackTrace();
AlertDialog dlg=new AlertDialog.Builder(QQList.this)
.setMessage("没找到表")
.setPositiveButton("Ok", null)
.show();
}
当然类似于数据库的传递方案还有很多,最常见的就是使用xml文件,但是思路一样,以上便是针对Android参数传递的一点总结。
分享到:
相关推荐
本教程将详细介绍如何在Android中通过Java语句与HTML中的JavaScript进行互调,并传递参数。 首先,我们需要在Android项目中引入`WebView`组件。在XML布局文件中添加一个`WebView`: ```xml android:id="@+id/...
你可以直接将这些值作为参数传递给WebService,同时也可以作为返回值接收。例如,如果你有一个获取用户ID的WebService方法,可以这样在Android端调用: ```java // 创建SoapObject并设置参数 SoapObject request = ...
总结,JNI参数传递涉及基本类型、自定义对象和系统对象。理解和熟练掌握这些技术对于深入Android开发和优化性能至关重要。在实际应用中,应特别注意内存管理和对象生命周期,以确保代码的稳定性和效率。通过实践和...
总结来说,通过Android的WebView组件和`addJavascriptInterface`,我们可以轻松地在JavaScript和Android之间建立通信桥梁,传递包括JSON在内的各种数据。这种技术在混合式应用开发中十分常见,帮助开发者利用...
总结起来,Android应用中添加多个Activity可以提高程序结构的清晰度,而参数传递则实现了Activity间的通信。理解并熟练运用这些技术,对于构建功能丰富的Android应用至关重要。通过Intent和Bundle,开发者可以传递...
总结,Android多进程通讯AIDL传递Parcelable对象是一种强大的技术,可以实现复杂的跨进程数据交换。正确理解和使用AIDL能够帮助开发者构建健壮的、具有扩展性的Android应用。在实际开发中,应结合具体需求选择合适的...
在Android应用开发中,Activity是用户界面的基本...总结,Activity之间的参数传递是Android应用开发中的常见操作,开发者可以根据需求选择适合的方法。理解并熟练掌握这些机制,将有助于构建更高效、更灵活的应用程序。
总结来说,Android组件间的通信是通过Intent实现的,它允许开发者在不同的Activity、Service或BroadcastReceiver之间传递数据。了解和熟练使用Intent是每个Android开发者必须掌握的基本技能。通过阅读源码和实际操作...
总结来说,理解View的构造方法和它们的参数对于Android开发至关重要。正确使用构造方法可以帮助我们更好地控制View的行为,同时,通过处理AttributeSet和defStyleAttr,我们可以实现对XML布局文件中属性的定制,提升...
总结,Android的Activity是应用程序的核心组成部分,理解和熟练运用Activity的启动、跳转以及参数传递是开发高效Android应用的基础。通过对Activity生命周期的管理、启动模式的选择以及Intent Flag的使用,可以实现...
总结来说,`Service`和`Activity`之间的数据传递可以通过Intent参数、BroadcastReceiver或Binder实现。BroadcastReceiver适用于不频繁的数据交换,而Binder适合需要频繁交互且在同一个进程的情况。开发者应根据具体...
总结,Android客户端实现带参数的文件上传涉及到网络请求库的使用、构建多部分请求体以及发送HTTP请求。服务器端则需要解析请求中的文件和参数,执行相应的处理并返回响应。在实际开发中,务必注意安全性和性能优化...
总结,`<include />`标签是Android XML布局中的一个重要特性,它简化了布局的管理和复用,提高了代码的可维护性。通过合理地使用`<include />`和`<merge>`,以及结合其他技术如Data Binding,我们可以构建出更加高效...
本文将深入探讨如何使用AIDL在Android中实现跨进程通信,特别是如何传递自定义对象。 首先,我们需要理解AIDL的基本概念。AIDL是一种类似Java的接口定义语言,它允许我们声明方法签名,包括参数类型和返回值类型。...
总结,通过以上步骤,我们成功实现了Retrofit的简单封装,包括公共参数的统一处理、上传下载的进度显示,以及同时提交图片和文本数据。这个过程不仅提高了代码的可复用性和可维护性,还使得网络请求更加灵活和高效。
总结来说,JNI中的参数传递涉及以下步骤: 1. 在Java中定义与C++结构体匹配的类。 2. 使用`javah`生成C/C++头文件。 3. 在C++中实现本地方法,注意使用正确的JNI类型和函数来处理参数和返回值。 4. 转换C++数据类型...
### JNI中C和Java参数传递详解 #### 一、引言 Java Native Interface (JNI) 是Java平台标准的一部分,用于让Java代码与其他语言写的代码进行交互。本文将深入探讨在JNI环境中,C/C++和Java之间如何进行参数传递,...
在Android编程中,有时我们需要从一个应用程序(APP)启动另一个应用程序,并且可能还需要在启动时传递参数。这个过程可以通过Intent对象来实现。以下是对标题和描述中提到的知识点的详细说明: 1. **启动其他APP的...
Binder 是Android中实现IPC的核心组件,它允许对象在进程间传递。Parcelables是Android序列化的一种高效方式,常用于跨进程传输数据。IBinder 是所有跨进程通信的基础接口,AIDL生成的Stub类就是它的实现。 总的来...
本篇将详细介绍如何在Android Activity中使用Intent实现页面跳转与参数传递。 首先,让我们来看一下在`FirstActivity`中如何创建Intent并传递参数。在`onClick`方法中,我们首先实例化一个新的Intent对象: ```...