- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个调用 java 类 (JsonTaskPost) 的 Activity (LoginActivity)。我想在用户单击按钮时显示一个进程栏,同时 java 类执行其任务。我想代码必须运行得太快才能看到进度条。那么我怎样才能增加进度条的可见性,例如 20 秒?还是逻辑错了?
登录 Activity .java
package com.example.mymobileforumbrowser2;
import android.app.ProgressDialog;
import android.content.Intent;
import android.icu.util.TimeUnit;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import static com.example.mymobileforumbrowser2.MainActivity.LOGIN_ACTIVITY;
import static com.example.mymobileforumbrowser2.MainActivity.mSharedEditor;
import static com.example.mymobileforumbrowser2.MainActivity.makeToast;
import static com.example.mymobileforumbrowser2.MainActivity.serverUrl;
public class LoginActivity extends AppCompatActivity {
public static TextView serverMessageTxv;
EditText usernameEditTxv,passwordEditTxv;
Button loginButton;
ProgressDialog progress;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);
serverMessageTxv = (TextView)findViewById(R.id.server_message);
usernameEditTxv = (EditText)findViewById(R.id.username_edittextview);
passwordEditTxv = (EditText)findViewById(R.id.password_edittextview);
loginButton = (Button)findViewById(R.id.login_button);
loginButton.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View v) {
progress = ProgressDialog.show(LoginActivity.this, "LOG IN",
"Logging Please Wait ...", true);
new Thread(new Runnable() { // open new thread gia background processing
@Override
public void run() {
String url = serverUrl + "login.php";
//Log.d("EXEC_JSON","CALL JSON");
new JsonTaskPost().execute(url,
usernameEditTxv.getText().toString(),
passwordEditTxv.getText().toString(),
LOGIN_ACTIVITY);
runOnUiThread(new Runnable() {
@Override
public void run() {
progress.dismiss();
}
});
}
}).start();
/*
String url = serverUrl + "login.php";
new JsonTaskPost().execute(url,
usernameEditTxv.getText().toString(),
passwordEditTxv.getText().toString(),
LOGIN_ACTIVITY);
*/
}
});
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu, menu);
MenuItem topicItem = menu.findItem(R.id.new_topic);
topicItem.setVisible(false);
MenuItem postItem = menu.findItem(R.id.new_post);
postItem.setVisible(false);
//MenuItem mapItem = menu.findItem(R.id.map);
//mapItem.setVisible(false);
MenuItem loginItem = menu.findItem(R.id.login);
loginItem.setVisible(false);
invalidateOptionsMenu();
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item)
{
Intent intent;
// Handle item selection
switch (item.getItemId()) {
case R.id.preferences:
intent = new Intent(this, PreferencesActivity.class);
startActivity(intent);
return true;
case R.id.logout:
if(mSharedEditor!= null)
{
mSharedEditor.putString("Username", "");
mSharedEditor.putBoolean("LoggedIn", false);
mSharedEditor.commit();
makeToast(this, "Successfully logged out");
}
return true;
case R.id.register:
intent = new Intent(this, RegisterActivity.class);
startActivity(intent);
finish();
return true;
default:
return super.onOptionsItemSelected(item);
}
}
}
JsonTaskPost.java
package com.example.mymobileforumbrowser2;
import android.os.AsyncTask;
import android.util.Log;
import org.json.JSONObject;
import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import static com.example.mymobileforumbrowser2.LoginActivity.serverMessageTxv;
import static com.example.mymobileforumbrowser2.MainActivity.LOGIN_ACTIVITY;
//import static com.example.mymobileforumbrowser2.MainActivity.MAPS_ACTIVITY;
import static com.example.mymobileforumbrowser2.MainActivity.NEWPOST_ACTIVITY;
import static com.example.mymobileforumbrowser2.MainActivity.NEWTOPIC_ACTIVITY;
import static com.example.mymobileforumbrowser2.MainActivity.POSTS_ACTIVITY;
import static com.example.mymobileforumbrowser2.MainActivity.REGISTER_ACTIVITY;
import static com.example.mymobileforumbrowser2.MainActivity.TOPICS_ACTIVITY;
import static com.example.mymobileforumbrowser2.MainActivity.mSharedEditor;
import static com.example.mymobileforumbrowser2.MainActivity.mSharedPrefs;
import static com.example.mymobileforumbrowser2.MainActivity.removeHtmlChars;
import static com.example.mymobileforumbrowser2.MainActivity.stringToListView;
import static com.example.mymobileforumbrowser2.PostsActivity.adapterPosts;
import static com.example.mymobileforumbrowser2.PostsActivity.postsListItems;
import static com.example.mymobileforumbrowser2.RegisterActivity.registerServerMessageTxv;
import static com.example.mymobileforumbrowser2.TopicsActivity.adapterTopics;
import static com.example.mymobileforumbrowser2.TopicsActivity.topicsListItems;
//post-get class
// fetches topics / posts an ginetai call apo TopicsActivity / PostsActivity
public class JsonTaskPost extends AsyncTask<String, String, String>
{
String message = null;
String usernameSharedPrefs;
String callingActivity;
JSONObject jsonObject;
protected void onPreExecute() {
super.onPreExecute();
}
protected String doInBackground(String... params) {
HttpURLConnection connection = null;
BufferedReader reader = null;
OutputStream outStream = null;
callingActivity = params[3]; // orizetai apo caller
Log.d("Calling Activity",callingActivity);
usernameSharedPrefs = params[1]; //string of username if login called, else forum / topic name depending on caller activity
Log.d("USERNAME",usernameSharedPrefs);
try {
URL url = new URL(params[0]); // callers url adress, eg http:localhost/phpbb/fetch_forums.php
Log.d("CALLERS URL",params[0]);
jsonObject = new JSONObject();
message = paramsTojson(params).toString(); // metatrepei periexomena Json array se string , {"key:","value"}
Log.d("MESSAGE",message);
connection = (HttpURLConnection) url.openConnection(); //open connection to phpbb database
connection.setDoInput(true);
connection.setDoOutput(true);
connection.setFixedLengthStreamingMode(message.getBytes().length);
connection.setRequestProperty("Content-Type", "application/json;charset=utf-8");
outStream = new BufferedOutputStream(connection.getOutputStream());
outStream.write(message.getBytes());
outStream.close();
InputStream stream = connection.getInputStream();
reader = new BufferedReader(new InputStreamReader(stream));
StringBuffer buffer = new StringBuffer();
String line;
while ((line = reader.readLine()) != null) {
buffer.append(line+"\n");
Log.d("Response: ", "> " + line);
}
return buffer.toString();
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
finally
{
if (connection != null){
connection.disconnect();
}
try {
if (reader != null) {
reader.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
return null;
}
@Override
protected void onPostExecute(String result)
{
if(result!=null)
{
if(callingActivity.equals(TOPICS_ACTIVITY))
{
stringToListView(result,topicsListItems);
adapterTopics.notifyDataSetChanged(); // prosarmogh periexomenwn listview toy topics activity sta nea periexomena
}
else if(callingActivity.equals(POSTS_ACTIVITY))
{
stringToListView(result,postsListItems);
adapterPosts.notifyDataSetChanged();
}
else if(callingActivity.equals(REGISTER_ACTIVITY))
{
result = removeHtmlChars(result);
if(result.contains("You are registered"))
registerServerMessageTxv.setText(result);
}
else if(callingActivity.equals(LOGIN_ACTIVITY))
{
result = removeHtmlChars(result);
serverMessageTxv.setText(result);
mSharedEditor = mSharedPrefs.edit();
if (result.contains("You are logged in"))
{
mSharedEditor.putString("Username",usernameSharedPrefs);
mSharedEditor.putBoolean("LoggedIn",true);
mSharedEditor.commit();
}
else // LOGOUT / no user logged in
{
mSharedEditor.putString("Username","");
mSharedEditor.putBoolean("LoggedIn",false);
mSharedEditor.commit();
}
}
}
super.onPostExecute(result);
}
protected JSONObject paramsTojson(String... params)
{
try
{
if (params[3].equals(LOGIN_ACTIVITY)) {
jsonObject.put("username", params[1]);
jsonObject.put("password", params[2]);
} else if (params[3].equals(TOPICS_ACTIVITY)) {
jsonObject.put("forum_name", params[1]);
jsonObject.put("number_of_topics", params[2]);
} else if (params[3].equals(POSTS_ACTIVITY)) {
jsonObject.put("topic_name", params[1]);
jsonObject.put("number_of_posts", params[2]);
} else if (params[3].equals(REGISTER_ACTIVITY)) {
jsonObject.put("username", params[1]);
jsonObject.put("password", params[2]);
jsonObject.put("email", params[4]);
} else if (params[3].equals(NEWTOPIC_ACTIVITY)) {
jsonObject.put("forum_name", params[1]);
jsonObject.put("topic_title", params[2]);
jsonObject.put("username", params[4]);
} else if (params[3].equals(NEWPOST_ACTIVITY)) {
jsonObject.put("topic_name", params[1]);
jsonObject.put("forum_name", params[4]);
jsonObject.put("username", params[5]);
jsonObject.put("post_text", params[2]);
}
/*
else if (params[3].equals(MAPS_ACTIVITY)) {
jsonObject.put("username", params[1]);
jsonObject.put("timestamp", params[2]);
jsonObject.put("longitude", params[4]);
jsonObject.put("latitude", params[5]);
}
*/
}
catch (org.json.JSONException e)
{
e.printStackTrace();
}
return jsonObject;
}
}
最佳答案
您的代码是错误的,这就是它发生的原因。您在调用 AsyncTask
之后调用 progress.dismiss();
。这就是 progressbar
在任务完成之前被关闭的原因。
您已经在使用JsonTaskPost(AsyncTask)
,所以这里不需要使用单独的线程。您需要从 JsonTaskPost
的 onPostExecute
调用 progress.dismiss();
,因为此方法是完成任务的地方。因此,为此您可以为任务完成创建回调或将 progressBar
实例传递给 JsonTaskPost
或直接在 Activity 本身中使用 AsyncTask
。
关于java - 如何在 android 中显示额外 20 秒的进度条?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45955349/
我配置了我的RouteInitializer如下: class AppRouteInitializer implements RouteInitializer { init(Router rout
我正在尝试从 Android 应用程序发送短信。我正在使用 PendingIntent 以便我可以使用 Broadcast Receiver 检查它是否发送正常。由于 sendTextMessage
目录 简介 1 "额外"字段是什么 1.1 "额外"是指与业务无关 1.2 产生
应用程序读取 JSON 数据。然后它会将其放入 ListView (正确),但在按下某个项目后,我总是会得到显示的相同值。下面的代码我认为是问题所在,但我找不到。 try{ JSONArray
我正在使用以下代码 (Kotlin) 创建通知 val builder = NotificationCompat.Builder(ctx) ........ .set
我有一个问题。现在我正在使用 3 个面板,mainPanel 和其他 2 个面板(btnPanel 和 iconPanel)。所以问题是当我按下“重置”按钮时,我删除了 iconPanel 并再次添加
这是我的 html: Settings Export Import 和CSS: span.button { float:right; margin-righ
我正在尝试将一个结构编码为 JSON,然后将其插入我的 Mongo 数据库,但不断出现此错误:%!(EXTRA main.Test={575590180 Me})。我究竟做错了什么?我完全从我从事的另
嘿,我遇到了这些 latex 格式问题,有人可以提供一些帮助吗? .tex 文件: \begin{table}{} \renewcommand{\arraystretch}{1.1} \c
我在 FragmentPagerAdapter 中使用了 Fragment 的 ArrayList。 我想在 saveState() 中保存此 ArrayList 的状态,并在 restoreStat
我做了this MapKit-教程 一切正常,但如何为我的 pin 添加额外的属性? 这是我的课车: import Foundation import MapKit class Car: NSObje
关于 Android intent 将提供的附加功能有哪些文档? 更新: 我做了一些进一步的调查。我知道我们可以假设每个 Intent 都不会解析任何数据或额外内容,除非有明确记录。此外,一些(但不是
我在 python3.4.3 上使用 SqlAlchemy 来管理 MySQL 数据库。我正在创建一个表: from datetime import datetime from sqlalchemy
我正在使用 bootstrap 创建网页。我在两个 block (内容和标题)上派生了正文。在内容 block 中,我有 div 类 .container .sameTable 在里面我有 div 类
我在Windows 7上的MinGW和MSYS下使用gfortran构建了一些fortran程序。但是当我在未安装MinGW和MSYS的其他计算机上运行它们时,系统总是要求一些dll,例如libgfo
第一个元素的右侧似乎有额外的间距,我不知道它是从哪里来的。有人可以帮助我吗? 这是我使用的代码: http://jsfiddle.net/srabeat/tenx4y1c/1/ for (i = 0;
我使用 fs-extra 收到以下错误: ERROR { [Error: EPERM: operation not permitted, unlink 'C:\Projects\xxx\branche
我正在尝试在 CBC 模式下使用 AES-128 加密 320 字节的二进制数据,并将密码存储到一个文件中。输出文件应该是 320 字节,但我得到了 336 字节。这是我的代码: #include
我有一个特定的要求,我必须从我的 Activity 中触发浏览器上的 url。我可以使用以下代码执行此操作: Intent browserIntent = new Intent( Intent.A
我正在使用 JMS DI 注入(inject)带有注解的服务: use JMS\DiExtraBundle\Annotation as DI; /** * @DI\Service("foo.bar.
我是一名优秀的程序员,十分优秀!