2012-10-29 20 views
0

让我先澄清一下我的问题。解析时的线程处理

我这样做,解析数据(使用DOM)并将其绑定到我的列表视图。一切工作正常,直到我发现它需要很长时间才能做出回应。要做到这一点,我想出了一个想法,我应该把它放在一个线程内。所以我添加了一个扩展线程的类。

我在解析

public void SetFriendString() 
{ 
    XMLParser parser2 = new XMLParser(); 
    parser2.getXmlFromUrl(URL_HERE); 

     //HTTP POST 
     String url_Getmembermob= URL_FBFRIEND ; 
     //String xml_getMembermob=null; 
     try { 
     HttpClient httpclient = new DefaultHttpClient(); 
     HttpPost httppost = new HttpPost(url_Getmembermob); 

     List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(4); 
     nameValuePairs.add(new BasicNameValuePair("oAuth", "Test123")); 
     nameValuePairs.add(new BasicNameValuePair("""", modGen...)); 
     nameValuePairs.add(new BasicNameValuePair("", modGen....)); 
     nameValuePairs.add(new BasicNameValuePair("", "here")); 

     //Log.i("nameValuePairs", "nameValuePairs=" + nameValuePairs); 

     httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs)); 
     HttpResponse httpResponse = httpclient.execute(httppost); 

     HttpEntity httpEntity = httpResponse.getEntity(); 

     FBFRIENDS = EntityUtils.toString(httpEntity);  

     Button GetFriends =(Button) findViewById(R.id.btnAllFriends); 
     GetFriends.setBackgroundDrawable(getResources().getDrawable(R.drawable.leftcornerclicked)); 
     KEY_FRIENDSDATA = FBFRIENDS; 

     Log.i("xml-return",""+ FBFRIENDS); 

    } catch (UnsupportedEncodingException e) { 
     e.printStackTrace(); 
    }catch (ClientProtocolException e) { 
     e.printStackTrace(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 

} 

代码,增加了该类

 public class thread extends Thread { 
     public void run() { 
      SetFriendString(); 
      //SetMyRequestString(); 
      //SetMyFriendRequestString(); 
      pDialog.dismiss(); 
      } 
     } 

现在我调用这个类在我的OnCreate

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.my_friends); 
    mContext = this; 
    pDialog = new ProgressDialog(this); 
    pDialog.setMessage("Loading All Merchants..."); 
    pDialog.setIndeterminate(false); 
    pDialog.setCancelable(false); 
    pDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER); 
     pDialog.show(); 
    //Set All Required data 
    thread t = new thread(); 
    t.start(); 

现在我的应用程序的力量关闭。使用调试器,我发现该线程跳过我的方法。这是为什么?

10-29 11:13:29.411: E/AndroidRuntime(2463): FATAL EXCEPTION: main 
10-29 11:13:29.411: E/AndroidRuntime(2463): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.fb.connect/com.fb.connect.MyFriendsAdd}: java.lang.NullPointerException 
10-29 11:13:29.411: E/AndroidRuntime(2463):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1647) 
10-29 11:13:29.411: E/AndroidRuntime(2463):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1663) 
10-29 11:13:29.411: E/AndroidRuntime(2463):  at android.app.ActivityThread.access$1500(ActivityThread.java:117) 
10-29 11:13:29.411: E/AndroidRuntime(2463):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:931) 
10-29 11:13:29.411: E/AndroidRuntime(2463):  at android.os.Handler.dispatchMessage(Handler.java:99) 
10-29 11:13:29.411: E/AndroidRuntime(2463):  at android.os.Looper.loop(Looper.java:130) 
10-29 11:13:29.411: E/AndroidRuntime(2463):  at android.app.ActivityThread.main(ActivityThread.java:3683) 
10-29 11:13:29.411: E/AndroidRuntime(2463):  at java.lang.reflect.Method.invokeNative(Native Method) 
10-29 11:13:29.411: E/AndroidRuntime(2463):  at java.lang.reflect.Method.invoke(Method.java:507) 
10-29 11:13:29.411: E/AndroidRuntime(2463):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839) 
10-29 11:13:29.411: E/AndroidRuntime(2463):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597) 
10-29 11:13:29.411: E/AndroidRuntime(2463):  at dalvik.system.NativeStart.main(Native Method) 
10-29 11:13:29.411: E/AndroidRuntime(2463): Caused by: java.lang.NullPointerException 
10-29 11:13:29.411: E/AndroidRuntime(2463):  at com.fb.connect.MyFriendsAdd.SetAllFacebookFriends(MyFriendsAdd.java:193) 
10-29 11:13:29.411: E/AndroidRuntime(2463):  at com.fb.connect.MyFriendsAdd.onCreate(MyFriendsAdd.java:145) 
10-29 11:13:29.411: E/AndroidRuntime(2463):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) 
10-29 11:13:29.411: E/AndroidRuntime(2463):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1611) 
10-29 11:13:29.411: E/AndroidRuntime(2463):  ... 11 more 
+0

你可以在MyFriendsAdd类中分享你的'SetAllFacebookFriends'方法代码吗? –

回答

1

问题我在这里看到:

  1. onCreate()尚未完成,当你是显示一个对话框。
  2. 在进度条上从UI线程以外的线程调用dismiss()
  3. 更新Button从一个方法,您运行在UI线程以外的线程。

尝试使用HandlerAsyncTask为此。

NPE位于MyFriendsAdd.SetAllFacebookFriends,因此您可以发布该代码以准确查明特定原因。

+0

谢谢你的建议是正确的。我重新创建我的代码,但仍然使用线程。现在一切正常,现在 – Androyds

+0

非常感谢先生 – Androyds