2012-01-11 1 views
1

스레드에서 문자열이 NULL인지 확인하고 null 인 경우 처리기가 새 액티비티를 시작하는 Runnable을 시작합니다.Runnable을 통한 새로운 액티비티의 시작

모든 것이 정상적으로 작동하지만 새로운 활동이 표시되면 호출 활동으로 다시 전환되고 충돌합니다.

다음은 코드 단편입니다. 당신이하려는 경우

if(username==null) 
{ 
    dialogs.dismiss(); 
    handlers.post(new MyRunable()); 
} 

와의 Runnable 여기

public class MyRunable implements Runnable 
{ 
    public void run(){ 

    Toast.makeText(ListActivity.this, "Your Connection is too slow",Toast.LENGTH_LONG).show(); 

    startActivity(new Intent(ListActivity.this,Anim.class)); 

    } 
} 

입니다 내 전체 소스

package com.cram; 

    import java.io.File; 
    import java.io.IOException; 

    import javax.xml.parsers.ParserConfigurationException; 

    import org.xml.sax.SAXException; 
    import android.app.Activity; 
    import android.app.AlertDialog; 
    import android.app.ProgressDialog; 
    import android.content.Context; 
    import android.content.DialogInterface; 
    import android.content.DialogInterface.OnClickListener; 
    import android.content.Intent; 
    import android.database.Cursor; 
    import android.graphics.Typeface; 
    import android.net.ConnectivityManager; 
    import android.net.NetworkInfo; 
    import android.os.Bundle; 
    import android.os.Handler; 
    import android.util.Log; 
    import android.widget.ListView; 
    import android.widget.TextView; 
    import android.widget.Toast; 

    public class BuddyListActivity extends Activity 
    { 

     String ss; 
     private static ProgressDialog dialogs,dialog; 
     private Thread downloadThreads; 
     boolean results=false; 
     Context ctx; 
     String[]ddd; 
     ListView lv1; 
     String [] icons; 
     BuddyDbAdapter adapter; 
     NetworkInfo netinfo; 
     Cursor cursor; 
     String values; 
     GetBuddy gb; 
     BuddyDB db; 
     String[] username; 
     String[] firstname; 
     String[] lastname; 
     String[] avatar; 
     String[] id; 
     File[] iconss; 
     Handler handlers; 
     boolean ready=false; 


     @Override 
     public void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      setContentView(R.layout.buddy); 
      db=new BuddyDB(BuddyListActivity.this); 
      Typeface font = Typeface.createFromAsset(getAssets(),"fonts/Fortheloveofhate.ttf"); 
    TextView btxt = (TextView) findViewById(R.id.textbuddy); 
    btxt.setTypeface(font); 
    ctx=getApplicationContext();  
    lv1=(ListView)findViewById(R.id.list22); 
    netinfo=null; 
    adapter=new BuddyDbAdapter(BuddyListActivity.this); 
    netinfo=checkDataConnection(getApplicationContext()); 
    handlers = new Handler(); 
    adapter.open(); 

    if(netinfo!=null) 
    { 
     downloadThreads = (Thread) getLastNonConfigurationInstance(); 
     if (downloadThreads != null && downloadThreads.isAlive()) { 
     dialog = ProgressDialog.show(this, "Download", "downloading"); 
     } 

     startdownload(); 

    } 




    if(netinfo==null) 
    { 

     cursor=adapter.showBuddy();   
     if (cursor==null||cursor.moveToFirst()==false) 
     { 
      AlertDialog.Builder buddybox = new AlertDialog.Builder(this); 
       buddybox.setMessage("You have No Buddies Yet douche!!"); 
    buddybox.setNeutralButton("Okay", new OnClickListener() { 
        public void onClick(DialogInterface dialog, int which) { 

         startActivity(new Intent(getBaseContext(),Anim.class)); 
        } 
       }); 
       buddybox.setCancelable(false); 
      buddybox.show(); 
    } 
     else 
      { 
      cursor.moveToFirst(); 
      int j=0; 
      ddd=new String[cursor.getCount()]; 
      icons=new String [cursor.getCount()]; 
       do 
       { 
      String firstName = cursor.getString(cursor.getColumnIndex(BuddyDbAdapter.BUDDY_FISTNAME)); 
      String lastname = cursor.getString(cursor.getColumnIndex(BuddyDbAdapter.BUDDY_LASTNAME)); 
      String Avatar = cursor.getString(cursor.getColumnIndex(BuddyDbAdapter.AVATAR)); 
      ddd[j]=firstName+" "+lastname; 
    Log.d("Test", ddd[j]); 
    icons[j]=Avatar; 
    Log.d("Test", icons[j]); 
    j++; 
     }while(cursor.moveToNext()); 


     iconss= new File[icons.length]; 
     Log.d("Test",icons.length+""); 
    for (int q = 0; q < icons.length; q++) { 
     iconss[q] = new File(Download.ROOT +"/"+ icons[q]+".jpg"); 
    Log.d("Test", iconss[q].getAbsolutePath().toString()); 
    } 
    //adapter.close(); 
        lv1.setAdapter(new BuddyAdapter(BuddyListActivity.this,R.layout.list1,ddd,iconss)); 
        onDestroy(); 
       } 



      } 
     } 

    private void box() { 
     // TODO Auto-generated method stub 

    cursor=adapter.showBuddy(); 
    if (cursor==null||cursor.moveToFirst()==false) 
    { 
     dialogs.dismiss(); 
     AlertDialog.Builder buddybox = new AlertDialog.Builder(this); 
      buddybox.setMessage("You have No Buddies Yet ass!!"); 
    buddybox.setNeutralButton("Okay", new OnClickListener() { 
         public void onClick(DialogInterface dialog, int which) { 

          startActivity(new Intent(getBaseContext(),Anim.class)); 
         } 
        }); 
        buddybox.setCancelable(false); 
       buddybox.show(); 

     } 

     } 

     private NetworkInfo checkDataConnection(Context applicationContext) { 
     final ConnectivityManager connMgr = (ConnectivityManager)BuddyListActivity.this.getSystemService(Context.CONNECTIVITY_SERVICE); 
     NetworkInfo networkinfo=null; 
     final android.net.NetworkInfo wifi =connMgr.getNetworkInfo(ConnectivityManager.TYPE_WIFI); 
     final android.net.NetworkInfo mobile =connMgr.getNetworkInfo(ConnectivityManager.TYPE_MOBILE); 
     if(wifi.isConnected()||mobile.isConnected()) 
     {networkinfo=connMgr.getActiveNetworkInfo(); 
     return networkinfo; 
     } 

     else 
     { 
      return null; 
     } 

    } 
     @Override 
     protected void onDestroy() { 
      super.onDestroy(); 
      if (adapter != null) { 
       adapter.close(); 
      } 

     } 

     @Override 
     protected void onStop() 
     { 
      super.onStop(); 
      finish(); 

     } 
     private void startdownload() { 
      dialogs = ProgressDialog.show(BuddyListActivity.this, "Contacting Our Servers", "Geting Your Buddies Avatar"); 
     downloadThreads = new MyThread(); 
     downloadThreads.start(); 

    } 

    public class MyThread extends Thread { 

     @Override 
     public void run() { 
      try { 

       new Thread(); 
       GetBuddy tt=new GetBuddy(); 
       String xml=tt.get(); 
       if(xml==null) 
       { dialogs.dismiss(); 
        handlers.post(new MyRunable()); 
        ready=false; 
        //downloadThreads.suspend(); 

    } 
    final Download cd = new Download(); 
    results = cd.downloadBitmap(); 
    if(results) 
    { 
    BuddyParse bp=new BuddyParse(); 

    try { 

     username=bp.show(xml); 
    //     if(username==null) 
    //     { dialogs.dismiss(); 
    //      handlers.post(new MyRunable()); 
    //      //downloadThreads.suspend(); 
    //     } 
     firstname=bp.firstname(); 
     lastname=bp.lastname(); 
     avatar=bp.avatar(); 
     id=bp.id(); 
     adapter.deleteAll(); 
     ready=true; 
    } 
    catch (ParserConfigurationException e) 
    { 
     e.printStackTrace(); 
    } 
    catch (SAXException e) 
    { 
     e.printStackTrace(); 
    } 
    catch (IOException e) 
    { 
     e.printStackTrace(); 
    } 
    // Log.d("len", username.length+""); 

    for(int k=0; k<username.length;k++) 
    { 
    adapter.insertBuddy(id[k], username[k], firstname[k], lastname[k], avatar[k]); 
    Log.d("Test", id[k]+username[k]+firstname[k]+lastname[k]+avatar[k]+""); 
    } 
    box(); 
    cursor=adapter.showBuddy(); 
    cursor.moveToFirst(); 
    int i=0; 
    ddd=new String[cursor.getCount()]; 
    icons=new String [cursor.getCount()]; 
     do 
     { 
    String firstName = cursor.getString(cursor.getColumnIndex(BuddyDbAdapter.BUDDY_FISTNAME)); 
    String lastname = cursor.getString(cursor.getColumnIndex(BuddyDbAdapter.BUDDY_LASTNAME)); 
    String Avatar = cursor.getString(cursor.getColumnIndex(BuddyDbAdapter.AVATAR)); 
    ddd[i]=firstName+" "+lastname; 
    Log.d("Test", ddd[i]); 
    icons[i]=Avatar; 
    Log.d("Test",icons[i]); 
    i++; 
     }while(cursor.moveToNext()); 


    iconss= new File[avatar.length]; 
    for (int k = 0; k < avatar.length; k++) { 
     iconss[k] = new File(Download.ROOT+"/"+avatar[k]+".jpg"); 

    Log.d("Test", iconss[k].getAbsolutePath()+"thread"); 
    //Log.d("Test", ddd[k]); 
      } 

     if (results&&ready) 
      { 
      dialogs.dismiss(); 
      handlers.post(new MyRuns()); 

      } 
    } 
    //    else 
    //    { dialogs.dismiss(); 
    //     handlers.post(new MyRunable()); 
    //     
    //    } 
      }finally { 

      } 

     } 


    } 

    public class MyRuns implements Runnable { 
     public void run() { 
      ready=true; 
      lv1.setAdapter(new BuddyAdapter(ctx,R.layout.list1,ddd,iconss)); 
      onDestroy(); 
     } 
    } 
    public class MyRunable implements Runnable { 
     public void run() { 
      //Toast.makeText(BuddyListActivity.this, "Your Connection is too slow", Toast.LENGTH_LONG).show(); 
       startActivity(new Intent(BuddyListActivity.this,Anim.class)); 


      } 
     } 
    } 
+0

logcat 오류 .... –

+0

두 번째 활동의 onStart() 및 onCreate() 메소드를 여기에 넣을 수 있습니까? 어쩌면 문제가 있습니다 –

+0

오류가 있습니까? –

답변

1

try catch 블록에 RETURN을 설정하고 모든 활동을 위해 안드로이드 매니페스트에 android:noHistory="true" 설정은 실행 가능한에서 다른 활동을 시작할 때

1

스레드가 runOnUiThread (Runnable를 행동)

0

을 확인 시작 메인 스레드를 사용하는 것입니다 다른 스레드에서 비동기 작업을 만들려면 다음 클래스를 사용하는 것이 좋습니다.

private final class MyRunnable extends 
      AsyncTask<Void, Void, Document> { 
     protected Document doInBackground(Void... params) { 

     } 

     protected void onPostExecute(Document result) { 

     } 
    } 

매개 변수 만 변경하면됩니다. 여기

상세 정보 : http://developer.android.com/reference/android/os/AsyncTask.html

0

현재 활동을 마무리 내 문제 해결.