用不用主要看實際應用的需求。 眾所周知,A應用要訪問B應用中的數據,最好的方法就是B應用提供給B壹些訪問接口,然後A通過這個接口來進行對B中的數據進行增刪改查 為了統壹接口,Android中申明了內容提供者(ContentProvider)這樣壹個組件
如何從外部使用VB腳本訪問WinCC變量連接?如果我沒有理解錯的話可能妳是想讀寫win變量吧? 在腳本中,C腳本基本是這樣的語句: Float F; F=GetTagFloat(“TAG1”)這樣就可以讀出TAG1的數值,不管TAG1是外部變量還是內部變量,在腳本中都要加上“”,否則就默認是對腳本內部使用的...
從外部如何訪問靜態內部類壹、外部類訪問內部類的成員需要創建內部類的對象,之後可以訪問內部類的任何成員,包括private成員,需要註意的是成員內部類不可以有靜態成員。
二、內部類不可以直接實例化,要通過外部類才可以,但是靜態成員要求系統默認初始化,所以會出現矛盾,解決的好辦法就是規定:成員內部類不可以有靜態成員,靜態初始化塊,靜態方法等。
三、在static方法(類加載時已經初始化)調用內部類的必須先創建外部類。
下面在說下嵌套類:如果妳不需要內部類對象與其外圍類對象之間有聯系,那妳可以將內部類聲明為static。這通常稱為嵌套類(nested
class)。想要理解static應用於內部類時的含義,妳就必須記住,普通的內部類對象隱含地保存了壹個引用,指向創建它的外圍類對象。然而,當內部
類是static的時,就不是這樣了。嵌套類意味著:
1. 要創建嵌套類的對象,並不需要其外圍類的對象。
2. 不能從嵌套類的對象中訪問非靜態的外圍類對象。
請問如何從外部訪問企業web服務器?在妳們的路由器的虛擬服務裏映射80端口給WEB服務的那臺電腦即可用妳的公網IP域名訪問了
如何訪問外部應用程序的SharedPreference示例AessFromSharePreferenceDemo將說明如何讀取其他應用程序(博客中另壹項目:DemoSharedPreferences)中保存的SharedPreferences數據
1)新建android項目,項目名稱:AessFromSharePreferenceDemo
2)在繼承自Activity的類中編寫相應代碼:
package .mesada.demo1;
import android.app.Activity;
import android.content.Context;
import android.content.SharedPreferences;
import android.content.pm.PackageManager.NameNotFoundException;
import android.os.Bundle;
import android.util.Log;
import android.widget.TextView;
/**
* This is a demo about aess SharedPreferences.
*
* @author Xiaolong Long
* @date 2010-12-30
* @version 1.0
*/
public class MainActivity extends Activity {
private static final String TAG = "MainActivity";
private static final boolean mIsPrintInfo = true;
public static final String PREFERENCE_PACKAGE = ".mesada.demo";
public static final String PREFERENCE_NAME = "MyPrefsFile";
public static final String KEY_USERNAME = "USERNAME";
public static final String KEY_PWD = "PASSWORD";
public static int MODE = Context.MODE_WORLD_READABLE
+ Context.MODE_WORLD_WRITEABLE;
TextView mUserNameView;
TextView mPwdView;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
if (mIsPrintInfo)
Log.i(TAG, "onCreate()...");
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
setupControlers();
Context context = null;
try {
context = createPackageContext(PREFERENCE_PACKAGE,
Context.CONTEXT_IGNORE_SECURITY);
} catch (NameNotFoundException e) {
e.printStackTrace();
}
SharedPreferences settings = context.getSharedPreferences(
PREFERENCE_NAME, MODE);
String userName = settings.getString(KEY_USERNAME, "姚明");
String userPwd = settings.getString(KEY_PWD, "123456");
mUserNameView.setText(userName);
mPwdView.setText(userPwd);
}
/**
*
* Find the views that were identified by the id attributes from the XML.
*
* @param
* @return
* @date 2010-12-30
* @author Xiaolong Long
*/
private void setupControlers() {
if (mIsPrintInfo)
Log.i(TAG, "setupControlers()...");
mUserNameView = (TextView) findViewById(R.id.userName);
mPwdView = (TextView) findViewById(R.id.password);
}
}
2.main.xml 如下所示:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android=":schemas.android./apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/lblusername" />
<TextView
android:id="@+id/userName"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout>
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/lblpassword" />
<TextView
android:id="@+id/password"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout>
</LinearLayout>
3.AndroidMainfest.xml 文件,如下所示:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android=":schemas.android./apk/res/android"
package=".mesada.demo1"
android:versionCode="1"
android:versionName="1.0">
<application android:icon="@drawable/icon" android:label="@string/app_name">
<activity android:name=".MainActivity"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
<uses-sdk android:minSdkVersion="7" />
</manifest>
4)完成。
Android應用 如何關閉另壹個應用
1、am.killBackgroundProcesses(String packageName);
這個方法只能停止在後臺的應用,如果應用在前臺就不能用。
2、andorid.os.Process.killProcess(int pid);
這個方法對於前臺應用同樣沒用,因為的我需求時殺死前臺的app所以沒有測試後臺是否能夠殺死,但是這個用來大範圍的殺死後臺進程是比較好用的:
ActivityManager am = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
List<ActivityManager.RunningAppProcessInfo> infos = am.getRunningAppProcesses();
for (ActivityManager.RunningAppProcessInfo info:infos) {
if (info.processName.equals(MainActivity.packageName)){
android.os.Process.killProcess(info.pid);
}
如何從壹個app訪問另壹個app用apkplug框架吧,不用android:sharedUserId 可以直接運行和***用未安裝的apk。
如何訪問壹個應用程序的數據庫中使用SQLite另壹個應用程序1. SQLite數據庫特點
(1)SQLite數據庫是開源的嵌入式數據庫,無需獨立的數據庫引擎,直接嵌入到應用程序進程中,因此,通過API,應用程序可以直接操作它。
(2)事務的處理是原子的,壹致的,獨立的,可持久化的(ACID),即使在系統崩潰和掉電後。
(3)SQLite數據庫通過獨占性與***享鎖來實現事務的獨立處理。
(4)壹個單獨的跨平臺的磁盤文件就能夠存儲壹個數據庫。
(5)能支持2TB級的數據。
(6)自包含,無外部依賴性。
(7)支持NULL,INTEGER,NUMERIC,REAL,TEXT和BLOG等數據類型。
(8)SQLite數據庫沒有用戶帳戶的概念。數據庫的權限僅依賴於文件系統。
2. SQLite數據庫的基本操作
(1)建立數據庫
sqlite3 data.sqlite3
在當前目錄下建立了名為data.sqlite3的數據庫。
(2)建立數據表
create table call_list (id INTEGER PRIMARY KEY, type NUMERIC,telnum NUMERIC,bttime TEXT,tcount NUMERIC,charge_rate NUMERIC,charge_sum NUMERIC);
建立了名為 call_list的數據表,有7個字段,分別為id,type,telnum,bttime,tcount,charge_sum.charge_rate.
(3)向數據表中插入數據
insert into call_list values ($num,1,2,'new',4,5,6);
(4)查詢數據表中的數據
select * from call_list;
(5)修改call_list表中的數據
update call_list set id=00001000 where id=10001;
(6)刪除表中的數據記錄
delete from call_list where id=1000;
(7)SQlite中的其它常用命令
.tables -列出所有的數據庫中的數據表
.schema tablename -列出指定數據表的結構
.quit -離開數據庫
(8)SQLite數據庫的導入與導出
a.將data.sqlite數據庫的數據全部導出:
sqlite3 data.sqlite
>.output dd.sql
>.dump
這樣,數據就保存在dd.sql的文件中,註意這個文件不是數據庫,而是SQL語句。
然後再把這些數據導入到另外壹個數據庫data1.sqlite數據庫中。
sqlite3 data1.sqlite
>.read dd.sql
這樣,數據就從data.sqlite數據庫復制到data1.sqlite數據庫中去了。
b.將數據表中的數據導出到a.txt中去
.output a.txt 輸出重定向到a.txt
select * from call_list;
c.將導出的表中的數據導入到另壹個數據庫的新建的表中去
如:當從data.sqlite中的call_list表中導出了數據,再導入到另外壹個數據庫表call中去。
首先建立表call.
然後.import a.txt call 即可。
3. C語言操作Sqlite數據庫
API:
int sqlite3_open(const char* filename,sqlite3**ppdb);
第壹個參數用來指定數據庫文件名。
第二個參數是壹個數據庫標識符指針。
如果打開數據庫成功,則返回0,否則返回壹個錯誤代碼。
int sqlite3_close(sqlite3*);
傳遞的參數是數據庫標識符指針用來關閉數據庫,操作成功是返回0,否則返回壹個錯誤代碼。
int sqlite3_errcode(sqlite3*db);
const char* sqlite3_errmsg(sqlite3* db);
const char* sqlite3_errmsg16(sqlite3* db);
這三個函數都是返回錯誤信息,第壹個函數返回的是最近調用數據庫接口的錯誤代碼,第二,第三個函數是返回最近調用數據庫接口的錯誤信息。第二個函數返回的錯誤信息是用UTF-8編碼的,第三個函數返回的錯誤信息是用UTF-16編碼的。
int sqlite3_exec(sqlite3*,const char*sql,int(*callback)(void*,int,char**,char**),void*,**errmsg);
這個函數非常重用,是用來執行SQLite數據庫的SQL語句的。
第壹個參數是sqlite數據庫標識符指針。
第二個參數是要執行的SQL語句。
第三個參數是壹個回調函數,在執行查詢操作時用到,其它的操作可以傳空值即NULL。
第四個參數是傳遞給回調函數第壹個參數的實參。
第五個參數是壹個錯誤信息。
如何訪問REST應用中的jsp可以把resteasy理解為servlet,只不過它支持rest風格的接口定義方式。jsp中form表單提交時壹定要指定壹個action,告訴瀏覽器請求服務器的地址。然後resteasy需要將該地址映射到具體類的具體方法上,該方法就會執行。
如何從外部導入Excel數據?下面把我這幾天做導入的方式總結下,供大家參考下,只提供思路,具體實現自己去想。 1.我們往數據庫中導入的數據通常是有固定的模板的,也就是有列頭,但是可能excel中的壹條數據分布存儲在不同的數據表中,那麽我們怎麽來導入了,我們可以在類文件中直接拼接sql語句插入,這樣做的話我認為比較麻煩。我的做法是:在數據中建壹個中間表暫且叫做Temp表跟excel中列壹壹對應,其中表中多加state列用來標識數據驗證失敗還是成功的(0代表數據沒有問題,-1代表有問題)、failReason記錄導入失敗原因,然後再添加壹個配置文件來做excel列和數據表的映射。 2.要導入的數據通常要做驗證,那些不符合導入規則的數據時不允許或者不能導入的。我把數據分兩步來驗證,壹部分在代碼段驗證,壹部分在數據庫驗證。至於怎麽分那就自己去根據情況分析了。我是把諸如字符長度限制,正則表達式規則限制等放 在代碼段驗證,把諸如數據庫中字典值是否存在等要訪問數據庫的驗證放在數據中驗證,這樣的話就可以減少訪問數據庫的次數。把再客戶端驗證過的數據,不管是通過的不同過的都插入到temp表中,只是state值不同。 3.然後怎麽把插入temp中數據分別插入到不同的數據表中了,大家壹定想到了觸發器,沒有錯,我用的就是after觸發器,在我把excel中的數據插入到temp表中的時候,那麽就會觸發after觸發器,在觸發器中對插入的數據進行處理,如果插入的數據state值為-1,代表在代碼端的驗證就沒有通過,那麽就不需要進行下壹步處理了,如果state值為0,那麽在觸發器中接著處理,比如檢測字典值在字典表中存不存在等,如果不滿足要求就把temp表中的當前插入的記錄state值改成-1,把校驗失敗原因更新到failReason字段中,不再處理。如果壹切校驗都沒有問題的話,那麽就編寫插入語句,把數據插入到不同的表中去。 4.數據導入完成了,那麽那些有問題數據怎麽辦了?把它查詢出來生成壹個按原模板後加壹列“失敗原因”導成excel文件,其實就是state值為-1的那些記錄,然後返回給用戶查看。 通過以上步驟之後那麽整個導入功能就完成了,以上只是壹種思路,望大家完善。 本站技術原創欄目文章均為中睿原創或編譯,轉載請註明:文章來自中睿,本站保留追究責任的權利。