2012-05-05 13 views
0

私のトーストは表示されず、私はそれを正しく作ったと思うので混乱しています、私は理解しません。 3つのボタンを表示するプログラムが表示されているので、最初にPDFファイルを開くようになっているダウンロードをアクティブにします。もしPDFリーダーがなければ、読者がいないということをポップアップするはずです。他のボタンは新しい画面に戻り、戻るボタンとして動作します。 PDFファイルが存在しない場合、あなたのmanifeastファイルでの活動を宣言しなくていない場合にのみAndroid - なぜ私のトーストメッセージが表示されませんか?

public class myactivity extends Activity { 

public static final int DIALOG_DOWNLOAD_PROGRESS = 0; 
private Button startBtn; 
private ProgressDialog mProgressDialog; 

/** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.myactivity); 
    mProgressDialog = new ProgressDialog(myactivity.this); 
    mProgressDialog.setMessage("Please be patient, file downloading..."); 
    mProgressDialog.setIndeterminate(false); 
    mProgressDialog.setMax(100); 
    mProgressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); 

    Button Section = (Button) findViewById(R.id.Section); 
    Section.setOnClickListener(new View.OnClickListener() { 

     public void onClick(View view) { 
      // TODO Auto-generated method stub 
      Intent Section = new Intent(view.getContext(), 
        Section.class); 
      startActivity(Section); 

     } 
    }); 

    Button Back = (Button) findViewById(R.id.Back); 
    Back.setOnClickListener(new View.OnClickListener() { 

     public void onClick(View v) { 
      // TODO Auto-generated method stub 
      setResult(RESULT_OK); 
      finish(); 
     } 
    }); 

    startBtn = (Button) findViewById(R.id.Search); 
    startBtn.setOnClickListener(new OnClickListener() { 
     public void onClick(View v) { 
      startDownload(); 
     } 
    }); 
} 

private void startDownload() { 
    DownloadFile downloadFile = new DownloadFile(); 
    downloadFile 
      .execute("http://www.website.com/document.pdf"); 

} 

class DownloadFile extends AsyncTask<String, Integer, String> { 

    @Override 
    protected void onPreExecute() { 
     super.onPreExecute(); 
     mProgressDialog.show(); 
    } 

    @Override 
    protected void onProgressUpdate(Integer... progress) { 
     super.onProgressUpdate(progress); 
     mProgressDialog.setProgress(progress[0]); 
    } 

    @Override 
    protected String doInBackground(String... aurl) { 
     try { 

      URL url = new URL(aurl[0]); 
      URLConnection connection = url.openConnection(); 

      connection.connect(); 
      int fileLength = connection.getContentLength(); 
      int tickSize = 2 * fileLength/100; 
      int nextProgress = tickSize; 

      Log.d(

      "ANDRO_ASYNC", "Lenght of file: " + fileLength); 

      InputStream input = new BufferedInputStream(url.openStream()); 

      String path = Environment.getExternalStorageDirectory() 
        + "/Android/Data/" 
        + getApplicationContext().getPackageName() + "/files"; 
      File file = new File(path); 
      file.mkdirs(); 
      File outputFile = new File(file, "test1.pdf"); 

      OutputStream output = new FileOutputStream(outputFile); 

      byte data[] = new byte[1024 * 1024]; 
      long total = 0; 
      int count; 
      while ((count = input.read(data)) != -1) { 
       total += count; 
       if (total >= nextProgress) { 
        nextProgress = (int) ((total/tickSize + 1) * tickSize); 
        this.publishProgress((int) (total * 100/fileLength)); 
       } 
       output.write(data, 0, count); 
      } 

      output.flush(); 
      output.close(); 
      input.close(); 
      showPdf(); 

     } catch (Exception e) { 
     } 
     return null; 
    } 

} 

private void showPdf() { 
    // TODO Auto-generated method stub 
    mProgressDialog.dismiss(); 

    File file = new File(Environment.getExternalStorageDirectory() 
      + "/Android/Data/" + getApplicationContext().getPackageName() 
      + "/files/test1.pdf"); 
    Intent testIntent = new Intent(Intent.ACTION_VIEW); 
    testIntent.setType("application/pdf"); 
    Intent intent = new Intent(); 
    intent.setAction(Intent.ACTION_VIEW); 
    Uri uri = Uri.fromFile(file); 
    intent.setDataAndType(uri, "application/pdf"); 
    try { 
     startActivity(intent); 
    } catch (ActivityNotFoundException e) { 
     Toast.makeText(myactivity .this, 
       "No Application Available to View PDF", Toast.LENGTH_LONG).show(); 
    } 

} 

} 

答えて

1
try { 
     startActivity(intent); 
    } catch (ActivityNotFoundException e) { 
     Toast.makeText(myactivity .this, 
       "No Application Available to View PDF", Toast.LENGTH_LONG).show(); 
    } 

上記のコードショートースト。あなたの要件にはFileNotFoundExceptionを使用する必要があります。

更新:::私がFILENOTFOUNDに変更すると、それだけでファイルを参照してくださいに関係なく、正しいインストールPDFリーダーが存在する場合のトーストが表示されませんので

try{ 
File file = new File(Environment.getExternalStorageDirectory() 
      + "/Android/Data/" + getApplicationContext().getPackageName() 
      + "/files/test1.pdf"); 
    Intent testIntent = new Intent(Intent.ACTION_VIEW); 
    testIntent.setType("application/pdf"); 
    Intent intent = new Intent(); 
    intent.setAction(Intent.ACTION_VIEW); 
    Uri uri = Uri.fromFile(file); 
    intent.setDataAndType(uri, "application/pdf"); 
    try { 
     startActivity(intent); 
    } catch (ActivityNotFoundException e) { 
     Toast.makeText(myactivity .this, 
       "No Application Available to View PDF", Toast.LENGTH_LONG).show(); 
    } 
} catch (FileNotFoundException e) { 
     Toast.makeText(myactivity .this, 
       "No Application Available to View PDF", Toast.LENGTH_LONG).show(); 
    } 
+0

は、私はいつも、そこにファイルを持っている必要がありますか? – user1363871

+0

'ActivityNotFoundException'を 'FileNotFoundException'に置き換えようとすると、「 'FileNotFoundException'の到達不能キャッチブロックです。この例外はtry文の本体からスローされません」「 – user1363871

+0

更新ありがとうございますが、FileNotFoundException eclipse依然としてエラーが発生します。このエラーは「FileNotFoundExceptionのUnreachable catchブロック。この例外はtryステートメント本体からスローされません」というオプションがあります。これはcatch節を削除することですか? – user1363871

関連する問題