我通过客户端/服务器进行简单的聊天,当我将消息发送到服务器时,它完美地显示了ListView泡泡.但是当我从服务器发送一个并且客户端收到它时,它会尝试执行addItems()并关闭它.我尝试了一切.我知道这是因为我无法从Asynctask更改UI,但我是Android/Java的新手,我不知道DOOOOOOOO是什么!帮助PAYASEEEE !!!!!
***MY LOG CAT** 01-08 18:32:41.023: E/AndroidRuntime(1242): FATAL EXCEPTION: AsyncTask #1
01-08 18:32:41.023: E/AndroidRuntime(1242): java.lang.RuntimeException: An error occured while executing doInBackground()
01-08 18:32:41.023: E/AndroidRuntime(1242): at android.os.AsyncTask$3.done(AsyncTask.java:299)
01-08 18:32:41.023: E/AndroidRuntime(1242): at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:273)
01-08 18:32:41.023: E/AndroidRuntime(1242): at java.util.concurrent.FutureTask.setException(FutureTask.java:124)
01-08 18:32:41.023: E/AndroidRuntime(1242): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:307)
01-08 18:32:41.023: E/AndroidRuntime(1242): at java.util.concurrent.FutureTask.run(FutureTask.java:137)
01-08 18:32:41.023: E/AndroidRuntime(1242): at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230)
01-08 18:32:41.023: E/AndroidRuntime(1242): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
01-08 18:32:41.023: E/AndroidRuntime(1242): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
01-08 18:32:41.023: E/AndroidRuntime(1242): at java.lang.Thread.run(Thread.java:856)
01-08 18:32:41.023: E/AndroidRuntime(1242): Caused by: android.view.ViewRootImpl$CalledFromWrongThreadException: Only the original thread that created a …Run Code Online (Sandbox Code Playgroud) java android android-widget android-listview android-asynctask
可能重复:
Android AsyncTask进度条
我正在使用登录过程,在服务器上获取数据的时间是延迟.所以我想设置一个进度条为tat delay.how设置进度条直到得到服务器的响应.有人知道答案请帮助我.
好的,所以我有一个运行asynctask的任务服务类,然后在条件满足时启动通知.在发送方法中有一个空指针异常,其中创建了Intent,上下文具有所有空值.我不认为我正确地从BloodLevelParse asynctask传递上下文?不确定我还能尝试什么.这是班级:
public class TaskService extends IntentService {
private ArrayList<BloodLevels> BloodLevelList;
private String bloodLevel;
private String bloodType;
private Integer bloodLevelDays;
private MyProfileActivity myProfileActivity;
private BloodLevelParse bloodLevelParse;
public TaskService() {
super("TaskService");
}
@Override
protected void onHandleIntent(Intent intent) {
// Pass through the blood type
Bundle bundle = intent.getExtras();
bloodType = bundle.getString("currentBloodType2");
// Only perform check if there is an internet connection
if (CheckNetwork.isInternetAvailable(TaskService.this)) {
// Check the current blood level for the given blood type
new BloodLevelParse(this).execute(bloodType);
} else {
Toast.makeText( …Run Code Online (Sandbox Code Playgroud) 看起来这个类没有用,因为它从不发布进度.
onPostExecute实际上有效.但是这个课程主要依赖于progressUpdate.
class DoBackgroundStuff extends AsyncTask<String, Integer, String> {
@Override
protected String doInBackground(String... a) {
String rawContactsDl;
while(true) {
if (isFinished == true) {
backgroundStopped = true;
break;
}
//DO SOME STUFF
publishProgress(1);
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
return "done";
}
protected void onProgressUpdate(int progress) {
Log.i("VERBOSE","onProgress " + progress);
adapter.notifyDataSetChanged();
}
protected void onPostExecute(String result) {
Log.i("VERBOSE","onPosts " + result);
adapter.notifyDataSetChanged();
}
}
Run Code Online (Sandbox Code Playgroud) 我使用了asyncTask来发出http请求,因此我使用了进度条来指示该线程中的ongoings的进度.一切正常,直到onPostexecute()方法被调用,我已经显示了响应字符串,Logcat但我的进度条没有退出.
有类似的问题,但我没有得到问题所需的解决方案.请帮忙.
这是我的代码:
class RequestTask extends AsyncTask<String, Integer, String> {
@SuppressWarnings("static-access")
@Override
protected void onPreExecute() {
// TODO Auto-generated method stub
super.onPreExecute();
prgDialog=new ProgressDialog(getActivity());
prgDialog.setCancelable(true);
prgDialog.show(getActivity(), null, "Loading...");
}
@Override
protected String doInBackground(String... uri) {
HttpClient httpclient = new DefaultHttpClient();
HttpResponse response;
String responseString = null;
try {
response = httpclient.execute(new HttpGet(uri[0]));
StatusLine statusLine = response.getStatusLine();
if (statusLine.getStatusCode() == HttpStatus.SC_OK) {
ByteArrayOutputStream out = new ByteArrayOutputStream();
response.getEntity().writeTo(out);
out.close();
responseString = out.toString();
} else {
// Closes …Run Code Online (Sandbox Code Playgroud) 我想在我的 android 应用程序中使用 ksoap2 Web 服务返回一个特定的字符串。
Web 服务正在返回正确的值,但一旦任务完成,设置的文本就不会更新。我需要做一些事情(比如尝试打开导航抽屉)然后它会得到更新。有任何想法吗??
我的代码如下
// Calling the async class
protected void onResume() {
try {
super.onResume();
new RetrieveTimeWS().execute();
}
catch (Exception e)
{
Log.e("Current Time", e.getMessage());
}
}
Run Code Online (Sandbox Code Playgroud)
以下是异步任务
class RetrieveTimeWS extends AsyncTask<Void, Void, String> {
protected String doInBackground(Void... params) {
String datetime = "";
try {
TextView TVcurrentTime = (TextView) findViewById(R.id.DateTimeNow);
TVcurrentTime.setText("Loading...");
datetime = getDateTimeClass.getDateTime();
TVcurrentTime.setText(datetime);
} catch (Exception e) {
Log.e("Async Task - GetDateTime ", e.getMessage());
}
return datetime;
}
}
Run Code Online (Sandbox Code Playgroud)
文本字段显示“正在加载...”,直到我触摸屏幕上的任何组件。在 Web …
我正在做一个AsyncTask,如果我将sdk降低到22,我可以添加.
在sdk 23上它根本不起作用,即使在22年,它也为我写了一些内容.
我究竟做错了什么 ?或者如何纠正它以便我可以在sdk 23运行它?
@Override
protected Boolean doInBackground(String... urls) {
try {
//------------------>>
HttpGet httppost = new HttpGet(urls[0]);
HttpClient httpclient = new DefaultHttpClient();
HttpResponse response = httpclient.execute(httppost);
// StatusLine stat = response.getStatusLine();
int status = response.getStatusLine().getStatusCode();
if (status == 200) {
HttpEntity entity = response.getEntity();
String data = EntityUtils.toString(entity);
JSONObject jsono = new JSONObject(data);
//this gets us the actors node and puts it in jarray veriable
JSONArray jarray = jsono.getJSONArray("actors");
for (int i = 0; i < jarray.length(); …Run Code Online (Sandbox Code Playgroud) 我想实现的东西里面AsyncTask像这样。
@Override
protected void onPreExecute() {
super.onPreExecute();
...
// prevent screen sleep
getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
}
@Override
protected void onPostExecute(List<Result> results) {
super.onPostExecute(results);
getWindow().clearFlag (WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
...
}
Run Code Online (Sandbox Code Playgroud)
但是我Cannot resolve method getWindow()在Android Studio中收到错误“ ”。我想念什么?
更新资料
我的AsyncTask的构造函数是:
public MyTask(ProgressDialog pDlg) {
progressDlgReference = new WeakReference<>(pDlg);
progressDlg = progressDlgReference.get();
context = progressDlg.getContext();
...
}
Run Code Online (Sandbox Code Playgroud)
我尝试强制转换context为,Activity但出现运行时错误((Activity) context).getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);?
我正在尝试从服务器获取 json 并将其放入我的 RecyclerView,但它说“java.lang.String 无法转换为 JSONArray”。我试图跟踪我的 json,但它什么也没显示。怎么了,我该如何解决这个问题?
private void Prosesdataserver(int id){
AsyncTask<Integer, Void, Void> task = new AsyncTask<Integer, Void, Void>() {
@Override
protected Void doInBackground(Integer... integers) {
OkHttpClient client = new OkHttpClient();
try{
RequestBody formBody = new FormBody.Builder().add("username_krm", username).add("password_krm", password).build();
Request request = new Request.Builder().url("http://" + urlpakai + "/utrapos/index.php/getpenawaran?id="+integers[0]).post(formBody).build();
response = client.newCall(request).execute();
ini = response.body().toString();
JSONArray array = new JSONArray(ini);
System.out.println("Saya Berkata: " + ini);
for(int i=0; i<array.length();i++){
JSONObject object = array.getJSONObject(i);
DataJson hasil = new DataJson(object.getInt("id"), object.getString("kode"), object.getString("tglpenawaran"), object.getString("nama"), …Run Code Online (Sandbox Code Playgroud) 我准备了带有警报对话框的 AsyncTask,其中是 / 否按钮。我需要为 Yes 返回 1,为 No 返回 0。我不完全理解 AsyncTask。添加点击等待时间需要做什么?当前状态不等待
代码类:
class MyTask extends AsyncTask<Void,Integer,Integer> {
TextView ozn_=null;
AlertDialog dialog=null;
AlertDialog.Builder builder=null;
ImageView icon=null;
int ret=0;
public int getRetValue(){
return ret;
}
public MyTask(int a){
ret=a;
}
@Override
protected void onPreExecute() {
super.onPreExecute();
ozn_ = new TextView(LoginActivity.this);
AlertDialog.Builder builder = new AlertDialog.Builder(LoginActivity.this);
ImageView icon = new ImageView(LoginActivity.this);
icon.setBackgroundResource(R.drawable.warn);
builder.setMessage("oznam");
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(set_dp(60), set_dp(60));
icon.setLayoutParams(params);
ozn_.setGravity(Gravity.LEFT);
LinearLayout l1 = new LinearLayout(LoginActivity.this);
l1.setPadding(set_dp(12), set_dp(12), set_dp(12), set_dp(20));
l1.setOrientation(LinearLayout.HORIZONTAL);
l1.setGravity(Gravity.CENTER_VERTICAL);
ozn_.setPadding(set_dp(12), …Run Code Online (Sandbox Code Playgroud) 我正在做门户网站应用程序.
通过使用AsyncTask <>我获取json值并显示.
我的应用程序在Android 2.3.3中运行良好,但是当我在Android 4.1.2中运行该应用程序时,它会抛出错误.我已经使用google并根据它进行了更改,但我仍然在4.1.2中收到错误
我在清单中也包括了这行...
<uses-permission android:name="android.permission.INTERNET" />
Run Code Online (Sandbox Code Playgroud)
我也删除了runOnUiThread部分,onPostExecute(String file_url)之后它也抛出了错误.
任何帮助,将不胜感激.
我的代码
class LoadAllgroups extends AsyncTask<String, String, String> {
@Override
protected void onPreExecute() {
super.onPreExecute();
showDialog(progress_bar_type);
}
protected String doInBackground(String... args) {
// here my codes
}
protected void onPostExecute(String file_url) {
pDialog.dismiss();
gnamelist=new ArrayList<String>(new LinkedHashSet<String>(gnamelist));
runOnUiThread(new Runnable() {
public void run() {
createExpandableListViewDialog();
}
});
return;
}
}
Run Code Online (Sandbox Code Playgroud)
logcat的
07-29 00:29:47.860: E/AndroidRuntime(947): FATAL EXCEPTION: main
07-29 00:29:47.860: E/AndroidRuntime(947): android.os.NetworkOnMainThreadException
07-29 00:29:47.860: E/AndroidRuntime(947): at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1117)
07-29 …Run Code Online (Sandbox Code Playgroud) 我有一个问题,我根本无法理解它!我有一个Asynctask连接到Web服务并下载一些数据.
但当我这样做时,我的其他人Asynctasks等待这个Asynctask to finish his work evenAsynctasks in otherActivities` !! 但我无法理解这一点.
我怎么能避免这个?我当时认为Asynctasks可以同时运行,但现在却没有!问题是什么?似乎REST和下载流数据会阻止整个应用程序.
我有一个问题,我编写的代码就像 Run Code Online (Sandbox Code Playgroud)
我执行这样的类
private class SomeClass extends AsyncTask {
@Override
protected void onPreExecute() {
super.onPreExecute();
pDialog = new ProgressDialog(CheckOutActivity.this);
pDialog.setMessage(getText(R.string.wait));
pDialog.setIndeterminate(false);
pDialog.setCancelable(true);
pDialog.show();
}
@Override
protected Void doInBackground(Void... arg0) {
//some code
}
@Override
protected void onPostExecute(final Void unused) {
if (pDialog.isShowing()) {
pDialog.dismiss();
}
}
}
现在我的问题是.execute()启动代码就像不等待它意味着Toast就像在执行SomeClass()之前执行一样.execute(); 有没有等待这个.execute()方法的属性.
new SomeClass().execute();
Toast.makeText(getApplicationContext(), "msg msg", Toast.LENGTH_SHORT).show();
编辑:我为全局变量赋值,在执行后我只想比较这个值.所以我只是把Toast的消息.