java攻城狮之路(Android篇)--与服务器交互

一、图片查看器和网页源码查看器

在输入地址的是不能输入127.0.0.1 或者是 localhost.
ScrollView :可以看成一个滚轴 可以去包裹很多的控件在里面

练习1(图片查看器):

package com.shellway.imagelooker;

import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;

import org.apache.http.conn.ConnectTimeoutException;

import android.support.v7.app.ActionBarActivity;
import android.annotation.SuppressLint;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.os.StrictMode;
import android.view.View;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.Toast;

public class MainActivity extends ActionBarActivity {

    private EditText path;
    private ImageView iv;

    @SuppressLint("NewApi")
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        path = (EditText) findViewById(R.id.et_path);
        iv = (ImageView) findViewById(R.id.iv_image);
        StrictMode.ThreadPolicy policy=new StrictMode.ThreadPolicy.Builder().permitAll().build();
        StrictMode.setThreadPolicy(policy);
    }
    public void onLook(View view){
        String spath = path.getText().toString();
        System.out.println(spath);
        if(spath.equals("")){
            Toast.makeText(this, "输入的地址为空", Toast.LENGTH_SHORT).show();
        }else {
            try {
                URL url = new URL(spath);
                HttpURLConnection conn = (HttpURLConnection) url.openConnection();
                conn.setRequestMethod("GET");
                conn.setConnectTimeout(5000);

                if(conn.getResponseCode() == 200){
                    InputStream is = conn.getInputStream();
                    Bitmap bm = BitmapFactory.decodeStream(is);
                    if(bm == null){
                        Toast.makeText(this, "获取的图片流为空", Toast.LENGTH_SHORT).show();
                    }else{
                        iv.setImageBitmap(bm);
                    }
                }else{
                    Toast.makeText(this, "输入的路径不存在", Toast.LENGTH_SHORT).show();
            }

            } catch (Exception e) {
                e.printStackTrace();
                if(e instanceof MalformedURLException){
                    Toast.makeText(this, "输入的路径格式错误", Toast.LENGTH_SHORT).show();
                }else if(e instanceof ConnectTimeoutException){
                    Toast.makeText(this, "连接超时错误", Toast.LENGTH_SHORT).show();
                }else if(e instanceof IOException){
                    Toast.makeText(this, "获取数据错误", Toast.LENGTH_SHORT).show();
                }else{
                    Toast.makeText(this, "未知错误", Toast.LENGTH_SHORT).show();
                }
            }
        }
    }
}

MainActivity.java

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.shellway.imagelooker"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="21" />
    <uses-permission android:name="android.permission.INTERNET"/>

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <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>

</manifest>

AndroidManifest.xml

练习2(网页源码查看器):

package com.shellway.htmllooker;

import java.io.ByteArrayOutputStream;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;

import org.apache.http.client.utils.URIUtils;

import android.support.v7.app.ActionBarActivity;
import android.text.TextUtils;
import android.annotation.SuppressLint;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.os.StrictMode;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.webkit.URLUtil;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;

public class MainActivity extends ActionBarActivity {

    protected static final int CHANGE_UI = 1;
    private EditText et_path;
    private TextView iv;
    private String path;
//    private Handler handler;

    @SuppressLint("NewApi")
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        et_path = (EditText) findViewById(R.id.et_path);
        iv = (TextView) findViewById(R.id.iv_image);
/*        handler = new Handler(){
            public void handleMessage(Message msg) {
                if(msg.what == CHANGE_UI){
                String s = (String) msg.obj;
                iv.setText(s);
                }
            };
        };*/
        StrictMode.ThreadPolicy policy=new StrictMode.ThreadPolicy.Builder().permitAll().build();
        StrictMode.setThreadPolicy(policy);
    }
    public void onLook(View view){
        path = et_path.getText().toString().trim();
        if(TextUtils.isEmpty(path)){
            Toast.makeText(MainActivity.this, "您输入的地址为空", Toast.LENGTH_SHORT).show();
        }else{
        // new Thread(){
        //     public void run() {
                    try {
                        URL url = new URL(path);
                        HttpURLConnection conn = (HttpURLConnection) url.openConnection();
                        conn.setRequestMethod("GET");
                        conn.setConnectTimeout(5000);
                        if(conn.getResponseCode()==200){
                            InputStream is = conn.getInputStream();
                            ByteArrayOutputStream bos = new ByteArrayOutputStream();
                            byte[] buffer = new byte[1024];
                            int len=0 ;
                            while((len = is.read(buffer))!=-1){
                                bos.write(buffer, 0, len);
                            }
                            String text =bos.toString();
                            bos.close();
                            is.close();
                        //    Message msg = new Message();
                        //    msg.what = CHANGE_UI;
                        //    msg.obj = text;
                        //    handler.sendMessage(msg);
                            iv.setText(text);
                        }
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
        //     };
    //     }.start();
        }
    }
}

MainActivity.java

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.shellway.htmllooker"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="21" />
    <uses-permission android:name="android.permission.INTERNET"/>

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <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>

</manifest>

AndroidManifest.xml

二、网易新闻客户端

1.对抓取的数据进行一个描述,我们用的是xml文件来进行描述,如:
<HeaderNews>
<HeaderNew>
<image>httP://192.168.1.101:8080/web/a.jpg<image>
<title>女子花3万相亲</title>
<content>婚介所向其介绍男友后消失<content>
<count>44跟帖</count>
</HeaderNew>
</HeaderNews>

首先数据是动态的。我们可以用servlet(查询数据库里面的数据) - 然后传递数据 通过request(转发)--> jsp 显示

findViewById() 直接使用是在我们的activity的布局里面去查找

注意:流被使用过之后,就不能再次使用。

json 轻量级的 数组 [{image:"httP://192.168.1.101:8080/web/a.jpg",title:"",content:"",count:""},{}]

ISO-8859-1 utf-8

get请求:把要提交的数据直接添加到路径的后面,
由于服务器对请求路径的长度是有限制的。最大不能超过4k,截取数据导致数据不完整。

post请求:

android系统引入了一个三方的框架 HttpClient 他就是对http协议的一个封装

文件上传:我们使用三方开源框架upload

在android端我们也使用HttpClient来实现文件的上传:HttpClient的版本必须在3.0之上。

电话归属地查询:
android server(webservice)

webservice:网络上的api

Bitmap BitmapFactory
ScrollView

Http : URL HttpURLConnection conn 联网权限

xml
json

http get /post

HttpClient

文件上传

注意啦:本页还没完善,后续会更新。。。。。。

时间: 2024-10-17 12:18:55

java攻城狮之路(Android篇)--与服务器交互的相关文章

java攻城狮之路(Android篇)--Activity生命

1 写一个类 extends Activity Activity是android的四大组件之一. Activity的激活分为显式意图激活和隐式意图激活. 如果一个activity希望别人隐式意图激活:则要配置过滤器1 action = ""2 有一个缺省的category,(可以有多个category),若不配置该类型会发生这样的一个错误:Caused by: android.content.ActivityNotFoundException: No Activity found to

java攻城狮之路(Android篇)--BroadcastReceiver&amp;Service

四大组件:activity 显示. contentProvider 对外暴露自己的数据给其他的应用程序.BroadcastReceiver 广播接收者,必须指定要接收的广播类型.必须明确的指定actionservice 服务,是运行后台,它是没有界面的.对某件事情进行监听. 一.广播:事件.普通广播: 是异步的.会广播接收者同时接收,不能被中断sendBroadcast()有序广播: 是同步的.会根据广播接收的优先级进行接收,是可以中断 短信到来广播 sendOrderBroadcast()-1

java攻城狮之路(Android篇)--ListView与ContentProvider

一.ListView 1.三种Adapter构建ListView ListView添加条目的时候, 可以使用setAdapter(ListAdapter)方法, 常用的ListAdapter有三种 BaseAdapter: 定义一个类继承BaseAdapter, 重写4个抽象方法, ListView的条目是由getView()方法构建出来的 SimpleAdapter: 创建SimpleAdapter对象时, 传入数据(List<Map<String, ?>>), 并指定数据的绑定

java攻城狮之路(Android篇)--MP3、MP4、拍照、国际化、样式主题、图片移动和缩放

一.MP3播放器 查看Android API文档可以看到MediaPlayer状态转换图: 练习: package com.shellway.mp3player; import java.io.File; import java.io.IOException; import android.support.v7.app.ActionBarActivity; import android.telephony.PhoneStateListener; import android.telephony.

java攻城狮之路(Android篇)--SQLite

一.Junit    1.怎么使用        在AndroidManifest.xml文件中进行配置, 在manifest借点下配置instrumentation, 在application借点下配置uses-library        定义类继承AndroidTestCast        定义测试方法, Run As JunitTest        如果需要判断测试结果, 可以使用Assert.assertEquals()方法. 下面是利用独立的测试工程JunitTest来测试工程J

java攻城师之路(Android篇)--搭建开发环境、拨打电话、发送短信、布局例子

一.搭建开发环境 1.所需资源 JDK6以上 Eclipse3.6以上 SDK17, 2.3.3 ADT17 2.安装注意事项 不要使用中文路径 如果模拟器默认路径包含中文, 可以设置android_sdk_home环境变量解决.效果如下: 二.拨打电话 1.步骤 在Button节点中添加onClick属性, 指定一个方法名 在Activity中定义一个public void 方法名 (View view) 获取文本框中的号码 创建意图, 设置动作, 设置数据 使用意图开启Activity 2.

java攻城狮之路--复习JDBC

1.JDBC中如何获取数据库链接Connection? Driver 是一个接口: 数据库厂商必须提供实现的接口. 能从其中获取数据库连接. 可以通过 Driver 的实现类对象获取数据库连接. 1. 加入 mysql 驱动 1). 解压 mysql-connector-java-5.1.7.zip 2). 在当前项目下新建 lib 目录 3). 把 mysql-connector-java-5.1.7-bin.jar 复制到 lib 目录下 4). 右键 build-path , add to

java攻城狮之路--复习xml&amp;dom_pull编程续

本章节我们要学习XML三种解析方式: 1.JAXP DOM 解析2.JAXP SAX 解析3.XML PULL 进行 STAX 解析 XML 技术主要企业应用1.存储和传输数据 2.作为框架的配置文件 使用xml 存储和传输数据1.通过程序生成xml2.读取xml 中数据 ---- xml 解析 什么是DOM和SAX ?DOM Document Object Model ----- 文档对象模型 DOM思想: 将整个xml 加载内存中,形成文档对象,所有对xml操作都对内存中文档对象进行DOM

java攻城狮之路--复习xml&amp;dom_pull编程

xml&dom_pull编程: 1.去掉欢迎弹窗界面:在window项的preferences选项中输入“configuration center” 找到这一项然后     把复选框勾去即可. 2.去掉打开Myeclipse时弹出的:Please allow Subclipse team to receive......办法: Windows-->Preferences-->General-->Startup and Shutdown-->取消Subclipse Usage