Java IllegalStateException:无法执行活动的方法,如何解决?

Java IllegalStateException:无法执行活动的方法,如何解决?,java,android,android-activity,Java,Android,Android Activity,我正在独立构建一个关于学校的时间表应用程序。我现在正在测试我的应用程序,它在安卓2.3.6版上运行良好 然而,当我尝试在虚拟设备上运行它时,它会像正常一样启动 但是,在点击应执行登录过程的按钮后,应用程序返回以下错误: 01-05 00:52:23.180: E/AndroidRuntime(858): FATAL EXCEPTION: main 01-05 00:52:23.180: E/AndroidRuntime(858): java.lang.IllegalStateException:

我正在独立构建一个关于学校的时间表应用程序。我现在正在测试我的应用程序,它在安卓2.3.6版上运行良好

然而,当我尝试在虚拟设备上运行它时,它会像正常一样启动

但是,在点击应执行登录过程的按钮后,应用程序返回以下错误:

01-05 00:52:23.180: E/AndroidRuntime(858): FATAL EXCEPTION: main
01-05 00:52:23.180: E/AndroidRuntime(858): java.lang.IllegalStateException: Could not execute method of the activity
01-05 00:52:23.180: E/AndroidRuntime(858):  at android.view.View$1.onClick(View.java:3597)
01-05 00:52:23.180: E/AndroidRuntime(858):  at android.view.View.performClick(View.java:4202)
01-05 00:52:23.180: E/AndroidRuntime(858):  at android.view.View$PerformClick.run(View.java:17340)
01-05 00:52:23.180: E/AndroidRuntime(858):  at android.os.Handler.handleCallback(Handler.java:725)
01-05 00:52:23.180: E/AndroidRuntime(858):  at android.os.Handler.dispatchMessage(Handler.java:92)
01-05 00:52:23.180: E/AndroidRuntime(858):  at android.os.Looper.loop(Looper.java:137)
01-05 00:52:23.180: E/AndroidRuntime(858):  at android.app.ActivityThread.main(ActivityThread.java:5039)
01-05 00:52:23.180: E/AndroidRuntime(858):  at java.lang.reflect.Method.invokeNative(Native Method)
01-05 00:52:23.180: E/AndroidRuntime(858):  at java.lang.reflect.Method.invoke(Method.java:511)
01-05 00:52:23.180: E/AndroidRuntime(858):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
01-05 00:52:23.180: E/AndroidRuntime(858):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
01-05 00:52:23.180: E/AndroidRuntime(858):  at dalvik.system.NativeStart.main(Native Method)
01-05 00:52:23.180: E/AndroidRuntime(858): Caused by: java.lang.reflect.InvocationTargetException
01-05 00:52:23.180: E/AndroidRuntime(858):  at java.lang.reflect.Method.invokeNative(Native Method)
01-05 00:52:23.180: E/AndroidRuntime(858):  at java.lang.reflect.Method.invoke(Method.java:511)
01-05 00:52:23.180: E/AndroidRuntime(858):  at android.view.View$1.onClick(View.java:3592)
01-05 00:52:23.180: E/AndroidRuntime(858):  ... 11 more
01-05 00:52:23.180: E/AndroidRuntime(858): Caused by: android.os.NetworkOnMainThreadException
01-05 00:52:23.180: E/AndroidRuntime(858):  at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1117)
01-05 00:52:23.180: E/AndroidRuntime(858):  at java.net.InetAddress.lookupHostByName(InetAddress.java:385)
01-05 00:52:23.180: E/AndroidRuntime(858):  at java.net.InetAddress.getAllByNameImpl(InetAddress.java:236)
01-05 00:52:23.180: E/AndroidRuntime(858):  at java.net.InetAddress.getAllByName(InetAddress.java:214)
01-05 00:52:23.180: E/AndroidRuntime(858):  at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:137)
01-05 00:52:23.180: E/AndroidRuntime(858):  at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:164)
01-05 00:52:23.180: E/AndroidRuntime(858):  at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:119)
01-05 00:52:23.180: E/AndroidRuntime(858):  at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:360)
01-05 00:52:23.180: E/AndroidRuntime(858):  at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:555)
01-05 00:52:23.180: E/AndroidRuntime(858):  at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487)
01-05 00:52:23.180: E/AndroidRuntime(858):  at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:465)
01-05 00:52:23.180: E/AndroidRuntime(858):  at com.mattle.timetable.JSONParser.getJSONFromUrl(JSONParser.java:42)
01-05 00:52:23.180: E/AndroidRuntime(858):  at com.mattle.timetable.LoginView.doLogin(LoginView.java:129)
01-05 00:52:23.180: E/AndroidRuntime(858):  ... 14 more
我使用本页中的jsonparser类:

我的登录代码如下所示:

package com.mattle.timetable;

import static com.mattle.timetable.MainActivity.PREFS_NAME;

import java.io.BufferedReader;
import java.math.BigInteger;
import java.net.URI;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.ArrayList;
import java.util.List;

import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
import org.json.JSONException;
import org.json.JSONObject;

import android.app.Activity;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.EditText;

import com.google.android.gcm.GCMRegistrar;
import com.markupartist.android.widget.ActionBar;

public class LoginView extends Activity {

private JSONParser jsonParser;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_login_view);

    ActionBar actionBar = (ActionBar) findViewById(R.id.actionbar);
    // You can also assign the title programmatically by passing a
    // CharSequence or resource id.
    actionBar.setTitle("Jouw Lesrooster");
}

@Override
public void onBackPressed() {

    Intent startMain = new Intent(Intent.ACTION_MAIN);
    startMain.addCategory(Intent.CATEGORY_HOME);
    startMain.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    startActivity(startMain);

}

 private String getStringResourceByName(String aString)
    {
      String packageName = "com.mattle.timetable";
      int resId = getResources().getIdentifier(aString, "string", packageName);
      return getString(resId);
    }

private boolean haveNetworkConnection() {
    boolean haveConnectedWifi = false;
    boolean haveConnectedMobile = false;

    ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
    NetworkInfo[] netInfo = cm.getAllNetworkInfo();
    for (NetworkInfo ni : netInfo) {
        if (ni.getTypeName().equalsIgnoreCase("WIFI"))
            if (ni.isConnected())
                haveConnectedWifi = true;
        if (ni.getTypeName().equalsIgnoreCase("MOBILE"))
            if (ni.isConnected())
                haveConnectedMobile = true;
    }
    return haveConnectedWifi || haveConnectedMobile;
}

public String sha1(String s) {
    MessageDigest digest = null;
            try {
                    digest = MessageDigest.getInstance("SHA-1");
            } catch (NoSuchAlgorithmException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
            }
    digest.reset();
    byte[] data = digest.digest(s.getBytes());
    return String.format("%0" + (data.length*2) + "X", new BigInteger(1, data));
}

public void doRegister(View view) {

    Intent gotoregister = new Intent(this, Register.class);
    startActivity(gotoregister);

}

public void doLogin(View view) throws Exception {

    BufferedReader in = null;

    try{

        if(haveNetworkConnection()) {

            EditText getusername = (EditText) findViewById(R.id.username);
            String username = getusername.getText().toString();

            EditText getpassword = (EditText) findViewById(R.id.password);
            String password = sha1(getpassword.getText().toString() + "SOMESALTHERENVM");

        HttpClient client = new DefaultHttpClient();
        URI website = new URI("SOMEURL");
        HttpPost request = new HttpPost();
        List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2);
        nameValuePairs.add(new BasicNameValuePair("login_username", username));
        nameValuePairs.add(new BasicNameValuePair("login_password", password));

        jsonParser = new JSONParser();
        JSONObject json = jsonParser.getJSONFromUrl("http://jouwlesrooster.nl/api/doLogin/", nameValuePairs);

        try {

            if (json.getString("success") != null) {
                String res = json.getString("success");
                if(Integer.parseInt(res) == 1){
            //Log.d("MYTAG", "Print this in logcat...");
            //Log.d("MYTAG", username + " ddd " + password);

            getSharedPreferences("myLoginshit",MODE_PRIVATE)
            .edit()
            .putString("Username", username)
            .putString("Password", password)
            .commit();

            GCMRegistrar.checkDevice(this);
            GCMRegistrar.checkManifest(this);
            String regId = GCMRegistrar.getRegistrationId(this);
            if (regId.equals("")) {
              GCMRegistrar.register(this, "***");
              Log.i("test", "ddd");
             // Toast.makeText(getApplicationContext(), "", Toast.LENGTH_LONG).show();
            } else {
            //  Toast.makeText(getApplicationContext(), "Already registered", Toast.LENGTH_LONG).show();
             // Log.v(TAG, "Already registered");
            }

            Intent gotomenu = new Intent(this, Menu.class);
            startActivity(gotomenu);

            }
            }

        } finally {

        }

        } else {


        }

    }finally{
        if (in != null) {
            try{
                in.close();

            }catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
}
}
package com.mattle.timeline;
导入静态com.mattle.timeline.MainActivity.PREFS_NAME;
导入java.io.BufferedReader;
导入java.math.biginger;
导入java.net.URI;
导入java.security.MessageDigest;
导入java.security.NoSuchAlgorithmException;
导入java.util.ArrayList;
导入java.util.List;
导入org.apache.http.HttpResponse;
导入org.apache.http.NameValuePair;
导入org.apache.http.client.HttpClient;
导入org.apache.http.client.entity.UrlEncodedFormEntity;
导入org.apache.http.client.methods.HttpPost;
导入org.apache.http.impl.client.DefaultHttpClient;
导入org.apache.http.message.BasicNameValuePair;
导入org.json.JSONException;
导入org.json.JSONObject;
导入android.app.Activity;
导入android.app.AlertDialog;
导入android.content.Context;
导入android.content.DialogInterface;
导入android.content.Intent;
导入android.net.ConnectivityManager;
导入android.net.NetworkInfo;
导入android.os.Bundle;
导入android.util.Log;
导入android.view.view;
导入android.widget.EditText;
导入com.google.android.gcm.gcmregistar;
导入com.markupartist.android.widget.ActionBar;
公共类LoginView扩展活动{
私有JSONParser JSONParser;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity\u login\u视图);
ActionBar ActionBar=(ActionBar)findViewById(R.id.ActionBar);
//您还可以通过传递
//字符序列或资源id。
actionBar.setTitle(“Jouw Lessrooster”);
}
@凌驾
public void onBackPressed(){
Intent startMain=新意图(Intent.ACTION\u MAIN);
startMain.addCategory(Intent.CATEGORY\u HOME);
startMain.setFlags(意图、标志、活动、新任务);
星触觉(startMain);
}
私有字符串getStringResourceByName(字符串搜索)
{
字符串packageName=“com.mattle.timeline”;
int resId=getResources().getIdentifier(aString,“string”,packageName);
返回getString(resId);
}
私有布尔haveNetworkConnection(){
布尔值haveConnectedWifi=false;
布尔haveConnectedMobile=false;
ConnectivityManager cm=(ConnectivityManager)getSystemService(Context.CONNECTIVITY_服务);
NetworkInfo[]netInfo=cm.getAllNetworkInfo();
对于(网络信息ni:netInfo){
if(ni.getTypeName().equalsIgnoreCase(“WIFI”))
如果(ni.isConnected())
haveConnectedWifi=true;
if(ni.getTypeName().equalsIgnoreCase(“移动”))
如果(ni.isConnected())
haveConnectedMobile=true;
}
返回haveConnectedWifi | | haveConnectedMobile;
}
公共字符串sha1(字符串s){
MessageDigest=null;
试一试{
digest=MessageDigest.getInstance(“SHA-1”);
}捕获(无算法异常){
//TODO自动生成的捕捉块
e、 printStackTrace();
}
reset();
byte[]data=digest.digest(s.getBytes());
返回String.format(“%0”+(data.length*2)+“X”,新的BigInteger(1,数据));
}
公共作废登记簿(视图){
Intent gotoregister=新Intent(这是Register.class);
星触觉(gotoregister);
}
public void doLogin(视图)引发异常{
BufferedReader in=null;
试一试{
如果(haveNetworkConnection()){
EditText getusername=(EditText)findViewById(R.id.username);
字符串username=getusername.getText().toString();
EditText getpassword=(EditText)findViewById(R.id.password);
字符串密码=sha1(getpassword.getText().toString()+“SOMESALTHERENVM”);
HttpClient=new DefaultHttpClient();
URI网站=新的URI(“SOMEURL”);
HttpPost请求=新建HttpPost();
List nameValuePairs=新的ArrayList(2);
添加(新的BasicNameValuePair(“login_username”,username));
添加(新的BasicNameValuePair(“登录密码”,password));
jsonParser=新的jsonParser();
JSONObject json=jsonParser.getJSONFromUrl(“http://jouwlesrooster.nl/api/doLogin/“,nameValuePairs);
试一试{
if(json.getString(“success”)!=null){
String res=json.getString(“成功”);
if(Integer.parseInt(res)==1){
//d(“MYTAG”,“在logcat中打印…”);
//Log.d(“MYTAG”,用户名+“ddd”+密码);
GetSharedReferences(“myLoginshit”,模式\u私有)
.edit()
.putString(“用户名”,用户名)
.putString(“密码”,Password)
.commit();
GCMRegistar.检查装置(本);
GCMRegistar.检查清单(本);
字符串regId=gcmregistar.getRegistrationId(this);
if(regId.equals(“”){
GCMRegistrar.寄存器(此“***”);
Log.i(“测试”、“ddd”);
//Toast.makeText(getApplicationContext(),“”,Toast.LENGTH_LONG.show();
}否则{
//Toast.makeText(getApplicationContext(),“已注册”,Toast.LENGTH_LONG.show();
//Log.v(标签“已注册”);
}
Intent gotomenu=新的Intent(这个,Menu.class);
星触觉(gotomenu);
}
}
}最后{
}
}否则{
}
}最后{
if(in!=null){
Caused by: android.os.NetworkOnMainThreadException