我有一个按钮,按下后,执行以下代码:
public void onClick(View v) {
// TODO Auto-generated method stub
//progressSpin.setVisibility(View.VISIBLE);
try {
data=new WebkioskExtractor().execute(username,password).get();
System.out.println("Data = "+data);
} catch (Exception e) {
// TODO Auto-geneorated catch block
e.printStackTrace();
}
//progressSpin.setVisibility(View.GONE);
}
Run Code Online (Sandbox Code Playgroud)
从代码中清楚,我必须等待AsyncTask完成,因为我依赖于它返回的数据.问题是,当执行任务(从互联网上获取一些数据)时,按钮仍处于按下状态.即使我将我创建的进度条设置为VISIBLE,也不会显示.
我怎样才能解决这个问题?我希望按下按钮一次,然后进度条应该开始旋转,这不会发生.
我正在使用异步任务在菜单项单击上设置壁纸但它继续运行并且不会停止.这是我正在使用的代码:
class ImageTask extends AsyncTask<Void, Void, Void> {
Context c;
ProgressDialog pd;
public ImageTask(Context ctx) { this.c=ctx; }
@Override
protected void onPreExecute() {
pd=ProgressDialog.show(c, "Please Wait", "Setting Wallpaper...");
}
public void onPostExecute() {
pd.dismiss();
Toast.makeText(c, "Wallpaper set successfully", Toast.LENGTH_SHORT).show();
}
protected Void doInBackground(Void... params) {
WallpaperManager wm1=WallpaperManager.getInstance(c);
try { wm1.setBitmap(ImageFrag1.bmg1); }
catch (IOException e) { e.printStackTrace(); }
return null;
}
}
Run Code Online (Sandbox Code Playgroud)
并在项目选择功能我这样做:
public boolean onOptionsItemSelected(MenuItem item) {
switch(item.getItemId()) {
case R.id.action_wall: {
/*WallpaperManager wm=WallpaperManager.getInstance(getActivity().getApplicationContext());
try{
wm.setBitmap(bmg1);
Toast.makeText(getActivity().getBaseContext(), "Wallpaper set successfully",Toast.LENGTH_SHORT).show(); …Run Code Online (Sandbox Code Playgroud) [我有一个自定义的parcelable对象车]
我看过AsyncTask但是关于这个主题还不太清楚:
我想将一个String(它是Vehicle的Vehicle ID)传递给AsyncTask,然后在doInBackground()中我有一个方法
mRemoteInterface.getTrackHistory();
Run Code Online (Sandbox Code Playgroud)
这给了我一个ArrayList.我想在onPostExecute()中启动一个活动,其中Vehicle ID和ArrayList都是额外的.
这是我无法做到的概述.问题是我不明白将对象INTO到asynctask,然后从doInBackground()到onPostExecute()和从onPostExecute()返回到原始的执行调用.
getTrackHistory.execute(这里应该去哪里?);
private class getTrackHistory extends
AsyncTask<String, Integer, Boolean **WHAT SHOULD GO HERE?**> {
@Override
protected Boolean doInBackground(
String... params) {
try {
String vehicleID = params[0];
listVehicleHistory = (ArrayList<Vehicle>) mRemoteInterface.getVehicleHistory(vehicleID);
} catch (Exception e) {
e.printStackTrace();
}
}
@Override
protected void onProgressUpdate(Integer... progress) {
}
@Override
protected void onPostExecute(Boolean worked) {
super.onPostExecute(worked);
Intent intent = new Intent(MainActivity.this,VehicleInfo.class);
intent.putExtra("Vehicle ID", toReturn);
intent.putParcelableArrayListExtra("VehicleHistory", listVehicleHistory);
startActivity(intent);
}
Run Code Online (Sandbox Code Playgroud)
}
我正在尝试检查Android上的互联网连接(实际连接,而不是网络访问)NetworkOnMainThreadException.因此,我试图把它变成一个AsyncTask.
这是我的isConnected()方法:
if(!checkNetwork(parent)){
return false;
}
if(!checkConnection(url)){
return false;
}
return true;
Run Code Online (Sandbox Code Playgroud)
现在,我通过使用来检查连接,if(isConnected())但我得到了异常.所以我需要做的是将上面的方法移动到AsyncTask并检索它返回的值.
我想也许我可以创建一个跟踪它的全局变量,但是我不确定在AsyncTask设置它之前或之后是否会返回我的值.
我确信有办法做到这一点,所以我正在寻找如何做到这一点的想法.任何建议表示赞赏!
编辑:我已经更新了我的代码以使用AsyncTask,如果这看起来更好,请告诉我:
ConnectUtils.java:
public class ConnectUtils {
private static boolean hasConnected, hasChecked;
public boolean isConnected(Context parent, String url){
hasChecked = false;
this.new CheckURL(parent, url).execute();
while(!hasChecked){ }
return hasConnected;
}
private class CheckURL extends AsyncTask<Void, Void, Boolean>{
private Context parent;
private String url;
public CheckURL(Context parent, String url){
this.parent = parent;
this.url = url;
}
@Override
protected Boolean …Run Code Online (Sandbox Code Playgroud) 请原谅我试图为我的应用程序解析页面的列表视图的问题,我将解释:我有一个由Fragment组成的操作栏.当instazia片段,第一次打开应用程序"getActivity"不返回null时,下一次,当我启动AsyncTask时,我将停止解析此错误的片段:
java.lang.NullPointerException
at android.widget.ArrayAdapter.init(ArrayAdapter.java:310)
at android.widget.ArrayAdapter.<init>(ArrayAdapter.java:104)
at com.megadown.megacodownloader.ParsingArrayAdapter.<init>(ParsingArrayAdapter.java:30)
at com.megadown.megacodownloader.Tab_Search$ParsingPaginaWeb.onPostExecute(Tab_Search.java:264)
at com.megadown.megacodownloader.Tab_Search$ParsingPaginaWeb.onPostExecute(Tab_Search.java:125)
at android.os.AsyncTask.finish(AsyncTask.java:631)
at android.os.AsyncTask.access$600(AsyncTask.java:177)
at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:644)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:4898)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1006)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:773)
at dalvik.system.NativeStart.main(Native Method)
Run Code Online (Sandbox Code Playgroud)
代码Java引用:
protected void onPostExecute(String result)
{
// dopo che ho eseguito il parsing mostro i dati nella listview
adapter = new ParsingArrayAdapter(myActivity, titoli, descrizioni,immagini);
lista.setAdapter(adapter);
}
Run Code Online (Sandbox Code Playgroud)
如果你愿意,我可以发布ArrayAdapter的代码.先感谢您
我是android的初学者,对于一个uny课程的项目,我们必须开发5个简单的应用程序,然后将它们"合并"在一起.所以你从一个Activity/ListView启动每个应用程序.所有应用程序都单独运行,但是当从列表视图运行一个应用程序时,我得到以下 *AsyncTask#1执行doinBackground()时发生错误; *
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
reportarray= new ArrayList<String>();
try {
URL url = new URL("http://www.yr.no/sted/Sverige/Kronoberg/V%E4xj%F6/forecast.xml");
AsyncTask task = new WeatherRetriever().execute(url);
} catch (IOException ioe ) {
ioe.printStackTrace();
}
adapter= new Adapter(this);
setListAdapter(adapter);
}
Run Code Online (Sandbox Code Playgroud)
这似乎是一个线程问题,这里是我使用的更多代码
private class WeatherRetriever extends AsyncTask<URL, Void, WeatherReport> {
protected WeatherReport doInBackground(URL... urls) {
try {
return WeatherHandler.getWeatherReport(urls[0]);
} catch (Exception e) {
throw new RuntimeException(e);
}
}
protected void onProgressUpdate(Void... progress) {
}
protected void onPostExecute(WeatherReport result) {
report …Run Code Online (Sandbox Code Playgroud) 我有一个名为myAsync的asynctask,它执行一些网络操作(从服务器获取数据,并解析json).
一旦活动运行,我也会创建一个处理程序.
我也有一个runnable,我运行asynctask.我使用runnable的原因是因为我将在Handler的postdelayed方法中使用它,因为我希望每1分钟重复一次.
Runnable runnable = new Runnable()
{
public void run()
{
new myAsync ().execute();
}
};
Run Code Online (Sandbox Code Playgroud)
然后我在onResume中使用上面的runnable;
@Override
protected void onResume()
{
super.onResume();
handler.postDelayed(runnable, 60000);
}
Run Code Online (Sandbox Code Playgroud)
每当我离开活动时,我都希望支票停止,所以我打电话给,
handler.removeCallbacks(runnable);
Run Code Online (Sandbox Code Playgroud)
然而,asynctask继续不停地运行.我该怎么办 ?
我有一个ArrayList变量的问题,它包含Videos我创建的类的对象.在ArrayList<Videos>我创建似乎永远保持为空,即使我add给它的对象.这是我的代码,我声明并使用此ArrayList:
public class Search extends Activity implements View.OnClickListener {
SearchView buttonSearch;
public static String URL_ALLVIDEOS = "http://" + Connexion.IP_ADRESS + "/protubes_android/getVideos.php";
public String[] videosArray;
public ArrayList<Videos> videosListe = new ArrayList<Videos>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.layout_search);
RetrieveVideos rv = new RetrieveVideos();
rv.execute();
work();
}
private void initialization() {
buttonSearch = (SearchView) findViewById(R.id.svSearch);
buttonSearch.setOnSearchClickListener(this);
}
public void work(){
videosArray = new String[videosListe.size()];
for (int i = 0; i < videosListe.size(); i++) {
videosArray[i] …Run Code Online (Sandbox Code Playgroud) 我知道我在日志猫中获得的异常有一个非常严格的名字.我唯一的问题是我无法确定导致我的异常的原因.我创建了一个PC-Android多客户聊天.
PC版本与服务器和客户端100%一起工作.我实现了从PC客户端到Android客户端和聊天工作相同的技术.
我得到的唯一问题是,当我连接android,clientArea(跟踪所有连接的用户)时,不跟踪其他名称,而是跟踪android客户端用户名的倍数.即.我只使用用户名:Jurko连接到android,clientArea将有2个人称为Jurko而不是只有一个.
logcat的:
10-11 17:19:08.221: ERROR/AndroidRuntime(12379): FATAL EXCEPTION: main
java.lang.ArrayIndexOutOfBoundsException: length=2; index=2
at com.example.JurkoAndroidChat.MyActivity$ServerTask.onProgressUpdate(MyActivity.java:175)
at com.example.JurkoAndroidChat.MyActivity$ServerTask.onProgressUpdate(MyActivity.java:130)
at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:647)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:4895)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:994)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:761)
at dalvik.system.NativeStart.main(Native Method)
Run Code Online (Sandbox Code Playgroud)
Android客户端:
package com.example.JurkoAndroidChat;
import android.app.Activity;
import android.content.DialogInterface;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.view.View;
import java.net.*;
import java.io.*;
import java.util.*;
public class MyActivity extends Activity {
/**
* Called when the activity is first created.
*/ …Run Code Online (Sandbox Code Playgroud) java sockets android android-asynctask indexoutofboundsexception
我正在尝试创建一个即使将应用程序发送到后台也会运行的倒计时器?我不确定如何使用服务来实现它,所以可以在asyncTask的doBackground方法中运行它,并且即使应用程序被"最小化",计时器还会继续运行吗?
感谢名单