为什么我无法执行的活动越来越java.lang.IllegalStateException的方法是什么? [英] Why I could not execute method of the activity getting java.lang.IllegalStateException?

查看:423
本文介绍了为什么我无法执行的活动越来越java.lang.IllegalStateException的方法是什么?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我已经创建新的项目。
新增权限AndroidManifex

 <使用许可权的android:NAME =android.permission.INTERNET对/>

涂改MainActivity:

 包com.example.app;进口android.support.v7.app.ActionBarActivity;
进口android.os.Bundle;进口org.apache.http.client.HttpClient;
进口org.apache.http.client.methods.HttpGet;
进口org.apache.http.impl.client.DefaultHttpClient;进口java.io.IOException异常;公共类MainActivity扩展ActionBarActivity {
    @覆盖
    保护无效的onCreate(捆绑savedInstanceState){
        super.onCreate(savedInstanceState);
        的setContentView(R.layout.activity_main);        连接();
    }    私人无效连接(查看视图){
        HttpClient的客户端=新DefaultHttpClient();
        HTTPGET请求=新HTTPGET(HTTP://www.mywebsite.com / ...);
        尝试{
            client.execute(请求);
        }赶上(IOException异常五){
            e.printStackTrace();
        }
    }
}

这是我的布局:

 <的FrameLayout的xmlns:机器人=htt​​p://schemas.android.com/apk/res/android
    的xmlns:工具=htt​​p://schemas.android.com/tool​​s
    机器人:ID =@ + ID /容器
    机器人:layout_width =match_parent
    机器人:layout_height =match_parent
    工具:上下文=。MainActivity
    工具:忽略=MergeRootFrame>    <按钮
        机器人:layout_width =WRAP_CONTENT
        机器人:layout_height =WRAP_CONTENT
        机器人:文字=HTTPGET
        安卓的onClick =连接/>< /&的FrameLayout GT;

但是,当我按下按钮,我只是得到:

  java.lang.IllegalStateException:无法执行活动的方法
    在android.view.View $ 1.onClick(View.java:3660)
    在android.view.View.performClick(View.java:4162)
    在android.view.View $ PerformClick.run(View.java:17082)
    在android.os.Handler.handleCallback(Handler.java:615)
    在android.os.Handler.dispatchMessage(Handler.java:92)
    在android.os.Looper.loop(Looper.java:137)
    在android.app.ActivityThread.main(ActivityThread.java:4856)
    在java.lang.reflect.Method.invokeNative(本机方法)
    在java.lang.reflect.Method.invoke(Method.java:511)
    在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:1007)
    在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:774)
    在dalvik.system.NativeStart.main(本机方法)
    java.lang.reflect.InvocationTargetException:产生的原因
    在java.lang.reflect.Method.invokeNative(本机方法)
    在java.lang.reflect.Method.invoke(Method.java:511)
    在android.view.View $ 1.onClick(View.java:3655)
    在android.view.View.performClick(View.java:4162)
    在android.view.View $ PerformClick.run(View.java:17082)
    在android.os.Handler.handleCallback(Handler.java:615)
    在android.os.Handler.dispatchMessage(Handler.java:92)
    在android.os.Looper.loop(Looper.java:137)
    在android.app.ActivityThread.main(ActivityThread.java:4856)
    在java.lang.reflect.Method.invokeNative(本机方法)
    在java.lang.reflect.Method.invoke(Method.java:511)
    在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:1007)
    在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:774)
    在dalvik.system.NativeStart.main(本机方法)
    android.os.NetworkOnMainThreadException:产生的原因
    在android.os.StrictMode $ AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1118)
    在java.net.InetAddress.lookupHostByName(InetAddress.java:385)
    在java.net.InetAddress.getAllByNameImpl(InetAddress.java:236)
    在java.net.InetAddress.getAllByName(InetAddress.java:214)
    在org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:137)
    在org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:164)
    在org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:119)
    在org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:360)
    在org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:555)
    在org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487)
    在org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:465)
    在com.example.app.MainActivity.connect(MainActivity.java:24)
    在java.lang.reflect.Method.invokeNative(本机方法)
    在java.lang.reflect.Method.invoke(Method.java:511)
    在android.view.View $ 1.onClick(View.java:3655)
    在android.view.View.performClick(View.java:4162)
    在android.view.View $ PerformClick.run(View.java:17082)
    在android.os.Handler.handleCallback(Handler.java:615)
    在android.os.Handler.dispatchMessage(Handler.java:92)
    在android.os.Looper.loop(Looper.java:137)
    在android.app.ActivityThread.main(ActivityThread.java:4856)
    在java.lang.reflect.Method.invokeNative(本机方法)
    在java.lang.reflect.Method.invoke(Method.java:511)
    在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:1007)
    在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:774)
    在dalvik.system.NativeStart.main(本机方法)


解决方案

更改为

 公共无效连接(视图v){//错过查看参数

<一个href=\"http://developer.android.com/reference/android/view/View.html#attr_android:onClick\">http://developer.android.com/reference/android/view/View.html#attr_android:onClick

例如,如果您指定安卓的onClick =sayHello的,您必须声明公共无效的sayHello(视图V)上下文的方法(通常情况下,你的活动)。

和删除

 连接(); //中的onCreate

UI线程同时正在运行的网络相关操作。你需要使用线程的AsyncTask

例如:

 公共无效连接(视图v){
      新TheTask()执行();
}
类TheTask扩展的AsyncTask&LT;太虚,太虚,太虚&GT;
{
 @覆盖
 保护无效doInBackground(虚空...... PARAMS){
   HttpClient的客户端=新DefaultHttpClient();
   HTTPGET请求=新HTTPGET(http://www.yiinotes.com/nutrimondo/web/meals/week);
    尝试{
        client.execute(请求);
    }赶上(IOException异常五){
        e.printStackTrace();
    }
   返回null;
 }
}

I've create new project. Added permissions to AndroidManifex

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

Altered MainActivity:

package com.example.app;

import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;

import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;

import java.io.IOException;

public class MainActivity extends ActionBarActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        connect();
    }

    private void connect(View view) {
        HttpClient client = new DefaultHttpClient();
        HttpGet request = new HttpGet("http://www.mywebsite.com/...");
        try {
            client.execute(request);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

This is my layout:

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/container"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity"
    tools:ignore="MergeRootFrame">

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="HttpGet"
        android:onClick="connect" />

</FrameLayout>

But when I push the button I simply get:

java.lang.IllegalStateException: Could not execute method of the activity
    at android.view.View$1.onClick(View.java:3660)
    at android.view.View.performClick(View.java:4162)
    at android.view.View$PerformClick.run(View.java:17082)
    at android.os.Handler.handleCallback(Handler.java:615)
    at android.os.Handler.dispatchMessage(Handler.java:92)
    at android.os.Looper.loop(Looper.java:137)
    at android.app.ActivityThread.main(ActivityThread.java:4856)
    at java.lang.reflect.Method.invokeNative(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:511)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1007)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:774)
    at dalvik.system.NativeStart.main(Native Method)
    Caused by: java.lang.reflect.InvocationTargetException
    at java.lang.reflect.Method.invokeNative(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:511)
    at android.view.View$1.onClick(View.java:3655)
    at android.view.View.performClick(View.java:4162)
    at android.view.View$PerformClick.run(View.java:17082)
    at android.os.Handler.handleCallback(Handler.java:615)
    at android.os.Handler.dispatchMessage(Handler.java:92)
    at android.os.Looper.loop(Looper.java:137)
    at android.app.ActivityThread.main(ActivityThread.java:4856)
    at java.lang.reflect.Method.invokeNative(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:511)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1007)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:774)
    at dalvik.system.NativeStart.main(Native Method)
    Caused by: android.os.NetworkOnMainThreadException
    at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1118)
    at java.net.InetAddress.lookupHostByName(InetAddress.java:385)
    at java.net.InetAddress.getAllByNameImpl(InetAddress.java:236)
    at java.net.InetAddress.getAllByName(InetAddress.java:214)
    at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:137)
    at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:164)
    at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:119)
    at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:360)
    at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:555)
    at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487)
    at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:465)
    at com.example.app.MainActivity.connect(MainActivity.java:24)
    at java.lang.reflect.Method.invokeNative(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:511)
    at android.view.View$1.onClick(View.java:3655)
    at android.view.View.performClick(View.java:4162)
    at android.view.View$PerformClick.run(View.java:17082)
    at android.os.Handler.handleCallback(Handler.java:615)
    at android.os.Handler.dispatchMessage(Handler.java:92)
    at android.os.Looper.loop(Looper.java:137)
    at android.app.ActivityThread.main(ActivityThread.java:4856)
    at java.lang.reflect.Method.invokeNative(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:511)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1007)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:774)
    at dalvik.system.NativeStart.main(Native Method)

解决方案

Change to

 public void connect(View v) { // missed View as param

http://developer.android.com/reference/android/view/View.html#attr_android:onClick

For instance, if you specify android:onClick="sayHello", you must declare a public void sayHello(View v) method of your context (typically, your Activity).

and remove

  connect(); // in onCreate

Also you are running network related operation on the ui thread. You need to use a thread or AsyncTask

Example :

public void connect(View v) { 
      new TheTask().execute();
}
class TheTask extends Asynctask<Void,Void,Void>
{
 @Override
 protected Void doInBackground(Void... params) {
   HttpClient client = new DefaultHttpClient();
   HttpGet request = new HttpGet("http://www.yiinotes.com/nutrimondo/web/meals/week");
    try {
        client.execute(request);
    } catch (IOException e) {
        e.printStackTrace();
    }
   return null; 
 }
}

这篇关于为什么我无法执行的活动越来越java.lang.IllegalStateException的方法是什么?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆