我试图在ASyncTask中获取一些数据,一旦完成将数据传递给viewpager中的任何片段.但我得到以下异常:
java.lang.IllegalStateException:尚未绑定ViewPager.
我必须遵循以下代码:
OnCreateView
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
setContentView(R.layout.simple_tabs);
team_id = this.getIntent().getIntExtra("index", 0) + 1;
new getTeam().execute();
}
Run Code Online (Sandbox Code Playgroud)
的AsyncTask:
@Override
protected Void doInBackground(Void... arg0) {
team = api.getTeamByID(team_id);
return null;
}
@Override
protected void onPostExecute(Void result) {
mAdapter = new TeamFragmentAdapter(getSupportFragmentManager());
mPager = (ViewPager)findViewById(R.id.pager);
mPager.setAdapter(mAdapter);
mIndicator = (TabPageIndicator)findViewById(R.id.indicator);
mIndicator.setViewPager(mPager);
progressDialog.dismiss();
}
Run Code Online (Sandbox Code Playgroud)
TeamFragmentAdapter:
class TeamFragmentAdapter extends FragmentPagerAdapter implements TitleProvider {
ArrayList<Fragment> fragments = new ArrayList<Fragment>();
ArrayList<String> titels = new ArrayList<String>();
public TeamFragmentAdapter(FragmentManager fm) {
super(fm);
fragments.add(new TeamInformatieFragment(team)); …Run Code Online (Sandbox Code Playgroud) 我正在使用AsyncTask从文件中读取数据.我在运行应用程序时遇到上述错误.
错误消息是:
03-29 20:06:08.445:E/AndroidRuntime(13191):java.lang.ExceptionInInitializerError 03-29 20:06:08.445:E/AndroidRuntime(13191):at com.google.app.BouncingBall.HighScore.loadFromFile( HighScore.java:81)03-29 20:06:08.445:E/AndroidRuntime(13191):at com.google.app.BouncingBall.HighScore.(HighScore.java:24)03-29 20:06:08.445:E/AndroidRuntime(13191):at com.google.app.BouncingBall.BouncingBallActivity $ BouncingBallView.init(BouncingBallActivity.java:185)03-29 20:06:08.445:E/AndroidRuntime(13191):at com.google.app. BouncingBall.BouncingBallActivity $ BouncingBallView.run(BouncingBallActivity.java:173)03-29 20:06:08.445:E/AndroidRuntime(13191):at java.lang.Thread.run(Thread.java:1019)03-29 20: 06:08.445:E/AndroidRuntime(13191):引起:java.lang.RuntimeException:无法在未调用Looper.prepare()的线程内创建处理程序03-29 20:06:08.445:E/AndroidRuntime(13191 ):在android.os.Handler.(Handler.java:121)
代码
private void loadFromFile()
{
new AsyncDataStorage().execute(FILENAME);
}
class AsyncDataStorage extends AsyncTask<String, Integer, Boolean> {
protected Boolean doInBackground(String... args) {
try {
FileInputStream fis = context.openFileInput(FILENAME);
byte[] raw = new byte[fis.available()];
String rawData=null;
while(fis.read()!=-1)
{
rawData = new String(raw);
}
return (processRawData(rawData));
} catch (FileNotFoundException e) {
e.printStackTrace();
return false;
} catch (IOException e) { …Run Code Online (Sandbox Code Playgroud) 我已经看到了很多这类问题的答案,但它与我的任务无关.我想在后台获取GPS位置,但我得到的例外是Cant Create Handler Inside Thread That Has Not Called Looper Prepare in Android在mlocManager.requestLocationUpdates( LocationManager.GPS_PROVIDER, 0, 0, mlocListener);.
public class GPSLocation extends AsyncTask<Void, Void, Void>
{
@Override
protected void onPreExecute()
{
super.onPreExecute();
progressDialog = new ProgressDialog(RoadMaintenanceActivity.this);
progressDialog.setCancelable(true);
progressDialog.setMessage("Getting GPS Location...");
progressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
progressDialog.setProgress(1);
progressDialog.show();
}
@Override
protected void onProgressUpdate(Void... values) {
super.onProgressUpdate(values);
// Things to be done while execution of long running operation is in progress. For example updating ProgessDialog
}
@Override
protected void onPostExecute(Void result)
{
progressDialog.cancel(); …Run Code Online (Sandbox Code Playgroud) 我正在使用AsyncTask加载diva WebView,同时显示一个ProgressDialog.内容已加载并ProgressDialog显示,但它不会消失,因为执行没有进入onPostExecute().你能告诉我我做错了什么吗?
package xx.xxx.xxx;
import java.io.IOException;
import org.jsoup.Jsoup;
import org.jsoup.select.Elements;
import org.jsoup.nodes.Document;
import android.R.string;
import android.app.Activity;
import android.app.Dialog;
import android.app.ProgressDialog;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.Toast;
public class NewsActivity extends Activity {
private WebView wView;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.news_main);
new LoadNews().execute("");
}
private class LoadNews extends AsyncTask<String, Integer, String> {
private ProgressDialog Dialog = new ProgressDialog(NewsActivity.this);
@Override
protected String doInBackground(String... …Run Code Online (Sandbox Code Playgroud) 所以,在我的Dialog中,我有一个启动Asynctask下载器的按钮,从我的服务器获取一些文件; 这工作得很好.但是,我想解除当前的Dialog并显示单击按钮上的ProgressDialog.我该如何处理这个问题?
目前,如果我点击按钮(我的Dialog中的一个元素),整个用户界面会在下载器从服务器下载文件时冻结.下载程序完成任务后,将显示进度对话框.
我的代码看起来像这样
MainActivity{
Dialog dialog;
ProgressDialog progress;
onCreate(){
dialog = new Dialog(this);
progress = new ProgressDialog(this);
dialog.setContentView(Some View Resource With My Button);
someMethod();
dialog.show();
}
someMethod(){
Button button = (Button) dialog.findViewById(resource of button);
button.setOnClickListener(new OnClickListener(){
onClick(){
dialog.dismiss();
progress.show();
new DownloaderAsyncTask(progress).execute().get();
}
//go to another activity when download finished
});
}
private class DownloaderAsyncTask extends AsyncTask<Void, Void, Void>{
ProgressDialog progress;
DownloaderAsyncTask(ProgressDialog progress){
this.progress = progress;
}
doInBackGround(){
//Downloading
}
onPostExecute(){
//Kill connection
this.progress.dismiss();
}
}
}
Run Code Online (Sandbox Code Playgroud)
谢谢.如果您需要任何其他信息,请告诉我.
我在MapActivity中有一个AsyncTask类.在doInBacground()方法内部,我必须使用代码块.
它看起来像这样:
@Override
protected List<GeoPoint> doInBackground(String... arg0) {
// check if the query (word and the distance) existing queries and return its id
int checkQuery = db.getQueryMatch(arg0[3].toString() , arg0[2].toString());
Log.v(" CheckQuery int ", " equal? " + checkQuery );
if (checkQuery < 1)
{
Block 1
}
else
{
Block 2
}
Run Code Online (Sandbox Code Playgroud)
getQueryMatch方法将检查是否存在两个文本字段,然后返回记录ID.
int getQueryMatch(String word, String meter) {
SQLiteDatabase db = this.getReadableDatabase();
int getidd = 0;
Cursor cursor = db.query(TABLE_HISTORY, new String[] { KEY_ID, QUERYWORD, DISTANCEQ, KEY_TIMESTAMP }, QUERYWORD …Run Code Online (Sandbox Code Playgroud) 我想将一个onPreExecute AsyncTask添加到SherlockFragment但它会导致错误.我的代码如下.在preExecute AsyncTask上添加对话框的代码有什么问题?
public class customlist extends SherlockFragment {
static final String URL = "esample";
static final String KEY_SONG = "song"; // parent node
private static final String KEY_TAB_NUM = "key.tab.num";
private ProgressDialog pDialog;
ListView list;
LazyAdapterbeth adapter;
XMLParser parser = new XMLParser();
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
}
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
new getFeed().execute();
}
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState)
{
View thisfragment = inflater.inflate(R.layout.dovomi, container, false);
return thisfragment;
}
private class getFeed …Run Code Online (Sandbox Code Playgroud) 我做了一个简单的AsyncTask类,借助这个stackoverflow问题在ListView中显示数据.但是没有调用AsyncTask onPostExecute.
这是我的代码:
public class Start extends SherlockActivity {
// JSON Node names
private static final String TAG_ID = "id";
private static final String TAG_NAME = "name";
// category JSONArray
JSONArray category = null;
private ListView lv;
@Override
public void onCreate(Bundle savedInstanceState) {
setTheme(SampleList.THEME); //Used for theme switching in samples
super.onCreate(savedInstanceState);
setContentView(R.layout.test);
new MyAsyncTask().execute("http://....");
// Launching new screen on Selecting Single ListItem
lv.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
// …Run Code Online (Sandbox Code Playgroud) private class Test extends AsyncTask<Void, Void, Void> {
@Override
protected void onPreExecute() {
// TODO Auto-generated method stub
super.onPreExecute();
Log.d("test", "called1");
}
@Override
protected Void doInBackground(Void... params) {
Log.d("test", "called2");
return null;
}
@Override
protected void onPostExecute(Void result) {
// TODO Auto-generated method stub
super.onPostExecute(result);
Log.d("test", "called3");
}
}
Run Code Online (Sandbox Code Playgroud)
并输出:
测试:called1
为什么其他方法永远不会在Service在后台工作时调用?如果服务停止,那么所有方法调用和输出:
测试:called1
测试:called2
测试:called3
下面的代码基本上是有用的......主要是.它适用于我正在测试的所有手机,但在客户端手机上失败,我无法使用.此代码的哪一部分可能导致NetworkOnMainThreadException?
这真的很直接.我在onPostExecute()中做的是:
打开新创建的PDF
@Override
protected void onPostExecute(InputStream is) {
super.onPostExecute(is);
if (progressDialog.isShowing()) {
progressDialog.dismiss();
}
if (is== null) {
errorMessage = getString(R.string.error_server_communication);
CustomDialogs.showErrorDialog( fragment.getActivity(), getString( R.string.error_title ), errorMessage );
return;
}
//checking external storage avalibility
if (!Tools.isWriteableExternalStorageAvalible()) {
errorMessage = getString(R.string.error_no_external_storage);
CustomDialogs.showErrorDialog( fragment.getActivity(), getString( R.string.error_title ), errorMessage );
return;
}
// opening pdf
try {
File directory = new File(Environment.getExternalStorageDirectory(), "MyApp");
if (!directory.exists())
directory.mkdirs();
File file = new File(directory, "file.pdf");
//usuwa poprzednio przechowywany wynik jesli …Run Code Online (Sandbox Code Playgroud)