Android应用之访问servlet服务器
来源:互联网 发布:苹果5支持移动4g网络吗 编辑:程序博客网 时间:2024/06/07 10:10
原文出处:http://blog.chinaunix.net/uid-25799257-id-3774047.html
讲之前先建立一个java工程,这个工程目的是测试之前的servlet【 http://blog.chinaunix.net/uid-25799257-id-3774015.html】 的doPost方法,直接上吧,召唤赤兔马 汗
HttpServlet/(习惯linux下的左斜杠了)HttpUtils.java
点击(此处)折叠或打开
- import java.io.ByteArrayOutputStream;
- import java.io.IOException;
- import java.io.InputStream;
- import java.io.OutputStream;
- import java.net.HttpURLConnection;
- import java.net.MalformedURLException;
- import java.net.URL;
- import java.net.URLEncoder;
- import java.util.HashMap;
- import java.util.Map;
- @SuppressWarnings("unused")
- public class HttpUtils{
- ///< 请求服务URL
- private finalstatic String PATH= "http://127.0.0.1:8000/TaxiServlet/login";
- private staticURL url;
-
- public HttpUtils(){
- // TODO Auto-generated constructor stub
- }
-
- /**
- * 向服务端提交数据
- * @param params url参数
- * @param encode 字节编码
- * @return
- */
- @SuppressWarnings("deprecation")
- public staticint sendMessage(Map<String,String> params, Stringencode){
- ///< 初始化URL
- StringBuffer buffer = newStringBuffer();
- // StringBuffer buffer = new StringBuffer();
-
- if (null!= params &&!params.isEmpty()){
- for (Map.Entry<String,String> entry: params.entrySet()){
- buffer.append(entry.getKey()).append("=").append(URLEncoder.encode(entry.getValue())).append("&");
- }
- ///< 删除多余的&
- buffer.deleteCharAt(buffer.length()- 1);
- }
-
- ///< show url
- System.out.println(buffer.toString());
-
- try {
- url = new URL(PATH);
- if (null !=url)
- {
- HttpURLConnection urlConnection = (HttpURLConnection)url.openConnection();
- if (null ==urlConnection)
- {
- return -1;
- }
- urlConnection.setConnectTimeout(3000);
- urlConnection.setRequestMethod("POST"); ///< 设置请求方式
- urlConnection.setDoInput(true); ///< 表示从服务器获取数据
- urlConnection.setDoOutput(true); ///< 表示向服务器发送数据
- byte[] data= buffer.toString().getBytes();
- ///< 设置请求体的是文本类型
- urlConnection.setRequestProperty("Content-Type","application/x-www-form-urlencoded");
- urlConnection.setRequestProperty("Content-Length",String.valueOf(data.length));
- ///< 获得输出流
- OutputStream outputStream = urlConnection.getOutputStream();
- outputStream.write(data);
- outputStream.close();
- ///< 获得服务器的响应结果和状态码
- int responseCode = urlConnection.getResponseCode();
- System.out.println(""+ responseCode);
- if (200 ==responseCode)
- {
- return changeInputStream(urlConnection.getInputStream(),encode);
- }
- }
- } catch(IOException e){
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
-
- return -1;
- }
-
- /**
- * 获得网络返回值【0 - 正确 1 - 用户名错误 2 - 密码错误】
- * @param inputStream
- * @param encode
- * @return
- */
- private staticint changeInputStream(InputStreaminputStream,String encode){
- // TODO Auto-generated method stub
- ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
- byte[] data= new byte[1024];
- int len = 0;
- String result = "";
- if (null!= inputStream)
- {
- try {
- while ((len =inputStream.read(data))!= -1)
- {
- outputStream.write(data, 0, len);
- }
- result = new String(outputStream.toByteArray(),encode);
- System.out.println(result);
-
- len = Integer.parseInt(result.substring(0, 1));
-
- } catch (IOException e){
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- }
- return len;
- }
-
- public staticvoid main(String[] args){
- ///< 发送用户名和密码到服务器进行校验,并获得服务器返回值
- Map<String,String> params = newHashMap<String,String>();
- params.put("user_name","admin");
- params.put("password","123");
- String encode = "utf-8";
-
- int result= HttpUtils.sendMessage(params,encode);
- System.out.println(""+ result);
- }
- }
这里的java程序就可以直接作为一个http访问的工具类进行扩展,之后就可以将其移植到andriod程序中作为一个工具类,挺不错的,我觉得.【说明一点:移植后在android模拟器里运行应用时访问的127.0.0.1是模拟器自己的,而不是我们的本机的,因此改为10.0.2.2就可以了】
android工程就两个文件----->
HttpUtils.java
点击(此处)折叠或打开
- package com.android.taxi;
- import java.io.ByteArrayOutputStream;
- import java.io.IOException;
- import java.io.InputStream;
- import java.io.OutputStream;
- import java.net.HttpURLConnection;
- import java.net.MalformedURLException;
- import java.net.URL;
- import java.net.URLEncoder;
- import java.util.HashMap;
- import java.util.Map;
- import org.apache.http.HttpResponse;
- @SuppressWarnings("unused")
- public class HttpUtils{
- ///< 请求服务URL
- private final static String PATH = "http://10.0.2.2:8000/TaxiServlet/login";
- private static URL url;
-
- public HttpUtils(){
- // TOiDO Auto-generated constructor stub
- }
-
- /**
- * 向服务端提交数据
- * @param params url参数
- * @param encode 字节编码
- * @return
- */
- @SuppressWarnings("deprecation")
- public static int sendMessage(Map<String,String> params, Stringencode){
- ///< 初始化URL
- StringBuffer buffer = newStringBuffer();
- // StringBuffer buffer = new StringBuffer();
-
- if (null !=params &&!params.isEmpty()){
- for (Map.Entry<String,String> entry: params.entrySet()){
- buffer.append(entry.getKey()).append("=").append(URLEncoder.encode(entry.getValue())).append("&");
- }
- ///< 删除多余的&
- buffer.deleteCharAt(buffer.length()- 1);
- }
-
- ///< show url
- //System.out.println(buffer.toString());
-
- try {
- url = new URL(PATH);
- if (null !=url)
- {
- HttpURLConnection urlConnection = (HttpURLConnection)url.openConnection();
- if (null ==urlConnection)
- {
- return -1;
- }
- urlConnection.setConnectTimeout(3000);
- urlConnection.setRequestMethod("POST"); ///< 设置请求方式
- urlConnection.setDoInput(true); ///< 表示从服务器获取数据
- urlConnection.setDoOutput(true); ///< 表示向服务器发送数据
- byte[] data= buffer.toString().getBytes();
- ///< 设置请求体的是文本类型
- urlConnection.setRequestProperty("Content-Type","application/x-www-form-urlencoded");
- urlConnection.setRequestProperty("Content-Length",String.valueOf(data.length));
- ///< 获得输出流
- OutputStream outputStream = urlConnection.getOutputStream();
- outputStream.write(data);
- outputStream.close();
- ///< 获得服务器的响应结果和状态码
- int responseCode = urlConnection.getResponseCode();
- //System.out.println("" + responseCode);
- if (200 ==responseCode)
- {
- return changeInputStream(urlConnection.getInputStream(),encode);
- }
- }
- } catch (IOException e){
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
-
- return -1;
- }
-
- /**
- * 获得网络返回值【0 - 正确 1 - 用户名错误 2 - 密码错误】
- * @param inputStream
- * @param encode
- * @return
- */
- private static int changeInputStream(InputStreaminputStream,String encode){
- // TODO Auto-generated method stub
- ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
- byte[] data= new byte[1024];
- int len = 0;
- String result = "";
- if (null !=inputStream)
- {
- try {
- while ((len =inputStream.read(data))!= -1)
- {
- outputStream.write(data, 0, len);
- }
- result = new String(outputStream.toByteArray(),encode);
- //System.out.println(result);
-
- len = Integer.parseInt(result.substring(0, 1));
-
- } catch (IOException e){
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- }
- return len;
- }
- }
LoginActivity.java
点击(此处)折叠或打开
- package com.android.taxi;
- //import net.youmi.android.AdManager;
- //import net.youmi.android.banner.AdSize;
- //import net.youmi.android.banner.AdView;
- import java.util.HashMap;
- import java.util.Map;
- import com.android.taxi.R;
- import android.os.Bundle;
- import android.os.Handler;
- import android.os.Looper;
- import android.os.Message;
- import android.annotation.SuppressLint;
- import android.app.Activity;
- import android.view.Menu;
- import android.view.View;
- //import android.view.ViewGroup.LayoutParams;
- import android.widget.Button;
- import android.widget.EditText;
- import android.widget.LinearLayout;
- import android.widget.Toast;
- @SuppressLint("HandlerLeak")
- public class LoginActivityextends Activity{
- @Override
- protected void onCreate(Bundle savedInstanceState){
- super.onCreate(savedInstanceState);
-
- // e2d468f618be14b5和4955a15c0ddb7c5b位置填写你的发布ID和应用密钥
- //AdManager.init(this,"e2d468f618be14b5", "4955a15c0ddb7c5b", 30, false);
-
- setContentView(R.layout.activity_login);
-
- ///< 初始化Layout控件,便于加载广告视图
- //layout = new LinearLayout(LoginActivity.this);
- //layout.setOrientation(LinearLayout.VERTICAL);
- ///< 初始化广告视图
- //AdView adView = new AdView(LoginActivity.this, AdSize.SIZE_320x50);
- //LayoutParams params = new LayoutParams(LayoutParams.FILL_PARENT,
- //LayoutParams.WRAP_CONTENT);
- //layout.addView(adView, params);
- findViews();
- setListeners();
- }
-
- public void findViews()
- {
- button_login = (Button)findViewById(R.id.login);
- user_name = (EditText)findViewById(R.id.user_name);
- password = (EditText)findViewById(R.id.password);
- }
-
- public void setListeners()
- {
- button_login.setOnClickListener(loginTest);
- }
-
- private Button.OnClickListener loginTest= new Button.OnClickListener()
- {
- @SuppressLint("NewApi")
- @Override
- public void onClick(View arg0){
- // TODO Auto-generated method stub
- String userName = null;
- String passWord = null;
-
- ///< 简单判断用户是否输入用户名,是否输入密码
- if ((userName = user_name.getText().toString()).isEmpty())
- {
- if (password.getText().toString().isEmpty())
- {
- Toast.makeText(LoginActivity.this,"请输入用户名和密码", Toast.LENGTH_SHORT).show();
- return;
- }
- Toast.makeText(LoginActivity.this,"请输入用户名!", Toast.LENGTH_SHORT).show();
- return;
- }
- else if ((passWord= password.getText().toString()).isEmpty())
- {
- Toast.makeText(LoginActivity.this,"请输入密码", Toast.LENGTH_SHORT).show();
- return;
- }
-
- loginHandle(userName, passWord);
-
- // ///< 发送用户名和密码到服务器进行校验,并获得服务器返回值
- // Map params = new HashMap();
- // params.put("user_name", userName);
- // params.put("password", passWord);
- // String encode = "utf-8";
- //
- // // Toast.makeText(LoginActivity.this, params.get("user_name"), Toast.LENGTH_SHORT).show();
- // // Toast.makeText(LoginActivity.this, params.get("password"), Toast.LENGTH_SHORT).show();
- //
- // int responseCode = HttpUtils.sendMessage(params, encode);
- // if (0 == responseCode)
- // {
- // Toast.makeText(LoginActivity.this, "登录成功", Toast.LENGTH_SHORT).show();
- // }
- // else if (1 == responseCode)
- // {
- // Toast.makeText(LoginActivity.this, "用户名错误!", Toast.LENGTH_SHORT).show();
- // }
- // else if (2 == responseCode)
- // {
- // Toast.makeText(LoginActivity.this, "密码错误!", Toast.LENGTH_SHORT).show();
- // }
- // else
- // {
- // Toast.makeText(LoginActivity.this, "异常!", Toast.LENGTH_SHORT).show();
- // }
-
- // ///< 发送用户名和密码到服务器进行校验,并获得服务器返回值
- // // TODO
- // if (userName.equals("admin") && passWord.equals("123"))
- // {
- // Toast.makeText(LoginActivity.this, "登录成功", Toast.LENGTH_SHORT).show();
- // }
- // else
- // {
- // Toast.makeText(LoginActivity.this, "请核对用户信息!", Toast.LENGTH_SHORT).show();
- // }
- }
- };
-
- public void loginHandle(finalString userName,final String password)
- {
- new Thread(newRunnable()
- {
- @Override
- public void run()
- {
- ///< 发送用户名和密码到服务器进行校验,并获得服务器返回值
- Map<String,String> params = newHashMap<String,String>();
- params.put("user_name", userName);
- params.put("password", password);
- String encode = "utf-8";
-
- // Toast.makeText(LoginActivity.this, params.get("user_name"), Toast.LENGTH_SHORT).show();
- // Toast.makeText(LoginActivity.this, params.get("password"), Toast.LENGTH_SHORT).show();
- int responseCode = HttpUtils.sendMessage(params,encode);
- Looper.prepare();
- if (0 ==responseCode)
- {
- Toast.makeText(LoginActivity.this,"登录成功", Toast.LENGTH_SHORT).show();
- }
- else if (1 ==responseCode)
- {
- Toast.makeText(LoginActivity.this,"用户名错误!", Toast.LENGTH_SHORT).show();
- }
- else if (2 ==responseCode)
- {
- Toast.makeText(LoginActivity.this,"密码错误!", Toast.LENGTH_SHORT).show();
- }
- else
- {
- Toast.makeText(LoginActivity.this,"异常!", Toast.LENGTH_SHORT).show();
- }
- Looper.loop();
-
- //执行完毕后给handler发送一个空消息
- handler.sendEmptyMessage(0);
- }
- }).start();
- }
- @Override
- public boolean onCreateOptionsMenu(Menumenu) {
- // Inflate the menu; this adds items to the action bar if it is present.
- getMenuInflater().inflate(R.menu.login,menu);
- return true;
- }
-
- //定义Handler对象
- private Handlerhandler =newHandler(){
- @Override
- //当有消息发送出来的时候就执行Handler的这个方法
- public void handleMessage(Message msg){
- super.handleMessage(msg);
- // TODO 处理UI
- }
- };
-
- private Button button_login;
- private EditText user_name;
- private EditText password;
-
- LinearLayout layout;
- }
点击(此处)折叠或打开
- <?xmlversion="1.0"encoding="utf-8"?>
- <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:orientation="vertical">
- <!-- android:layout_weight="10" 失效了【最外层LinearLayout的布局高度是内容包裹】 -->
- <LinearLayout
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:layout_marginBottom="15dp"
- android:layout_marginTop="10dp"
- android:layout_weight="10"
- android:orientation="horizontal">
- <TextView
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:text="@string/user_name"
- android:textSize="18sp"/>
- <EditText
- android:id="@+id/user_name"
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:layout_marginLeft="5dp"
- android:layout_marginRight="5dp"
- android:background="@drawable/edit_text"
- android:inputType="textPersonName"
- android:padding="7dp"
- android:text=""/>
- </LinearLayout>
- <!-- android:layout_weight="2" 失效了 【最外层LinearLayout的布局高度是内容包裹】 -->
- <LinearLayout
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:layout_marginBottom="15dp"
- android:layout_weight="2"
- android:orientation="horizontal">
- <TextView
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:text="@string/password"
- android:textSize="18sp"/>
- <EditText
- android:id="@+id/password"
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:layout_marginLeft="5dp"
- android:layout_marginRight="5dp"
- android:background="@drawable/edit_text"
- android:inputType="textPassword"
- android:padding="7dp"
- android:text=""/>
- </LinearLayout>
- <Button
- android:id="@+id/login"
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:layout_marginLeft="59dp"
- android:layout_marginRight="5dp"
- android:background="@drawable/buton_style"
- android:text="@string/login_btn"/>
- </LinearLayout>
点击(此处)折叠或打开
- <?xmlversion="1.0"encoding="utf-8"?>
- <resources>
- <string name="app_name">TAXI</string>
- <string name="action_settings">Settings</string>
- <string name="user_name">用户名</string>
- <string name="password">密 码</string> <!-- 空格需要全角形式的 -->
- <string name="login_btn">登 录</string> <!-- 空格需要全角形式的 -->
- </resources>
AndroidManifest.xml 【主要是添加网络授权】
点击(此处)折叠或打开
- <?xmlversion="1.0"encoding="utf-8"?>
- <manifest xmlns:android="http://schemas.android.com/apk/res/android"
- package="com.android.taxi"
- android:versionCode="1"
- android:versionName="1.0">
- <uses-sdk
- android:minSdkVersion="8"
- android:targetSdkVersion="17"/>
- <uses-permission android:name="android.permission.INTERNET"/>
- <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
- <!--
- <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE">
- </uses-permission>
- <uses-permission android:name="android.permission.READ_PHONE_STATE">
- </uses-permission>
- <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE">
- </uses-permission>
- <uses-permission android:name="android.permission.INTERNET">
- </uses-permission>
- <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION">
- </uses-permission>
- <uses-permission android:name="com.android.launcher.permission.INSTALL_SHORTCUT">
- </uses-permission>
- -->
- <application
- android:allowBackup="true"
- android:icon="@drawable/ic_launcher"
- android:label="@string/app_name"
- android:theme="@style/AppTheme">
- <activity
- android:name="com.android.taxi.LoginActivity"
- android:label="@string/app_name">
- <intent-filter>
- <action android:name="android.intent.action.MAIN"/>
- <category android:name="android.intent.category.LAUNCHER"/>
- </intent-filter>
- </activity>
- <!--
- <activity
- android:name="net.youmi.android.AdActivity"
- android:configChanges="keyboard|keyboardHidden|orientation"/>
- <meta-data
- android:name="YOUMI_CHANNEL"
- android:value="0">
- </meta-data>
- -->
- </application>
- </manifest>
”
可能很多做android很久的,觉得这小case,我折腾了一天半,唉,主要的问题是线程问题,第二个是Looper.prepare()问题;源于两个异常:
异常一>
点击(此处)折叠或打开
- 06-23 16:16:48.634: D/AndroidRuntime(1766): Shutting down VM
- 06-23 16:16:48.634: W/dalvikvm(1766): threadid=1: thread exiting with uncaught exception (group=0x40a71930)
- 06-23 16:16:48.724: E/AndroidRuntime(1766): FATAL EXCEPTION: main
- 06-23 16:16:48.724: E/AndroidRuntime(1766): android.os.NetworkOnMainThreadException
- 06-23 16:16:48.724: E/AndroidRuntime(1766): at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1117)
- 06-23 16:16:48.724: E/AndroidRuntime(1766): at libcore.io.BlockGuardOs.connect(BlockGuardOs.java:84)
- 06-23 16:16:48.724: E/AndroidRuntime(1766): at libcore.io.IoBridge.connectErrno(IoBridge.java:144)
- 06-23 16:16:48.724: E/AndroidRuntime(1766): at libcore.io.IoBridge.connect(IoBridge.java:112)
- 06-23 16:16:48.724: E/AndroidRuntime(1766): at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:192)
- 06-23 16:16:48.724: E/AndroidRuntime(1766): at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:459)
- 06-23 16:16:48.724: E/AndroidRuntime(1766): at java.net.Socket.connect(Socket.java:842)
- 06-23 16:16:48.724: E/AndroidRuntime(1766): at libcore.net.http.HttpConnection.(HttpConnection.java:76)
- 06-23 16:16:48.724: E/AndroidRuntime(1766): at libcore.net.http.HttpConnection.(HttpConnection.java:50)
- 06-23 16:16:48.724: E/AndroidRuntime(1766): at libcore.net.http.HttpConnection$Address.connect(HttpConnection.java:340)
- 06-23 16:16:48.724: E/AndroidRuntime(1766): at libcore.net.http.HttpConnectionPool.get(HttpConnectionPool.java:87)
- 06-23 16:16:48.724: E/AndroidRuntime(1766): at libcore.net.http.HttpConnection.connect(HttpConnection.java:128)
- 06-23 16:16:48.724: E/AndroidRuntime(1766): at libcore.net.http.HttpEngine.openSocketConnection(HttpEngine.java:316)
- 06-23 16:16:48.724: E/AndroidRuntime(1766): at libcore.net.http.HttpEngine.connect(HttpEngine.java:311)
- 06-23 16:16:48.724: E/AndroidRuntime(1766): at libcore.net.http.HttpEngine.sendSocketRequest(HttpEngine.java:290)
- 06-23 16:16:48.724: E/AndroidRuntime(1766): at libcore.net.http.HttpEngine.sendRequest(HttpEngine.java:240)
- 06-23 16:16:48.724: E/AndroidRuntime(1766): at libcore.net.http.HttpURLConnectionImpl.connect(HttpURLConnectionImpl.java:81)
- 06-23 16:16:48.724: E/AndroidRuntime(1766): at libcore.net.http.HttpURLConnectionImpl.getOutputStream(HttpURLConnectionImpl.java:197)
- 06-23 16:16:48.724: E/AndroidRuntime(1766): at com.android.taxi.HttpUtils.sendMessage(HttpUtils.java:68)
- 06-23 16:16:48.724: E/AndroidRuntime(1766): at com.android.taxi.LoginActivity$1.onClick(LoginActivity.java:94)
- 06-23 16:16:48.724: E/AndroidRuntime(1766): at android.view.View.performClick(View.java:4204)
- 06-23 16:16:48.724: E/AndroidRuntime(1766): at android.view.View$PerformClick.run(View.java:17355)
- 06-23 16:16:48.724: E/AndroidRuntime(1766): at android.os.Handler.handleCallback(Handler.java:725)
- 06-23 16:16:48.724: E/AndroidRuntime(1766): at android.os.Handler.dispatchMessage(Handler.java:92)
- 06-23 16:16:48.724: E/AndroidRuntime(1766): at android.os.Looper.loop(Looper.java:137)
- 06-23 16:16:48.724: E/AndroidRuntime(1766): at android.app.ActivityThread.main(ActivityThread.java:5041)
- 06-23 16:16:48.724: E/AndroidRuntime(1766): at java.lang.reflect.Method.invokeNative(Native Method)
- 06-23 16:16:48.724: E/AndroidRuntime(1766): at java.lang.reflect.Method.invoke(Method.java:511)
- 06-23 16:16:48.724: E/AndroidRuntime(1766): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
- 06-23 16:16:48.724: E/AndroidRuntime(1766): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
- 06-23 16:16:48.724: E/AndroidRuntime(1766): at dalvik.system.NativeStart.main(Native Method)
异常二>
点击(此处)折叠或打开
- 06-23 16:16:48.634: D/AndroidRuntime(1766): Shutting down VM
- 06-23 16:16:48.634: W/dalvikvm(1766): threadid=1: thread exiting with uncaught exception (group=0x40a71930)
- 06-23 16:16:48.724: E/AndroidRuntime(1766): FATAL EXCEPTION: main
- 06-23 16:16:48.724: E/AndroidRuntime(1766): android.os.NetworkOnMainThreadException
- 06-23 16:16:48.724: E/AndroidRuntime(1766): at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1117)
- 06-23 16:16:48.724: E/AndroidRuntime(1766): at libcore.io.BlockGuardOs.connect(BlockGuardOs.java:84)
- 06-23 16:16:48.724: E/AndroidRuntime(1766): at libcore.io.IoBridge.connectErrno(IoBridge.java:144)
- 06-23 16:16:48.724: E/AndroidRuntime(1766): at libcore.io.IoBridge.connect(IoBridge.java:112)
- 06-23 16:16:48.724: E/AndroidRuntime(1766): at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:192)
- 06-23 16:16:48.724: E/AndroidRuntime(1766): at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:459)
- 06-23 16:16:48.724: E/AndroidRuntime(1766): at java.net.Socket.connect(Socket.java:842)
- 06-23 16:16:48.724: E/AndroidRuntime(1766): at libcore.net.http.HttpConnection.(HttpConnection.java:76)
- 06-23 16:16:48.724: E/AndroidRuntime(1766): at libcore.net.http.HttpConnection.(HttpConnection.java:50)
- 06-23 16:16:48.724: E/AndroidRuntime(1766): at libcore.net.http.HttpConnection$Address.connect(HttpConnection.java:340)
- 06-23 16:16:48.724: E/AndroidRuntime(1766): at libcore.net.http.HttpConnectionPool.get(HttpConnectionPool.java:87)
- 06-23 16:16:48.724: E/AndroidRuntime(1766): at libcore.net.http.HttpConnection.connect(HttpConnection.java:128)
- 06-23 16:16:48.724: E/AndroidRuntime(1766): at libcore.net.http.HttpEngine.openSocketConnection(HttpEngine.java:316)
- 06-23 16:16:48.724: E/AndroidRuntime(1766): at libcore.net.http.HttpEngine.connect(HttpEngine.java:311)
- 06-23 16:16:48.724: E/AndroidRuntime(1766): at libcore.net.http.HttpEngine.sendSocketRequest(HttpEngine.java:290)
- 06-23 16:16:48.724: E/AndroidRuntime(1766): at libcore.net.http.HttpEngine.sendRequest(HttpEngine.java:240)
- 06-23 16:16:48.724: E/AndroidRuntime(1766): at libcore.net.http.HttpURLConnectionImpl.connect(HttpURLConnectionImpl.java:81)
- 06-23 16:16:48.724: E/AndroidRuntime(1766): at libcore.net.http.HttpURLConnectionImpl.getOutputStream(HttpURLConnectionImpl.java:197)
- 06-23 16:16:48.724: E/AndroidRuntime(1766): at com.android.taxi.HttpUtils.sendMessage(HttpUtils.java:68)
- 06-23 16:16:48.724: E/AndroidRuntime(1766): at com.android.taxi.LoginActivity$1.onClick(LoginActivity.java:94)
- 06-23 16:16:48.724: E/AndroidRuntime(1766): at android.view.View.performClick(View.java:4204)
- 06-23 16:16:48.724: E/AndroidRuntime(1766): at android.view.View$PerformClick.run(View.java:17355)
- 06-23 16:16:48.724: E/AndroidRuntime(1766): at android.os.Handler.handleCallback(Handler.java:725)
- 06-23 16:16:48.724: E/AndroidRuntime(1766): at android.os.Handler.dispatchMessage(Handler.java:92)
- 06-23 16:16:48.724: E/AndroidRuntime(1766): at android.os.Looper.loop(Looper.java:137)
- 06-23 16:16:48.724: E/AndroidRuntime(1766): at android.app.ActivityThread.main(ActivityThread.java:5041)
- 06-23 16:16:48.724: E/AndroidRuntime(1766): at java.lang.reflect.Method.invokeNative(Native Method)
- 06-23 16:16:48.724: E/AndroidRuntime(1766): at java.lang.reflect.Method.invoke(Method.java:511)
- 06-23 16:16:48.724: E/AndroidRuntime(1766): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
- 06-23 16:16:48.724: E/AndroidRuntime(1766): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
- 06-23 16:16:48.724: E/AndroidRuntime(1766): at dalvik.system.NativeStart.main(Native Method)
- 06-23 16:21:49.444: I/Process(1766): Sending signal. PID: 1766 SIG: 9
- 06-23 16:30:10.974: E/Trace(2062): error opening trace file: No such file or directory (2)
- 06-23 16:30:13.324: D/dalvikvm(2062): GC_CONCURRENT freed 128K, 9% free 2665K/2916K, paused 74ms+165ms, total 289ms
- 06-23 16:30:13.974: D/gralloc_goldfish(2062): Emulator without GPU emulation detected.
- 06-23 16:30:16.664: D/InputEventConsistencyVerifier(2062): KeyEvent: ACTION_UP but key was not down.
- 06-23 16:30:16.664: D/InputEventConsistencyVerifier(2062): in android.widget.LinearLayout{40d1eb58 V.E..... ......I. 0,127-720,204}
- 06-23 16:30:16.664: D/InputEventConsistencyVerifier(2062): 0: sent at 3042487000000, KeyEvent { action=ACTION_UP, keyCode=KEYCODE_N, scanCode=49, metaState=0, flags=0x8, repeatCount=0, eventTime=3042487, downTime=3042467, deviceId=0, source=0x101 }
- 06-23 16:30:16.714: D/InputEventConsistencyVerifier(2062): KeyEvent: ACTION_UP but key was not down.
- 06-23 16:30:16.714: D/InputEventConsistencyVerifier(2062): in android.widget.LinearLayout{40d1eb58 V.E..... ......I. 0,127-720,204}
- 06-23 16:30:16.714: D/InputEventConsistencyVerifier(2062): 0: sent at 3042645000000, KeyEvent { action=ACTION_UP, keyCode=KEYCODE_TAB, scanCode=15, metaState=0, flags=0x8, repeatCount=0, eventTime=3042645, downTime=3042467, deviceId=0, source=0x101 }
- 06-23 16:30:16.714: D/InputEventConsistencyVerifier(2062): -- recent events --
- 06-23 16:30:16.714: D/InputEventConsistencyVerifier(2062): 1: sent at 3042487000000, (unhandled) KeyEvent { action=ACTION_UP, keyCode=KEYCODE_N, scanCode=49, metaState=0, flags=0x80000008, repeatCount=0, eventTime=3042487, downTime=3042467, deviceId=0, source=0x101 }
- 06-23 16:30:19.214: W/dalvikvm(2062): threadid=11: thread exiting with uncaught exception (group=0x40a71930)
- 06-23 16:30:19.304: E/AndroidRuntime(2062): FATAL EXCEPTION: Thread-108
- 06-23 16:30:19.304: E/AndroidRuntime(2062): java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()
- 06-23 16:30:19.304: E/AndroidRuntime(2062): at android.os.Handler.(Handler.java:197)
- 06-23 16:30:19.304: E/AndroidRuntime(2062): at android.os.Handler.(Handler.java:111)
- 06-23 16:30:19.304: E/AndroidRuntime(2062): at android.widget.Toast$TN.(Toast.java:324)
- 06-23 16:30:19.304: E/AndroidRuntime(2062): at android.widget.Toast.(Toast.java:91)
- 06-23 16:30:19.304: E/AndroidRuntime(2062): at android.widget.Toast.makeText(Toast.java:238)
- 06-23 16:30:19.304: E/AndroidRuntime(2062): at com.android.taxi.LoginActivity$3.run(LoginActivity.java:149)
- 06-23 16:30:19.304: E/AndroidRuntime(2062): at java.lang.Thread.run(Thread.java:856)
- 06-23 16:30:24.743: I/Process(2062): Sending signal. PID: 2062 SIG: 9
终于可以了。。那时已经是半夜一点半了.....Are you fresher?yes... 对了,里面我的广告代码我都注释了,没调通,周末继续.......感谢老罗,感谢愿意分享的朋友...
0 0
- Android应用之访问servlet服务器
- JavaWeb之Servlet&网络访问服务器编程
- Android通过HttpClient访问服务器的servlet
- Android OTA应用访问Thinkphp5 服务器
- Android studio 应用访问本地服务器
- Android 的网络编程(14)-ttpClient访问服务器的servlet
- Android端通过httpCilent访问Tomcat服务器servlet
- android服务器与客户端交互之servlet
- java学习之利用servlet做应用服务器
- android之虚拟机访问tomcat服务器资源
- Android开发-POST方法连接服务器(Servlet)-应用例程
- Android访问Servlet
- android典型应用之访问网络
- 第一个安卓程序访问服务器的Servlet,Servlet访问数据库
- 设置android端应用访问本地服务器方法
- Android Socket服务器 Servlet服务器
- Android连接服务器Servlet
- Android连接服务器Servlet
- java Process的waitFor()
- 失控:放弃集中控制,打造自组织的活系统
- CentOS Mini 安装图像界面
- Too many arguments to function call...
- Leetcode: Edit Distance
- Android应用之访问servlet服务器
- python + selenium2 如何自定义firefox读取配置文件
- ubuntu 备忘与总结
- 我看——选择和努力,哪个更重要?
- android WebView 开发指栏
- 服务之非绑定服务
- Java面向对象之类和对象
- 怎么添加非官方的chrome扩展?(jsonview为例)
- 【FastDev4Android框架开发】AndroidAnnnotations注入框架使用之最佳实践SharedPreferences(十七)