Android 非法状态异常 : Could not execute method of the activity

标签 android rest

我是 Android 新手。我想要做的是在我按下按钮并在文本字段中写入字符串时通过 Web 服务获取字符串。

list .xml:

<?xml version="1.0" encoding="utf-8"?>

<uses-sdk android:minSdkVersion="15" />
<uses-permission android:name="android.permission.INTERNET"/>

<application
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name" >
    <activity
        android:name=".AndroidClientActivity"
        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>

主.xml:

<?xml version="1.0" encoding="utf-8"?>

<EditText
    android:id="@+id/editText1"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:inputType="text" >

    <requestFocus />
</EditText>

<Button
    android:id="@+id/button1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:onClick="myClickHandler"
    android:text="Button" />
</LinearLayout>

字符串.xml:

<?xml version="1.0" encoding="utf-8"?>

<string name="hello">Hello World, AndroidClientActivity!</string>
<string name="app_name">AndroidClient</string>
<string name="button">Message</string>
<string name="myClickHandler">myClickHandler</string>

AndroidClientActivity.class:

package com.maze.client;

import javax.ws.rs.core.MediaType;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;

import com.sun.jersey.api.client.Client;
import com.sun.jersey.api.client.WebResource;

public class AndroidClientActivity extends Activity {

private EditText text;

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    text = (EditText) findViewById(R.id.editText1);
}

public void myClickHandler(View view){
    switch (view.getId()) {
    case R.id.button1:

        WebResource wbr;
        Client client = Client.create();
        wbr = client.resource("http://my.ip.address:8080/MazeService/rest/service/hello");  
        String result = wbr.queryParam("number", "10").accept(MediaType.APPLICATION_JSON).get(String.class);
            text.setText(result);
        break;
    }

}

这行不通。我在 LogCat 中收到此错误(请帮我正确编辑):

02-08 23:39:04.423: E/AndroidRuntime(660): FATAL EXCEPTION: main
02-08 23:39:04.423: E/AndroidRuntime(660): java.lang.IllegalStateException: Could not execute method of the activity
02-08 23:39:04.423: E/AndroidRuntime(660):  at android.view.View$1.onClick(View.java:3044)
02-08 23:39:04.423: E/AndroidRuntime(660):  at android.view.View.performClick(View.java:3511)
02-08 23:39:04.423: E/AndroidRuntime(660):  at android.view.View$PerformClick.run(View.java:14105)
02-08 23:39:04.423: E/AndroidRuntime(660):  at android.os.Handler.handleCallback(Handler.java:605)
02-08 23:39:04.423: E/AndroidRuntime(660):  at android.os.Handler.dispatchMessage(Handler.java:92)
02-08 23:39:04.423: E/AndroidRuntime(660):  at android.os.Looper.loop(Looper.java:137)
02-08 23:39:04.423: E/AndroidRuntime(660):  at android.app.ActivityThread.main(ActivityThread.java:4424)
02-08 23:39:04.423: E/AndroidRuntime(660):  at java.lang.reflect.Method.invokeNative(Native Method)
02-08 23:39:04.423: E/AndroidRuntime(660):  at java.lang.reflect.Method.invoke(Method.java:511)
02-08 23:39:04.423: E/AndroidRuntime(660):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
02-08 23:39:04.423: E/AndroidRuntime(660):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
02-08 23:39:04.423: E/AndroidRuntime(660):  at dalvik.system.NativeStart.main(Native Method)
02-08 23:39:04.423: E/AndroidRuntime(660): Caused by: java.lang.reflect.InvocationTargetException
02-08 23:39:04.423: E/AndroidRuntime(660):  at java.lang.reflect.Method.invokeNative(Native Method)
02-08 23:39:04.423: E/AndroidRuntime(660):  at java.lang.reflect.Method.invoke(Method.java:511)
02-08 23:39:04.423: E/AndroidRuntime(660):  at android.view.View$1.onClick(View.java:3039)
02-08 23:39:04.423: E/AndroidRuntime(660):  ... 11 more
02-08 23:39:04.423: E/AndroidRuntime(660): Caused by: com.sun.jersey.api.client.ClientHandlerException: android.os.NetworkOnMainThreadException
02-08 23:39:04.423: E/AndroidRuntime(660):  at com.sun.jersey.client.urlconnection.URLConnectionClientHandler.handle(URLConnectionClientHandler.java:149)
02-08 23:39:04.423: E/AndroidRuntime(660):  at com.sun.jersey.api.client.Client.handle(Client.java:648)
02-08 23:39:04.423: E/AndroidRuntime(660):  at com.sun.jersey.api.client.WebResource.handle(WebResource.java:670)
02-08 23:39:04.423: E/AndroidRuntime(660):  at com.sun.jersey.api.client.WebResource.access$200(WebResource.java:74)
02-08 23:39:04.423: E/AndroidRuntime(660):  at com.sun.jersey.api.client.WebResource$Builder.get(WebResource.java:503)
02-08 23:39:04.423: E/AndroidRuntime(660):  at com.maze.client.AndroidClientActivity.myClickHandler(AndroidClientActivity.java:32)
02-08 23:39:04.423: E/AndroidRuntime(660):  ... 14 more
02-08 23:39:04.423: E/AndroidRuntime(660): Caused by: android.os.NetworkOnMainThreadException
02-08 23:39:04.423: E/AndroidRuntime(660):  at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1099)
02-08 23:39:04.423: E/AndroidRuntime(660):  at libcore.io.BlockGuardOs.connect(BlockGuardOs.java:84)
02-08 23:39:04.423: E/AndroidRuntime(660):  at libcore.io.IoBridge.connectErrno(IoBridge.java:127)
02-08 23:39:04.423: E/AndroidRuntime(660):  at libcore.io.IoBridge.connect(IoBridge.java:112)
02-08 23:39:04.423: E/AndroidRuntime(660):  at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:192)
02-08 23:39:04.423: E/AndroidRuntime(660):  at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:459)
02-08 23:39:04.423: E/AndroidRuntime(660):  at java.net.Socket.connect(Socket.java:842)
02-08 23:39:04.423: E/AndroidRuntime(660):  at libcore.net.http.HttpConnection.<init>(HttpConnection.java:77)
02-08 23:39:04.423: E/AndroidRuntime(660):  at libcore.net.http.HttpConnection.<init>(HttpConnection.java:50)
02-08 23:39:04.423: E/AndroidRuntime(660):  at libcore.net.http.HttpConnection$Address.connect(HttpConnection.java:351)
02-08 23:39:04.423: E/AndroidRuntime(660):  at libcore.net.http.HttpConnectionPool.get(HttpConnectionPool.java:86)
02-08 23:39:04.423: E/AndroidRuntime(660):  at libcore.net.http.HttpConnection.connect(HttpConnection.java:128)
02-08 23:39:04.423: E/AndroidRuntime(660):  at libcore.net.http.HttpEngine.openSocketConnection(HttpEngine.java:308)
02-08 23:39:04.423: E/AndroidRuntime(660):  at libcore.net.http.HttpEngine.connect(HttpEngine.java:303)
02-08 23:39:04.423: E/AndroidRuntime(660):  at libcore.net.http.HttpEngine.sendSocketRequest(HttpEngine.java:282)
02-08 23:39:04.423: E/AndroidRuntime(660):  at libcore.net.http.HttpEngine.sendRequest(HttpEngine.java:232)
02-08 23:39:04.423: E/AndroidRuntime(660):  at libcore.net.http.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:273)
02-08 23:39:04.423: E/AndroidRuntime(660):  at libcore.net.http.HttpURLConnectionImpl.getResponseCode(HttpURLConnectionImpl.java:479)
02-08 23:39:04.423: E/AndroidRuntime(660):  at com.sun.jersey.client.urlconnection.URLConnectionClientHandler._invoke(URLConnectionClientHandler.java:240)
02-08 23:39:04.423: E/AndroidRuntime(660):  at com.sun.jersey.client.urlconnection.URLConnectionClientHandler.handle(URLConnectionClientHandler.java:147)
02-08 23:39:04.423: E/AndroidRuntime(660):  ... 19 more
02-08 23:39:08.343: I/Process(660): Sending signal. PID: 660 SIG: 9

最佳答案

隐藏在堆栈跟踪中的是 Caused by: com.sun.jersey.api.client.ClientHandlerException: android.os.NetworkOnMainThreadException 在 Android 3.x 及更高版本上,你不能做网络主线程上的 I/O(这是你想要做的)。您需要使用 AsyncTask 进行网络请求.

关于Android 非法状态异常 : Could not execute method of the activity,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9203685/

相关文章:

android - "dp"具有多个矩形的 Xamarin Android Layer-List 中的问题

android - 将图像和文本存储在一种数据类型android中

Android:BitmapDrawable.Draw(Canvas) 似乎不起作用

android - 包含 Smack 库 : "Dependency xpp3:xpp3:1.1.4c is ignored for debug as it may be conflicting..." 后的警告

java - 如何在ListView中使用约束布局

c# - 从 Silverlight 使用 REST 服务时出现问题

php - SQLSTATE[42S22] : Column not found in REST Api

java - Spring RestTemplate StatuscodeException将自定义消息传递给异常处理

rest - 支付 REST API : Large amount causes "instrument declined" error in sandbox

http - 在过期 session : HTTP 401 response causes browser to display login window 上休息调用