2012-01-11 75 views
1

我檢查線程中的字符串是否爲NULL,如果它爲null,Handler啓動一個Runnable啓動一個新的Activity。通過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錯誤.... – 2012-01-11 12:01:19

+0

你可以把onStart()和onCreate()方法放在第二個activity嗎?也許問題是 – 2012-01-11 12:03:55

+0

你有沒有遇到任何錯誤? – 2012-01-11 12:12:00

回答

1

設置RETURNtry catch塊和Android清單中的所有活動設置 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

從開始運行的另一個活動時,完成您的當前活動。