2012-02-09 7 views
3

私はAndroidが初めてです。私がしようとしているのは、ボタンを押して文字列をテキストフィールドに書くときに、Webサービス経由でStringを取得することです。Android IllegalStateException:アクティビティのメソッドを実行できませんでした

Manifext.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> 

main.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> 

のstrings.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 
+1

あなたのlogcatのフォーマットをお手伝いします。 – JoxTraex

答えて

17

アップのAndroid 3.xの上Caused by: com.sun.jersey.api.client.ClientHandlerException: android.os.NetworkOnMainThreadExceptionあると、あなたは、メインのネットワークI/Oを行うことはできませんスレッド(これはあなたがやろうとしていることです)。あなたはAsyncTaskでネットワーク要求をしたいと思うでしょう。

+0

ありがとうございました。しかし、私はもう一つの問題に直面しています。[お願いします](http://stackoverflow.com/questions/9204134/android-restful-client) – Dragos

0

私は同じ問題があり、狂っていました。 このコードを追加しなければならないのは、onCreateFIRST LINEです。 (super.onCreateの前):

StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build(); 
StrictMode.setThreadPolicy(policy); 
+0

これはすばらしい解決策ですが、これは良いかもしれませんが、別のスレッドでリソース集中型のタスク(ネットワーク操作など)を実行する必要があります。 – kraxor

関連する問題