2011-10-31 5 views
1

다음 코드를 따르십시오. 왜 데이터를로드하지 않는지 알 수 없습니다. 아래 액티비티가 스플래시 활동 후 시작되었습니다 & 여기 서버에서 데이터를 다운로드하려고합니다 & 구문 분석기를 & 회 전자에 첨부하려고 시도하지만 애플리케이션이 행 1에없는 요소를 말하도록 강제로 닫히므로 작동하지 않는 이유가 없습니다. ..안드로이드에서 구문 분석 asyn-task에 오류가 발생했습니다.

편집 : --- 위의 코드는 아니지만 필요 안드로이드 2.2 최소 SDK 버전에 안드로이드 2.3 &에 노력이 8 (안드로이드 2.2)

public class Registration extends Activity{ 

private List<RegisterMessage> regis_msg; 
private List<CountryMessage> country_msg; 
ArrayList<String> countryName,countryCode,isoCode,countryFlag; 
EditText fname,sname,email,mobileno; 
Spinner country; 
AppPreferences ap; 
Button btnregister; 
/** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.registration); 

    country = (Spinner)findViewById(R.id.country); 
    fname = (EditText)findViewById(R.id.fname); 
    sname = (EditText)findViewById(R.id.sname); 
    email = (EditText)findViewById(R.id.email); 
    mobileno = (EditText)findViewById(R.id.mobileno); 

    ap = new AppPreferences(getApplicationContext()); 

// mobileno.setText(ap.getPreferences("MobileNo")); 

    btnregister = (Button)findViewById(R.id.btnregister); 

    btnregister.setOnClickListener(new OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       if(fname.getText().toString().equals("")){ 
        Toast.makeText(getApplicationContext(), "Please Enter Firstname.", Toast.LENGTH_SHORT).show(); 
        fname.setFocusable(true); 
        fname.requestFocus(); 
       }else if (sname.getText().toString().equals("")){ 
        Toast.makeText(getApplicationContext(), "Please Enter Surname.", Toast.LENGTH_SHORT).show(); 
        sname.setFocusable(true); 
        sname.requestFocus(); 
       }else if (email.getText().toString().equals("")){ 
        Toast.makeText(getApplicationContext(), "Please Enter Email address.", Toast.LENGTH_SHORT).show(); 
        email.setFocusable(true); 
        email.requestFocus(); 
       }else if (mobileno.getText().toString().equals("")){ 
        Toast.makeText(getApplicationContext(), "Please Enter Mobile No.", Toast.LENGTH_SHORT).show(); 
        email.setFocusable(true); 
        email.requestFocus(); 
       }else{ 
        new RegistrationTry().execute(); 
       } 
      } 
     }); 

    if(!isOnline()) { 
     Log.v("isOnline",isOnline()+""); 
     Toast.makeText(getApplicationContext(), "You device is not connected to the internet.",Toast.LENGTH_LONG).show(); 
    }else{ 
     new CountryData().execute(); 
    } 

} 

public boolean isOnline(){ 
    ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); 
    NetworkInfo netInfo = cm.getActiveNetworkInfo(); 
    boolean isconnected; 
    if (netInfo==null || !netInfo.isConnected()) 
    isconnected=false; 
    else 
    isconnected=true; 
    Log.v("isOnliNe",isconnected+""); 
    return isconnected; 
} 

class CountryData extends AsyncTask<Object, Object, Object> { 
    // private CustomizeDialog Dialog = new CustomizeDialog(Registration.this); 
    private ProgressDialog Dialog = new ProgressDialog(Registration.this); 
    @Override 
    protected void onPreExecute() { 
     Dialog.setMessage("Loading please wait........"); 
     Dialog.show(); 
    } 

    protected Void doInBackground(Object...params) { 
     try{ 
      String url= newsReaderUrls.BASE_URL + newsReaderUrls.COUNTRY_URL; 
      Log.v("URL",url); 
      BaseFeedParser parser = new BaseFeedParser(url); 
      country_msg = parser.CountryParse(); 
      countryName = new ArrayList<String>(); 
      countryCode = new ArrayList<String>(); 
      isoCode = new ArrayList<String>(); 
      countryFlag = new ArrayList<String>(); 
      countryName.add(0, "Select"); 
      for (CountryMessage msg : country_msg){ 
       countryName.add(msg.getCountryName()); 
       countryCode.add(msg.getCountryCode()); 
       isoCode.add(msg.getIsoCode()); 
       countryFlag.add(msg.getCountryFlag()); 
      } 
     } catch (Throwable t){ 
      Log.e("AndroidNews",t.getMessage(),t); 
     } 
     return null; 
    } 

    protected void onProgressUpdate(Object... values){ 
     // TODO Auto-generated method stub 
     super.onProgressUpdate(values); 
    } 

    @Override 
    protected void onPostExecute(Object result) { 
     if(Dialog.isShowing()){ 
      Dialog.dismiss(); 
     } 
     String[] array_spinner = countryName.toArray(new String[countryName.size()]); 
     ArrayAdapter<String> adapter = new ArrayAdapter<String> (getApplicationContext(),android.R.layout.simple_spinner_item,array_spinner); 
     adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
     country.setAdapter(adapter); 
     String cn = ap.getPreferences("CountryIso"); 
     if(!cn.equals("")){ 
      int index = isoCode.indexOf(cn); 
      country.setSelection(index+1); 
     }else if(countryName.indexOf("Nigeria") != -1){ 
      country.setSelection(countryName.indexOf("Nigeria")+1); 
     } 
    } 
} 

class RegistrationTry extends AsyncTask<Void, Void, Void> { 
    // private CustomizeDialog Dialog = new CustomizeDialog(Registration.this); 
    private ProgressDialog Dialog = new ProgressDialog(Registration.this); 
    int foreward; 
    @Override 
    protected void onPreExecute() { 
     Dialog.setMessage("Loading please wait........"); 
     Dialog.show(); 
    } 

    protected void onProgressUpdate(Void... unused) { 
    } 


    protected Void doInBackground(Void...params) { 
     try{ 
      String defaultC_code="ng"; 
      /*if(countryName.size()<0){ 
       defaultC_code = "ng"; 
      }else{ 
       int index = country.getSelectedItemPosition(); 
       defaultC_code = isoCode.get(index-1); 
      }*/ 
      ap.savePreferences("MobileNo", mobileno.getText().toString()); 
      String url= newsReaderUrls.BASE_URL + newsReaderUrls.REGISTER_URL + "Mobile="+ mobileno.getText().toString()+ 
         "&First_Name="+fname.getText().toString()+"&Last_Name="+sname.getText().toString()+ 
         "&Email="+email.getText().toString()+"&Device_Type=Phone&Device_Platform=Android"+ 
         "&ISO_Code=" + defaultC_code; 
      Log.v("Login", url); 
      BaseFeedParser parser = new BaseFeedParser(url); 
      regis_msg = parser.RegisterParse(); 

      for (RegisterMessage msg : regis_msg){ 
       Log.v("Status", msg.getStatus()); 
       foreward = Integer.parseInt(msg.getStatus()); 
      } 

     } catch (Throwable t){ 
      Log.e("AndroidNews",t.getMessage(),t); 
     } 
     return null; 
    } 

    @Override 
    protected void onPostExecute(Void result) { 
     if(foreward == 2 || foreward == 3){ 
      ap.savePreferences("Registered", "yes"); 
      Intent i = new Intent(Registration.this,DashBoard.class); 
      startActivity(i); 
      finish(); 
     }else{ 
      Toast.makeText(getBaseContext(), "Registration failed please try later.", Toast.LENGTH_SHORT).show(); 
     } 
     if(Dialog.isShowing()){ 
      Dialog.dismiss(); 
     } 
    } 
} 

}

로그 캣

10-31 16:13:41.022: ERROR/AndroidNews(599): org.apache.harmony.xml.ExpatParser$ParseException: At line 1, column 0: no element found 
10-31 16:13:41.022: ERROR/AndroidNews(599): java.lang.RuntimeException: org.apache.harmony.xml.ExpatParser$ParseException: At line 1, column 0: no element found 
10-31 16:13:41.022: ERROR/AndroidNews(599):  at com.websoft.android.parser.BaseFeedParser.CountryParse(BaseFeedParser.java:189) 
10-31 16:13:41.022: ERROR/AndroidNews(599):  at com.websoft.android.newsreel.Registration$CountryData.doInBackground(Registration.java:117) 
10-31 16:13:41.022: ERROR/AndroidNews(599):  at com.websoft.android.newsreel.Registration$CountryData.doInBackground(Registration.java:1) 
10-31 16:13:41.022: ERROR/AndroidNews(599):  at android.os.AsyncTask$2.call(AsyncTask.java:185) 
10-31 16:13:41.022: ERROR/AndroidNews(599):  at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305) 
10-31 16:13:41.022: ERROR/AndroidNews(599):  at java.util.concurrent.FutureTask.run(FutureTask.java:137) 
10-31 16:13:41.022: ERROR/AndroidNews(599):  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1068) 
10-31 16:13:41.022: ERROR/AndroidNews(599):  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:561) 
10-31 16:13:41.022: ERROR/AndroidNews(599):  at java.lang.Thread.run(Thread.java:1096) 
10-31 16:13:41.022: ERROR/AndroidNews(599): Caused by: org.apache.harmony.xml.ExpatParser$ParseException: At line 1, column 0: no element found 
10-31 16:13:41.022: ERROR/AndroidNews(599):  at org.apache.harmony.xml.ExpatParser.finish(ExpatParser.java:553) 
10-31 16:13:41.022: ERROR/AndroidNews(599):  at org.apache.harmony.xml.ExpatParser.parseDocument(ExpatParser.java:483) 
10-31 16:13:41.022: ERROR/AndroidNews(599):  at org.apache.harmony.xml.ExpatReader.parse(ExpatReader.java:320) 
10-31 16:13:41.022: ERROR/AndroidNews(599):  at org.apache.harmony.xml.ExpatReader.parse(ExpatReader.java:277) 
10-31 16:13:41.022: ERROR/AndroidNews(599):  at android.util.Xml.parse(Xml.java:87) 
10-31 16:13:41.022: ERROR/AndroidNews(599):  at com.websoft.android.parser.BaseFeedParser.CountryParse(BaseFeedParser.java:187) 
10-31 16:13:41.022: ERROR/AndroidNews(599):  ... 8 more 
10-31 16:13:41.022: DEBUG/AndroidRuntime(599): Shutting down VM 
10-31 16:13:41.042: WARN/dalvikvm(599): threadid=1: thread exiting with uncaught exception (group=0x4001d800) 
10-31 16:13:41.042: ERROR/AndroidRuntime(599): FATAL EXCEPTION: main 
10-31 16:13:41.042: ERROR/AndroidRuntime(599): java.lang.NullPointerException 
10-31 16:13:41.042: ERROR/AndroidRuntime(599):  at com.websoft.android.newsreel.Registration$CountryData.onPostExecute(Registration.java:140) 
10-31 16:13:41.042: ERROR/AndroidRuntime(599):  at android.os.AsyncTask.finish(AsyncTask.java:417) 
10-31 16:13:41.042: ERROR/AndroidRuntime(599):  at android.os.AsyncTask.access$300(AsyncTask.java:127) 
10-31 16:13:41.042: ERROR/AndroidRuntime(599):  at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:429) 
10-31 16:13:41.042: ERROR/AndroidRuntime(599):  at android.os.Handler.dispatchMessage(Handler.java:99) 
10-31 16:13:41.042: ERROR/AndroidRuntime(599):  at android.os.Looper.loop(Looper.java:123) 
10-31 16:13:41.042: ERROR/AndroidRuntime(599):  at android.app.ActivityThread.main(ActivityThread.java:4627) 
10-31 16:13:41.042: ERROR/AndroidRuntime(599):  at java.lang.reflect.Method.invokeNative(Native Method) 
10-31 16:13:41.042: ERROR/AndroidRuntime(599):  at java.lang.reflect.Method.invoke(Method.java:521) 
10-31 16:13:41.042: ERROR/AndroidRuntime(599):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868) 
10-31 16:13:41.042: ERROR/AndroidRuntime(599):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626) 
10-31 16:13:41.042: ERROR/AndroidRuntime(599):  at dalvik.system.NativeStart.main(Native Method) 
+0

코드가 잘 보이지만 오류에 대해서는 아무 말도하지 않지만 logcat 출력을 게시하는 것이 좋습니다. –

+0

ParseException입니다. 서버 (XML 오른쪽)에서 반환 한 파일이 올바른 형식인지 확인하고 있습니까? – moujib

+0

네, 다른 모든 URL이 정상적으로 작동하고 있지만이 링크는 오류가 있습니다. 코드를 다시 확인하고 다시 입력 할 필요가 없습니다. –

답변

1

country_msg = parser.CountryParse(); 수행 할 때 ExpatParser$ParseException의 구문 분석 예외가있었습니다. 라인 (1), 칼럼 0에서

는 없음 요소는이 파일이 비어 수단

발견.

따라서 countryName , countryCode , isoCodenull이므로 postExecute()의 NPE는 CountryData입니다. 브라우저에 넣어이 문자열 newsReaderUrls.BASE_URL + newsReaderUrls.COUNTRY_URL가 유효한 URL 및 적절한 XML

+0

브라우저에서 올바른 결과를 얻을 수 있는지 확인했습니다. –

0

을 반환하는 경우

은 참조 URL이 장치에서 액세스 할 수없는 것을 혹시 내부 네트워크에있을 수 있을까요? 또한 결과를 XML 파서/유효성 검사기에 넣었습니까?

+0

- 답장을 보내 주셔서 감사합니다. Android 2.2 및 이전 버전에서 동일한 코드가 작동하지만 Android 2.2 및 이전 버전에서는 동일한 코드가 작동하지 않습니다. 안드로이드 2.2에 몇 가지 버그가 있다고 말해주는 이유가있을 수 있지만 확실하지 않습니다. –

관련 문제