2015-01-12 212 views
-4

我試圖從下面的代碼一切都關閉工作正常應用程序崩潰時的AsyncTask沒有互聯網連接

有來自地方上的按鈕,點擊此活動應主要活動開放 它會做解析部分,然後進入下一個清單activity.in情況下,有一個背襯或本次活動被關閉的AsyncTask應停止使用

loader.cancel(true); 

這將禾RK完美的,如果網絡不可用,並進行測試時,不要有互聯網連接

警告框節目和它關係到的第一個活動,然後崩潰

我想警告框來顯示和應用問題的發生應該不會崩潰,回到第一 - > mainactivity

我已審閱本 http://techiedreams.com/android-simple-rss-reader/

How to end AsyncTask onBackPress()

import android.app.Activity; 
import android.app.AlertDialog; 
import android.content.Context; 
import android.content.DialogInterface; 
import android.content.Intent; 
import android.net.ConnectivityManager; 
import android.os.AsyncTask; 
import android.os.Bundle; 

import com.parser.DOMParser; 
import com.parser.RSSFeed; 

public class SplashActivity extends Activity { 



    //private String RSSFEEDURL = "http://www.mobilenations.com/rss/mb.xml"; 
    RSSFeed feed; 
    private AsyncLoadXMLFeed loader; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     setContentView(R.layout.splash); 

     Intent i = getIntent(); 
     int position = i.getExtras().getInt("position"); 
     String[] country = i.getStringArrayExtra("country"); 

     //Toast.makeText(getApplicationContext(), country[position], Toast.LENGTH_SHORT).show(); 
     //Toast.makeText(getApplicationContext(), country[position], Toast.LENGTH_SHORT).show(); 
     String name = i.getStringExtra("name"); 
     //Toast.makeText(getApplicationContext(), name, Toast.LENGTH_SHORT).show(); 

     ConnectivityManager conMgr = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); 
     if (conMgr.getActiveNetworkInfo() == null) { 


      AlertDialog.Builder builder = new AlertDialog.Builder(this); 
      builder.setMessage(
        "Unable to reach server, \nPlease check your connectivity.") 
        .setTitle("TD RSS Reader") 
        .setCancelable(false) 
        .setPositiveButton("Exit", 
          new DialogInterface.OnClickListener() { 
         @Override 
         public void onClick(DialogInterface dialog, 
           int id) { 
          //loader.cancel(true); 
          finish(); 
         } 
        }); 


      AlertDialog alert = builder.create(); 

      alert.show(); 

     } else { 
      // Connected - Start parsing 

      loader = new AsyncLoadXMLFeed(); 
      loader.execute(); 
      //new AsyncLoadXMLFeed().execute(); 

     } 

    } 


    private class AsyncLoadXMLFeed extends AsyncTask<Void, Void, Void>{ 

     @Override 
     protected Void doInBackground(Void... params) { 

      // Obtain feed 
      DOMParser myParser = new DOMParser(); 
      Intent i = getIntent(); 
      int position = i.getExtras().getInt("position"); 
      String[] country = i.getStringArrayExtra("country"); 
      String name = i.getStringExtra("name"); 
      //feed = myParser.parseXml(RSSFEEDURL); 
      feed = myParser.parseXml("http://"+name+".blogspot.com//feeds/posts/default/-/" + country[position] + "?alt=rss"); 

      return null; 

     } 

     @Override 
     protected void onPostExecute(Void result) { 
      super.onPostExecute(result); 

      Bundle bundle = new Bundle(); 
      bundle.putSerializable("feed", feed); 

      // launch List activity 
      Intent intent = new Intent(SplashActivity.this, ListActivity.class); 
      intent.putExtras(bundle); 
      startActivity(intent); 

      // kill this activity 
      finish(); 
     } 

    } 

    @Override 
    public void onBackPressed() { 
     finish(); 
    } 

    @Override 
     public void onDestroy(){ 
      super.onDestroy(); 

      // Cancel the task 
      loader.cancel(true); 
     } 
+1

後崩潰日誌與問題 –

+0

有你設置權限許可權? – Opiatefuchs

+0

是的,每件事情都可以正常使用網絡連接 – 1234567

回答

0

我的猜測是崩潰與NullPointerException。

這是因爲如果你沒有網絡連接,你不會創建AsyncLoadXMLFeed實例。 所以當onDestroy()發生時,你打電話loader.cancel(true);它會拋出這個異常。

0

終於做了這個
感謝阿納托爾需要檢查裝載機!= NULL

@Override 
     public void onDestroy(){ 
      super.onDestroy(); 

      // Cancel the task 
      if(loader != null && loader.getStatus() != AsyncTask.Status.FINISHED) { 
       loader.cancel(true); 
      } 

      //loader.cancel(true); 
     } 
相關問題