我正在尝试访问Web API服务器并将json对象传递给它。问题是,我总是得到这个例外。我真的不知道我的代码有什么问题。这是:
String email = EmailAddress.getText().toString();
String password = Password.getText().toString();
String url = "SOME URL";
HttpClient httpClient = new DefaultHttpClient();
HttpPost httpPost = new HttpPost(url);
JSONObject loginObj = new JSONObject();
try
{
loginObj.put("Username", email);
loginObj.put("Password", password);
// Prepare JSON to send by setting the entity
httpPost.setEntity(new StringEntity(loginObj.toString(), "UTF-8"));
// Set up the header types needed to properly transfer JSON
httpPost.setHeader("Content-Type", "application/json");
httpPost.setHeader("Accept-Encoding", "application/json");
httpPost.setHeader("Accept-Language", "en-US");
// Execute POST
HttpResponse response = httpClient.execute(httpPost);
Log.i("Response String", response.getEntity().toString());
}
catch(Exception e)
{
Log.e("Exception", e.getMessage().toString());
}
这是我的日志:
02-02 23:06:37.080: E/AndroidRuntime(26513): FATAL EXCEPTION: main
02-02 23:06:37.080: E/AndroidRuntime(26513): java.lang.IllegalStateException: Could not execute method of the activity
02-02 23:06:37.080: E/AndroidRuntime(26513): at android.view.View$1.onClick(View.java:3691)
02-02 23:06:37.080: E/AndroidRuntime(26513): at android.view.View.performClick(View.java:4211)
02-02 23:06:37.080: E/AndroidRuntime(26513): at android.view.View$PerformClick.run(View.java:17267)
02-02 23:06:37.080: E/AndroidRuntime(26513): at android.os.Handler.handleCallback(Handler.java:615)
02-02 23:06:37.080: E/AndroidRuntime(26513): at android.os.Handler.dispatchMessage(Handler.java:92)
02-02 23:06:37.080: E/AndroidRuntime(26513): at android.os.Looper.loop(Looper.java:137)
02-02 23:06:37.080: E/AndroidRuntime(26513): at android.app.ActivityThread.main(ActivityThread.java:4898)
02-02 23:06:37.080: E/AndroidRuntime(26513): at java.lang.reflect.Method.invokeNative(Native Method)
02-02 23:06:37.080: E/AndroidRuntime(26513): at java.lang.reflect.Method.invoke(Method.java:511)
02-02 23:06:37.080: E/AndroidRuntime(26513): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1006)
02-02 23:06:37.080: E/AndroidRuntime(26513): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:773)
02-02 23:06:37.080: E/AndroidRuntime(26513): at dalvik.system.NativeStart.main(Native Method)
02-02 23:06:37.080: E/AndroidRuntime(26513): Caused by: java.lang.reflect.InvocationTargetException
02-02 23:06:37.080: E/AndroidRuntime(26513): at java.lang.reflect.Method.invokeNative(Native Method)
02-02 23:06:37.080: E/AndroidRuntime(26513): at java.lang.reflect.Method.invoke(Method.java:511)
02-02 23:06:37.080: E/AndroidRuntime(26513): at android.view.View$1.onClick(View.java:3686)
02-02 23:06:37.080: E/AndroidRuntime(26513): ... 11 more
02-02 23:06:37.080: E/AndroidRuntime(26513): Caused by: java.lang.NullPointerException
02-02 23:06:37.080: E/AndroidRuntime(26513): at com.example.maddiosapp.Login.userLogin(Login.java:81)
02-02 23:06:37.080: E/AndroidRuntime(26513): ... 14 more
任何想法?谢谢!
答案 0 :(得分:1)
看起来你正在UI线程上进行网络操作,你的try catch块正在捕获android.os.NetworkOnMainThreadException。至少这看起来像你的调用堆栈中的可能代码,你在获取网络请求的同一个函数中获得密码/用户名,你应该在UI线程上获取这些值。
你可以在这里看到:
http://androidxref.com/4.4.2_r1/xref/frameworks/base/core/java/android/os/StrictMode.java#1145
创建NetworkOnMainThreadException时没有提供任何消息,所以当你调用getMessage()。toString()时,getMessage()返回null,导致NullPointerException - 就像你的情况一样。
答案 1 :(得分:0)
Log.e("Exception", e.getMessage().toString());
是抛出异常的行。原因很简单:捕获一般异常(在大多数情况下)是一种不好的做法,应该避免使用。
每次使用try
时,都应该捕获可能发生的特定异常,在您的情况下,您可能正在捕获try
语句无意的异常。
有关此here的更多信息。