2012-10-29 25 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