2012-10-29 3 views
0

먼저 내 질문을 명확히하겠습니다.파싱하는 동안 스레딩

저는 이것을 (DOM을 사용하여) 데이터를 파싱하고 내 listview에 바인딩합니다. 반응이 오래 걸린다는 것을 알게 될 때까지 모든 것이 잘 작동합니다. 그것을 성취하기 위해, 나는 그것을 실 속에 넣어야한다는 생각을했습니다. 그래서 필자는 스레드를 확장하는 클래스를 추가했습니다.

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 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(); 

내에서 OnCreate

에 내 응용 프로그램의 힘을이 클래스
 public class thread extends Thread { 
     public void run() { 
      SetFriendString(); 
      //SetMyRequestString(); 
      //SetMyFriendRequestString(); 
      pDialog.dismiss(); 
      } 
     } 

지금은이 클래스를 호출하고 추가. 디버거를 사용하여 스레드가 내 메서드를 건너 뛴다는 것을 알게되었습니다. 왜 그런가요?

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

'SetAllFacebookFriends' 메소드 코드를'MyFriendsAdd' 클래스에 공유 할 수 있습니까? –

답변

1

문제는 여기 참조 : 당신이 대화 상자를 표시 할 때

  1. onCreate()

    은 아직 끝나지 않았습니다.
  2. 진행률 표시 줄에 UI 스레드가 아닌 스레드에서 dismiss()을 호출합니다.
  3. 메서드에서 Button을 업데이트하면 UI 스레드 이외의 스레드에서 실행됩니다.

Handler 또는 AsyncTask을 사용해보세요.

NPE는 MyFriendsAdd.SetAllFacebookFriends입니다. 특정 원인을 정확히 찾아 내기 위해 해당 코드를 게시 할 수 있습니다.

+0

의견을 보내 주시면 감사하겠습니다. 필자의 코드를 다시 작성하지만 여전히 스레드를 사용 중이다. 그리고 이제 모든 것이 잘 작동합니다. – Androyds

+0

고맙습니다. – Androyds

관련 문제