Java 中的Android.OS.NetworkOnMainThreadException
我正在尝试获取用户的facebook个人资料图片及其缩略图,并在下载后将其添加到解析类中。看一看Java 中的Android.OS.NetworkOnMainThreadException,java,android,runtime-error,Java,Android,Runtime Error,我正在尝试获取用户的facebook个人资料图片及其缩略图,并在下载后将其添加到解析类中。看一看 @Override protected String doInBackground(String[] Params) { String accessToken = AccessToken ; String email = EMAIL; profile = com.facebook.Profile.getCurrentProfile(); User.put("di
@Override
protected String doInBackground(String[] Params)
{
String accessToken = AccessToken ;
String email = EMAIL;
profile = com.facebook.Profile.getCurrentProfile();
User.put("displayName", profile.getName());
User.put("facebookId", profile.getId());
User.setUsername(profile.getId());
try
{
User.put("FBaccessToken", accessToken);
User.setEmail(email);
}
catch (Exception e){
Log.e("ERROR","Failed");
}
User.setPassword(profile.getId() + profile.getId());
ParseQuery<ParseObject> query = ParseQuery.getQuery("User");
query.whereEqualTo("username", profile.getId());
query.findInBackground(new FindCallback<ParseObject>() {
@Override
public void done(List<ParseObject> list, ParseException e)
{
if (e == null)
{
//brace the lord no error
if (list == null)
{
parseSignUp() ;
}
else
{
if (list.isEmpty())
{
parseSignUp() ;
}
else
{
login(profile.getId(), (profile.getId() + profile.getId()));
}
for (ParseObject str : list)
{
Log.e("ERROR", "what ?");
}
}
}
else
{
Log.e("ERROR", "not");
}
}
});
return "done";
}
即使网络内容在AsyncTask中,此代码仍会抛出此错误
12-04 19:02:27.773 4263-4263/com.socketmill.thisismohit.vine E/ERROR﹕android.os.NetworkOnMainThreadException
12-04 19:02:27.803 4263-4263/com.socketmill.thisismohit.vine E/AndroidRuntime﹕ FATAL EXCEPTION: main
java.lang.NullPointerException
at com.parse.ParseFile.<init>(ParseFile.java:188)
at com.parse.ParseFile.<init>(ParseFile.java:218)
at com.socketmill.thisismohit.vine.SendFeedBackJob.parseSignUp(SendFeedBackJob.java:207)
at com.socketmill.thisismohit.vine.SendFeedBackJob$1.done(SendFeedBackJob.java:90)
at com.socketmill.thisismohit.vine.SendFeedBackJob$1.done(SendFeedBackJob.java:75)
at com.parse.ParseTaskUtils$2$1.run(ParseTaskUtils.java:115)
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:4921)
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:1038)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:805)
at dalvik.system.NativeStart.main(Native Method)
12-04 19:02:27.773 4263-4263/com.socketmill.thismohit.vine E/错误﹕android.os.NetworkOnMainThreadException
12-04 19:02:27.803 4263-4263/com.socketmill.thismohit.vine E E/AndroidRuntime﹕ 致命异常:主
java.lang.NullPointerException
在com.parse.ParseFile.(ParseFile.java:188)
在com.parse.ParseFile.(ParseFile.java:218)
在com.socketmill.thismohit.vine.SendFeedBackJob.parseSignUp(SendFeedBackJob.java:207)上
在com.socketmill.thismohit.vine.SendFeedBackJob$1.done(SendFeedBackJob.java:90)上
在com.socketmill.thismohit.vine.SendFeedBackJob$1.done(SendFeedBackJob.java:75)上
在com.parse.ParseTaskUtils$2$1.run(ParseTaskUtils.java:115)
位于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:4921)
位于java.lang.reflect.Method.Invokenactive(本机方法)
位于java.lang.reflect.Method.invoke(Method.java:511)
在com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1038)上
位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:805)
在dalvik.system.NativeStart.main(本机方法)
仅仅因为它是在doInBackground中启动的,并不意味着内部的整个代码都是在后台线程中运行的。可能您正在使用的库正在使用UI线程发送并提供回调
读取时,query.findInBackground(new FindCallback(){})
方法将在UI线程上运行public void done(List List,ParseException e)
方法
这意味着您的parseSignUp()
方法以及geByteArrayFromURL
方法也在UI线程上运行
事实上,考虑到解析库为您处理这一切的事实。您可能应该完全从AsyncTask中删除解析库。因为它将在库完成执行之前转到
onPostExecute()
(您在doInBackground
中启动一个新线程,仅仅因为它在doInBackground中启动,并不意味着在后台线程中运行的整个代码。可能您正在使用的库正在使用UI线程发送回调
读取时,query.findInBackground(new FindCallback(){})
方法将在UI线程上运行public void done(List List,ParseException e)
方法
这意味着您的parseSignUp()
方法以及geByteArrayFromURL
方法也在UI线程上运行
事实上,考虑到解析库为您处理这一切。您可能应该完全从AsyncTask中删除解析库。因为它将在库完成执行之前转到
onPostExecute()
(您在doInBackground
中启动一个新线程FindInBackground的done回调方法在UI线程上运行,而不是在异步线程上运行FindInBackground的done回调方法在UI线程上运行,而不是在异步线程上运行您将获得一个NullPointerException,这就是导致应用程序崩溃的方法。E/ERROR﹕android.os.NetworkOnMainThreadException此错误正是您可能怀疑的。您可能正在主UI线程上使用网络。@somerandomusername我正在使用geByteArrayFromURL()中的网络服务,我正在doInBackground()中调用该服务,我只是不明白这是怎么回事surfacing@MarianoZorrilla空指针异常不是问题所在,android.os.NetworkOnMainThreadException是问题所在,当我尝试从network@somerandomusername这仍然行不通:(你得到了一个NullPointerException,它会使你的应用程序崩溃。E/ERROR﹕android.os.NetworkOnMainThreadException此错误正是您可能怀疑的。您可能正在主UI线程上使用网络。@somerandomusername我正在使用geByteArrayFromURL()中的网络服务,我正在doInBackground()中调用该服务,我只是不明白这是怎么回事surfacing@MarianoZorrilla空指针异常不是问题所在,android.os.NetworkOnMainThreadException是问题所在,当我尝试从network@somerandomusername这仍然行不通:(有趣的是,让我试试这个方法。这个方法很神奇,只是添加了一些布尔值,如果找到了用户,就在回调之后,我检查了标志并调用了parseSignup()非常有效。谢谢你的有趣,让我试试这个。这就像魔术一样有效,只是添加了一些布尔值,如果找到了用户,就在回调之后,我检查了标志并调用了parseSignup(),非常有效。谢谢你
12-04 19:02:27.773 4263-4263/com.socketmill.thisismohit.vine E/ERROR﹕android.os.NetworkOnMainThreadException
12-04 19:02:27.803 4263-4263/com.socketmill.thisismohit.vine E/AndroidRuntime﹕ FATAL EXCEPTION: main
java.lang.NullPointerException
at com.parse.ParseFile.<init>(ParseFile.java:188)
at com.parse.ParseFile.<init>(ParseFile.java:218)
at com.socketmill.thisismohit.vine.SendFeedBackJob.parseSignUp(SendFeedBackJob.java:207)
at com.socketmill.thisismohit.vine.SendFeedBackJob$1.done(SendFeedBackJob.java:90)
at com.socketmill.thisismohit.vine.SendFeedBackJob$1.done(SendFeedBackJob.java:75)
at com.parse.ParseTaskUtils$2$1.run(ParseTaskUtils.java:115)
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:4921)
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:1038)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:805)
at dalvik.system.NativeStart.main(Native Method)