我是Android初学者。我正在努力将我的PDF文件从Firebase加载到PDFView中,我设法实现了它。但现在的问题是,当从防火墙加载PDF文件时,屏幕一开始是白色的,我想这会让用户认为它不会加载应用程序。我想要一个Progressbar显示文件正在加载,如果没有网连接,则一个简单的对话框应该显示。谢谢。
new RetrievePDFStream().execute("My PDF link here",null,null);
public class RetrievePDFStream extends AsyncTask<String,Void,InputStream>{
@Override
protected InputStream doInBackground(String... strings) {
InputStream inputStream = null;
try
{
URL url = new URL(strings[0]);
HttpURLConnection urlConnection = (HttpURLConnection)url.openConnection();
if (urlConnection.getResponseCode() == 200)
{
inputStream = new BufferedInputStream(urlConnection.getInputStream());
}
}
catch (IOException e)
{
return null;
}
return inputStream;
}
class MyTask extends AsyncTask<Integer, Integer, String> {
@Override
protected String doInBackground(Integer... params) {
for (; count <= params[0]; count++) {
try {
Thread.sleep(1000);
publishProgress(count);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
return "Task Completed.";
}
}
@Override
protected void onPostExecute(InputStream inputStream) {
progressBar.setVisibility(View.GONE);
pdfView.fromStream(inputStream).load();
}
}
发布于 2018-08-02 08:15:24
通过你发布的代码,我看到你已经知道如何覆盖doInBackground
和onPostExecute
。
还有3种其他方法可以重写:onPreExecute
,onCancelled
和onProgressUpdate
。
这是文档的链接:https://developer.android.com/reference/android/os/AsyncTask
发布于 2018-08-02 09:56:16
public class RetrievePDFStream extends AsyncTask<String,Integer,String>{
public interface MyCallback{
void showProgress();
void hideProgress();
void updateProgress(int progress);
void loadFromStream(InputStream in);
void loadFromString(String text);
}
private MyCallback callback;
public RetrievePDFStream(MyCallback callback){
this.callback = callback;
}
/**
* Runs on the UI thread before {@link #doInBackground}.
*/
@Override
protected void onPreExecute() {
callback.showProgress();
}
@Override
protected String doInBackground(String... strings) {
// TODO implement you Stream logic here
// Try to read from InputStream on background and return String to onPostExecute method
BufferedReader r = new BufferedReader(new
InputStreamReader(inputStream));
StringBuilder total = new StringBuilder();
String line;
while ((line = r.readLine()) != null) {
total.append(line).append('\n');
}
return total;
}
/**
* Runs on the UI thread after {@link #publishProgress} is invoked.
* The specified values are the values passed to {@link #publishProgress}.
*
* @param values The values indicating progress.
*/
@Override
protected void onProgressUpdate(Integer... values) {
super.onProgressUpdate(values);
callback.updateProgress(values[0]);
}
// Runs on the UI thread after {@link #doInBackground}.
@Override
protected void onPostExecute(String myString) {
callback.hideProgress();
// callback.loadFromStream(inputStream);
callback.loadFromString(myString);
// pdfView.fromStream(inputStream).load();
}
}
MyActivity
public class MyActivity extends Activity implements MyCallback{
// ....
// Other Activity stuff
@Override
public void showProgress(){
progressBar.setVisibility(View.VISIBLE);
}
@Override
public void hideProgress(){
progressBar.setVisibility(View.GONE);
}
@Override
public void updateProgress(int progress){
// Do Stuff
}
@Override
public void loadFromStream(InputStream in){
// Do Stuff
}
@Override
public void loadFromString(String text){
// Do Stuff
}
}
https://stackoverflow.com/questions/-100001848
复制相似问题