Android 数据存储【Network】--webservice

本文介绍了在Android应用中如何将本地数据发送至邮箱进行存储,并演示了如何从网络加载TXT文件的具体实现过程。

通过上一篇文章《如何在android中配置163邮箱》的设置,下面我们可以做如下的例子:

业务逻辑如下:示例中有一个文本框用来模拟用户的信息,当程序退出的时候保存文本档的信息,并转到发送邮件的页面,让用户把信息保存到邮箱 里面。具体代码参考如下:
发送信息保存到邮箱
package com.terry;
import android.app.Activity;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.view.KeyEvent;
import android.widget.EditText;
public class networkActivity extends Activity {
private EditText myEditText;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
myEditText=(EditText)findViewById(R.id.myEditText4);
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
// TODO Auto-generated method stub
if(keyCode==KeyEvent.KEYCODE_BACK)
{
//发送邮件地址
Uri uri=Uri.parse("mailto:529782485@qq.com");
//创建intent
Intent it=new Intent(Intent.ACTION_SENDTO,uri);
it.putExtra(android.content.Intent.EXTRA_SUBJECT, "网络存储");
it.putExtra(android.content.Intent.EXTRA_TEXT, myEditText.getText());
startActivity(it);
this.finish();
return true;
}
return super.onKeyDown(keyCode, event);
}
}

扩展

既然发送数据保存到网络上,当然也可以获得网络上的数据,下面我们通过一个小例子来实现从网路上加载一个txt文件的小说程序 。如图:

逻辑代码如下:首先创建一个我们要访问的URL地址,然后取链接的文件,循环把数据读取出来。具体代码参考如下:
读取XML代码参考
package com.terry;
import java.io.BufferedInputStream;
import java.io.InputStream;
import java.net.URL;
import java.net.URLConnection;

import org.apache.http.util.ByteArrayBuffer;

import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;

public class readxmlActivity extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.readxml);

TextView tv=(TextView)findViewById(R.id.TextView01);

String msg="";
try {
URL url=new URL("http://www.az1314.com/txt/00.txt"); //要访问的数据文件
URLConnection con=url.openConnection();
InputStream is=con.getInputStream();
BufferedInputStream bis=new BufferedInputStream(is);
ByteArrayBuffer baf=new ByteArrayBuffer(100);
int current=0;
while ((current=bis.read())!= -1) {
baf.append((byte)current);
}
msg=new String(baf.toByteArray());

} catch (Exception e) {
// TODO: handle exception
msg=e.getMessage();
}
tv.setText(msg);
}
}

方法讲解:

URL共有六种构造方法,分别如下:

URL(String spec)
通过传进来的字符串分析,创建一个新的URL实例。
URL(URL context, String spec)
通过传进来的字符串分析,创建一个新的URL实例。需要一个URL的参数
URL(URL context, String spec, URLStreamHandler handler)
通过传进来的字符串分析,创建一个新的URL实例
URL(String protocol, String host, String file)
使用给定的参数创建一个URL实例,需要指定协议,主机文件名
URL(String protocol, String host, int port, String file)
使用给定的参数创建一个URL实例,需要指定协议,主机,端口和文件名
URL(String protocol, String host, int port, String file, URLStreamHandler handler)
使用给定的参数创建一个URL实例,需要指定协议,主机,端口、文件名和处理程序
URLConnection介绍:

用以来实现提供一个具有特定协议类的连接源。
getInputStream主要用来读取一个URLConnection的资源数据,返回一个InputStream,本文将使用这个方法获取数据
在此不多介绍URLConnection此类,感兴趣的朋友可以查看一下SDK。代码如上,运行效果图:


因为在模拟器运行。 出现乱码了,如果你有真机不妨在真机上试试。
Tip: 访问外部网络需要在配置文件中给予权限,如果你没有权限将会出现如下界面:


权限代码如下:
android:versionCode="1"
android:versionName="1.0">
<application android:icon="@drawable/icon" android:label="@string/app_name">
<activity android:name=".networkActivity"
android:label="@string/app_name">
</activity>

<activity android:name=".readxmlActivity"><intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter></activity>
</application>
<uses-permission android:name="android.permission.INTERNET"/>

至此四种数据存储完结。

参考文献:http://httpwww.wokoko.com/bbs/thread-1923-1-1.html

那你再帮我检查一下AndroidManifest.xml有没有问题?代码如下:<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" package="com.example.bus"> <!-- 获取精确位置(GPS + 网络) --> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <!-- 获取粗略位置 --> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> <!-- 请求后台定位权限 --> <uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" /> <!-- 访问网络状态 --> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <!-- 读取设备状态(用于生成设备标识) --> <uses-permission android:name="android.permission.READ_PHONE_STATE" /> <application android:name=".MyApplication" android:allowBackup="true" android:dataExtractionRules="@xml/data_extraction_rules" android:fullBackupContent="@xml/backup_rules" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/Theme.Bus"> <!-- 高德地图 API Key --> <meta-data android:name="com.amap.api.v2.apikey" android:value="a487b8aa9be4ecdcb101a04a9eecff8a" /> <activity android:name=".SearchResultActivity" /> <activity android:name=".RoutePlanActivity" /> <activity android:name=".AboutActivity" android:exported="false" android:parentActivityName=".MainActivity" /> <activity android:name=".SurveyActivity" android:label="用户调研" android:parentActivityName=".MainActivity"> <meta-data android:name="android.support.PARENT_ACTIVITY" android:value=".MainActivity" /> </activity> <activity android:name=".MainActivity" android:exported="true" 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> </manifest>
11-07
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值