当前位置:  编程技术>移动开发
本页文章导读:
    ▪新版新浪微博api使用有关问题及相关解决方法        新版新浪微博api使用问题及相关解决办法 1.导入demo 工程后,工程报错。控制台的错误信息:Unable to resolve target 'android-4'。 问题原因:sdk版本不符,文件内所写的版本过低 解决办法:修改工.........
    ▪ contentprovider-读取写下联系人数据        contentprovider--读取写入联系人数据 本文主要使用contentprovider实现读取写入联系人数据,初步学习contentprovider的用法,摘自李刚的《疯狂android》contentprovider是不同应用程序之间进行数据交换.........
    ▪ Ubuntu/Debian停安装Phabricator       Ubuntu/Debian下安装Phabricator Installation:(出于简单考虑,这里不包含配置apache的环节,因此直接把phabricator安装到apache的/var/www,可参考phabricator docs进行更多配置)1. 如果sudo不能使用,则先.........

[1]新版新浪微博api使用有关问题及相关解决方法
    来源: 互联网  发布时间: 2014-02-18
新版新浪微博api使用问题及相关解决办法

1.导入demo 工程后,工程报错。控制台的错误信息:Unable to resolve target 'android-4'。

问题原因:sdk版本不符,文件内所写的版本过低

解决办法:修改工程目录下的project.properties文件里的内容target=android-4数字改成你机器里装过的android SDK版本就可以了。

               另外还有修改AndroidManifest.xml里的android:minSdkVersion="4"

2.将demo工程导入Eclipse后,按开发手册所言将weibo.sdk.android.sso.jar放在libs下,启动工程时报错如下

Unable to execute dex: Multiple dex files define Landroid/net/http/SslError;

Conversion to Dalvik format failed: Unable to execute dex: Multiple dex files define Landroid/net/http/SslError; 

问题原因:导入的jar包是双份sdk高版本出现这个问题。官方Demo不用导入weibo.sdk.android.sso.jar这个包。
               在工程weibo.sdk.android.sso.demo中已经包含了weibo.sdk.android.sso.jar的源代码。

解决办法:删掉libs下的weibo.sdk.android.sso.jar文件

3.导入工程后,中文乱码

问题原因:默认编码格式与文件格式不符

解决办法:在工程文件夹上右键选择Properties,然后再Resources下的text file encoding选择other->UTF-8

4.导入工程后AndroidManifest.xml文件里报错,    <uses-permission android:name="android.permission.WRITE_APN_SETTINGS" />

问题原因:我不知道

解决办法:project->clean。若以后还出现这个问题,则再clean

5.运行工程后,进行认证过程中程序崩溃

问题原因之一:demo里有个apiBtn 代码多余 一共两处 注释掉就好了

解决办法:注释掉就好了 //apiBtn.setVisibility(View.VISIBLE);

 

来自:http://www.cnblogs.com/orange-tree/archive/2013/03/13/2958211.html


    
[2] contentprovider-读取写下联系人数据
    来源: 互联网  发布时间: 2014-02-18
contentprovider--读取写入联系人数据
本文主要使用contentprovider实现读取写入联系人数据,初步学习contentprovider的用法,摘自李刚的《疯狂android》

contentprovider是不同应用程序之间进行数据交换的标准API,contentprovider以某种Uri的形式对外提供数据,允许其他应用访问或修改数据;其他应用程序使用contentresolver根据Uri去访问操作指定数据。

如果把contentprovider当成一个“网站”来看,那木如何完整开发一个contentprovider呢?步骤很简单:
1.定义自己的contentprovider类,该类需要继承android提供的contentprovider基类。
2.想android系统注册这个“网站”,也就是早androidmanifest.xml文件中注册这个contentprovider,就像注册activity一样,注册contentprovider时需要为它绑定一个域名。

android系统提供了contacts应用程序来管理联系人,而且android系统还为联系人管理提供contentprovider,这就允许其他应用程序以contentprovider来管理联系人数据。

android系统对联系人管理contentprovider的几个Uri如下

ContactsContract.Contract.CONTENT_Uri:管理联系人的Uri
ContactsContract.CommonDataKinds.Phone.CONTENT_URI:管理联系人的电话的Uri.
ContactsContract.CommonDataKinds.Email.Content_URI: 管理联系人的E-mail的Uri


知道联系人管理contentprovider的Uri之后,接下来就可在应用程序中通过contentresolver去操作系统的联系人数据了。
下面示例程序中包含两个按钮,一个按钮用于查询系统的联系人数据,一个按钮用于添加插入联系数据,具体代码如下:

1. main布局文件,由于测试学习使用,没有具体设计布局样式
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".MainActivity" >

    <Button 
        android:id="@+id/querybtn"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="query"/>
    
    <Button 
        android:id="@+id/addbtn"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="add"/>
    
    <EditText 
        android:id="@+id/name"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:inputType="text"/>
    
     <EditText 
        android:id="@+id/phone"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:inputType="phone"/>
    
      <EditText 
        android:id="@+id/email"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:inputType="textEmailAddress"/>
     
</LinearLayout>



2.result布局文件
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >
    
	<ExpandableListView 
	    android:id="@+id/list"
	    android:layout_width="match_parent"
	    android:layout_height="wrap_content"/>
    
</LinearLayout>



3.实现代码如下:
import java.util.ArrayList;

import android.app.Activity;
import android.app.AlertDialog;
import android.content.ContentUris;
import android.content.ContentValues;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.provider.ContactsContract;
import android.provider.ContactsContract.CommonDataKinds.Email;
import android.provider.ContactsContract.CommonDataKinds.Phone;
import android.provider.ContactsContract.CommonDataKinds.StructuredName;
import android.provider.ContactsContract.Contacts.Data;
import android.provider.ContactsContract.RawContacts;
import android.view.Gravity;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.AbsListView;
import android.widget.BaseExpandableListAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ExpandableListAdapter;
import android.widget.ExpandableListView;
import android.widget.TextView;
import android.widget.Toast;

public class MainActivity extends Activity {

	private Button querybtn, addbtn;
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		
		querybtn = (Button)findViewById(R.id.querybtn);
		addbtn = (Button)findViewById(R.id.addbtn);
	
		querybtn.setOnClickListener(new OnClickListener() {
			
			@Override
			public void onClick(View v) {
				//定义两个LIST来封装系统的联系人信息、指定联系人的电话号码,email等详情
				final ArrayList<String> names = new ArrayList<String>();
				final ArrayList<ArrayList<String>> details = new ArrayList<ArrayList<String>>();
				
				//使用contentresolver查找联系人的数据
				Cursor cursor = getContentResolver().query(
						ContactsContract.Contacts.CONTENT_URI, 
						null, null, null, null);
				while(cursor.moveToNext()){
					//获取联系人ID
					String contactId = cursor.getString(cursor
							.getColumnIndex(ContactsContract.Contacts._ID));
					String name = cursor.getString(cursor
							.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
					names.add(name);
					
					//使用contentresolver查找联系人的电话号码
					Cursor phones = getContentResolver().query(
							ContactsContract.CommonDataKinds.Phone.CONTENT_URI, 
							null, 
							ContactsContract.CommonDataKinds.Phone.CONTACT_ID + "=" + contactId, 
							null, null);
					ArrayList<String> detail = new ArrayList<String>();
					//遍历查询结果,获取该联系人的多个电话号码
					while(phones.moveToNext()){
						String phoneNumber = phones.getString(phones.
								getColumnIndex(ContactsContract.
										CommonDataKinds.Phone.NUMBER));
						detail.add("电话号码:" + phoneNumber);
					}
					phones.close();
					
					//使用contentresolver查找联系人的email的地址
					Cursor emails = getContentResolver().query(
							ContactsContract.CommonDataKinds.Email.CONTENT_URI, 
							null, 
							ContactsContract.CommonDataKinds.Email.CONTACT_ID + "=" + contactId, 
							null, null);
					while(emails.moveToNext()){
						String emailAdddress = emails.getString(emails
								.getColumnIndex(ContactsContract
										.CommonDataKinds.Email.DATA));
						detail.add("邮件地址:" + emailAdddress);
					}
					emails.close();
					details.add(detail);
				}
				cursor.close();
				
				//加载result.xml界面布局代表的视图
				View resultDialog = getLayoutInflater().inflate(
						R.layout.result, null);
				//获取resultDialog中ID 为list的ExpandableListView
				ExpandableListView list = (ExpandableListView)resultDialog.findViewById(R.id.list);
				ExpandableListAdapter adapter = new BaseExpandableListAdapter() {
					
					@Override
					public Object getChild(int groupPosition, int childPosition) {
						return details.get(groupPosition).get(childPosition);
					}

					@Override
					public long getChildId(int groupPosition, int childPosition) {
						return childPosition;
					}

					@Override
					public View getChildView(int groupPosition,
							int childPosition, boolean isLastChild,
							View convertView, ViewGroup parent) {
						TextView textView = getTextView();
						textView.setText(getChild(groupPosition, childPosition).toString());
						return textView;
					}

					@Override
					public int getChildrenCount(int groupPosition) {
						return details.get(groupPosition).size();
					}

					@Override
					public Object getGroup(int groupPosition) {
						return names.get(groupPosition);
					}

					@Override
					public int getGroupCount() {
						return names.size();
					}

					@Override
					public long getGroupId(int groupPosition) {
						return groupPosition;
					}

					@Override
					public View getGroupView(int groupPosition,
							boolean isExpanded, View convertView,
							ViewGroup parent) {
						TextView textView = getTextView();
						textView.setText(names.get(groupPosition).toString());
						return textView;
					}

					@Override
					public boolean hasStableIds() {

						return true;
					}

					@Override
					public boolean isChildSelectable(int groupPosition,
							int childPosition) {

						return true;
					}
					
					private TextView getTextView(){
						AbsListView.LayoutParams lp = new AbsListView.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
						TextView textView = new TextView(MainActivity.this);
						textView.setLayoutParams(lp);
						textView.setGravity(Gravity.CENTER_VERTICAL | Gravity.LEFT);
						textView.setTextSize(20);
						return textView;
					}
				};
					
				list.setAdapter(adapter);
				new AlertDialog.Builder(MainActivity.this)
					.setView(resultDialog)
					.setPositiveButton("确定", null)
					.show();
			}
		});
		
		addbtn.setOnClickListener(new OnClickListener() {
			
			@Override
			public void onClick(View v) {
				String name = ((EditText)findViewById(R.id.name)).getText().toString();
				String phone = ((EditText)findViewById(R.id.phone)).getText().toString();
				String email = ((EditText)findViewById(R.id.email)).getText().toString();
				
				//创建一个空的contentvalues
				ContentValues values = new ContentValues();
				//向rawContacts.Content_URI执行一个空值插入,目的是获取系统返回的rawContactId
				Uri rawContactUri = getContentResolver().insert(RawContacts.CONTENT_URI, values);
				long rawContactId = ContentUris.parseId(rawContactUri);
				values.clear();
				values.put(Data.RAW_CONTACT_ID, rawContactId);
				//设置内容类型
				values.put(Data.MIMETYPE, StructuredName.CONTENT_ITEM_TYPE);
				//设置联系人的名字
				values.put(StructuredName.GIVEN_NAME, name);
				//向联系人Uri添加联系人名字
				getContentResolver().insert(android.provider.ContactsContract.Data.CONTENT_URI, values);
				values.clear();
				
				values.put(Data.RAW_CONTACT_ID, rawContactId);
				values.put(Data.MIMETYPE, Phone.CONTENT_ITEM_TYPE);
				//设置联系人的电话号码
				values.put(Phone.NUMBER, phone);
				//设置电话类型
				values.put(Phone.TYPE, Phone.TYPE_MOBILE);
				//向联系人电话号码Uri添加电话号码
				getContentResolver().insert(android.provider.ContactsContract.Data.CONTENT_URI, values);
				values.clear();
				
				values.put(Data.RAW_CONTACT_ID, rawContactId);
				values.put(Data.MIMETYPE, Email.CONTENT_ITEM_TYPE);
				//设置联系人的email地址
				values.put(Email.DATA, email);
				//设置该电子邮件的类型
				values.put(Email.TYPE, Email.TYPE_WORK);
				//向联系人email uri添加email数据
				getContentResolver().insert(android.provider.ContactsContract.Data.CONTENT_URI, values);
				Toast.makeText(MainActivity.this, "联系人数据添加成功", Toast.LENGTH_SHORT).show();
			}
		});
	}
}




上面程序需要读取、添加联系人信息,因此需要在androidmanifest.xml中为该应用程序授权
<uses-permission android:name="android.permission.READ_CONTACTS"/>
<uses-permission android:name="android.permission.WRITE_CONTACTS"/>


项目代码见附件

    
[3] Ubuntu/Debian停安装Phabricator
    来源: 互联网  发布时间: 2014-02-18
Ubuntu/Debian下安装Phabricator
Installation:
(出于简单考虑,这里不包含配置apache的环节,因此直接把phabricator安装到apache的/var/www,可参考phabricator docs进行更多配置)
1. 如果sudo不能使用,则先su切换到root,然后安装sudo,apt-get install sudo
2. wget http://www.phabricator.com/rsrc/install/install_ubuntu.sh
cp install_ubuntu.sh /var/www
cd /var/www
chmod +x install_ubuntu.sh
./install_ubuntu.sh
3. vim /etc/apache2/sites-enabled/000-default
把两处:/var/www 改为 /var/www/phabricator/webroot
DocumentRoot /var/www/phabricator/webroot
RewriteEngine on
        RewriteRule ^/rsrc/(.*)     -                       [L,QSA]
        RewriteRule ^/favicon.ico   -                       [L,QSA]
        RewriteRule ^(.*)$          /index.php?__path__=$1  [B,L,QSA]
4. /etc/init.d/apache2 restart
5. cd phabricator
./bin/storage upgrade

完成,可web登录,并开始configuration:

1. ./bin/accountadmin 设置用户
2. ./bin/config set phabricator.base-uri 'http://192.168.15.129/'  设置base uri
3.  vim /etc/php5/apache2/php.ini
/timezone找到date.timezone并设置为:date.timezone = Asia/Shanghai
/etc/init.d/apache2 restart
4. 运行daemon:./bin/phd start
5. 配置mail:通过web访问phabricator并在页面上进行配置:(这里使用的是外部SMTP server的方式,更多方式参见phabricator docs)
用administrator账号登录后,在administration栏选择Config进入
1)选择mail,设置:
metamta.default-address  -- xxxx@163.com   // 注意:这里必须要用与smtp服务器对应的邮箱地址,不然邮件发不出去
metamta.domain -- phabricator.myproject.com // 随意
metamta.mail-adapter: set to "PhabricatorMailImplementationPHPMailerAdapter"
metamta.send-immediately: Send Via Daemons
2)选择PHPMailer,设置:(以163.com的SMTP server为例)
phpmailer.mailer: set to "smtp".
phpmailer.smtp-host: smtp.163.com
phpmailer.smtp-port: 25
phpmailer.smtp-user: xxxx
phpmailer.smtp-password: xxxx
配置完毕后,可以在Administration-MetaMTA下进行发送邮件的测试,注意需要添加一个User组用户,无法直接向System Agent组用户发送邮件
6. 添加代码库:Administration内选择Repositories,点击Create New Repository,可选择Git或SubVersion类型的代码库,Name是库名称,Callsign用于作为所有revision commit的前缀使用,一般用短小的全大写。
创建完毕后,在tracking内配置跟踪参数,填写remote url(代码库地址),配置代码库在服务器上保存的路径local path:比如/home/username/git,然后再根据情况填写用户名,密码一般就可以了。保存后,phabricator后台会自动tracking代码库的更改情况。

至此,phabricator可以基本使用了,其他工具如arcnist等使用及配置可参照phabricator文档,大部分配置都可以直接使用administrator账号在web网页上进行。

    
最新技术文章:
▪Android开发之登录验证实例教程
▪Android开发之注册登录方法示例
▪Android获取手机SIM卡运营商信息的方法
▪Android实现将已发送的短信写入短信数据库的...
▪Android发送短信功能代码
▪Android根据电话号码获得联系人头像实例代码
▪Android中GPS定位的用法实例
▪Android实现退出时关闭所有Activity的方法
▪Android实现文件的分割和组装
▪Android录音应用实例教程
▪Android双击返回键退出程序的实现方法
▪Android实现侦听电池状态显示、电量及充电动...
▪Android获取当前已连接的wifi信号强度的方法
▪Android实现动态显示或隐藏密码输入框的内容
▪根据USER-AGENT判断手机类型并跳转到相应的app...
▪Android Touch事件分发过程详解
▪Android中实现为TextView添加多个可点击的文本
▪Android程序设计之AIDL实例详解
▪Android显式启动与隐式启动Activity的区别介绍
▪Android按钮单击事件的四种常用写法总结
▪Android提高之MediaPlayer播放网络音频的实现方法... iis7站长之家
▪Android实现Back功能代码片段总结
▪Android实用的代码片段 常用代码总结
▪Android实现弹出键盘的方法
▪Android中通过view方式获取当前Activity的屏幕截...
▪Android提高之自定义Menu(TabMenu)实现方法
▪Android提高之多方向抽屉实现方法
▪Android提高之MediaPlayer播放网络音频的实现方法...
▪Android提高之MediaPlayer播放网络视频的实现方法...
▪Android提高之手游转电视游戏的模拟操控
 


站内导航:


特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

©2012-2021,,E-mail:www_#163.com(请将#改为@)

浙ICP备11055608号-3