无法在android应用程序上更新progressbar
伙计们,我在做端口扫描仪。但由于某些原因,进度条没有更新。一旦扫描仪启动,我就可以看到progressbar变得可见;但是,该文件没有更新。谢谢你的帮助 端口无效性无法在android应用程序上更新progressbar,android,android-asynctask,android-progressbar,Android,Android Asynctask,Android Progressbar,伙计们,我在做端口扫描仪。但由于某些原因,进度条没有更新。一旦扫描仪启动,我就可以看到progressbar变得可见;但是,该文件没有更新。谢谢你的帮助 端口无效性 package com.example.android.droidscanner; import android.content.Intent; import android.os.AsyncTask; import android.os.Bundle; import android.os.SystemClock; import
package com.example.android.droidscanner;
import android.content.Intent;
import android.os.AsyncTask;
import android.os.Bundle;
import android.os.SystemClock;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.View;
import android.widget.Adapter;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.ProgressBar;
import android.widget.TextView;
import android.widget.Toast;
import java.io.IOException;
import java.net.ConnectException;
import java.net.InetAddress;
import java.net.InetSocketAddress;
import java.net.Socket;
import java.net.SocketAddress;
import java.net.SocketTimeoutException;
import java.net.UnknownHostException;
import java.util.ArrayList;
/**
* Created by jlvaz on 3/7/2017.
*/
public class PortScanActivity extends AppCompatActivity{
String ipAddress;
ArrayList<String> openPorts;
ArrayAdapter<String> portAdapter;
int startPort = 0;
int endPort = 1023;
TextView statusMsg;
ProgressBar progressBar;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.scan_list);
Intent portIntent = getIntent();
ipAddress = portIntent.getStringExtra("host");
statusMsg = (TextView) findViewById(R.id.status_msg);
progressBar = (ProgressBar) findViewById(R.id.progress_bar);
progressBar.setMax(0);
//setting the adapter
ListView portList = (ListView) findViewById(R.id.scan_list);
openPorts = new ArrayList<>();
portAdapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, openPorts);
portList.setAdapter(portAdapter);
//scanning ports
PortScanTask portScan = new PortScanActivity.PortScanTask();
portScan.execute();
progressBar.setClickable(false);
}
/*
* class to update progress bar during port scanning
*/
class Ports {
int progress;
String address;
}
private class PortScanTask extends AsyncTask<Void, Ports, Void> {
int timeOut = 1000; //for how long try connection in ms
Ports port;
@Override
protected void onPreExecute() {
openPorts.clear();
statusMsg.setText("Scanning " + ipAddress + " ports..");
progressBar.setVisibility(View.VISIBLE);
}
@Override
protected Void doInBackground(Void... params) {
for (int i = startPort; i <= endPort; i++) {
try {
//establishing connection to every port
Socket socket = new Socket();
SocketAddress address = new InetSocketAddress(ipAddress, i);
socket.connect(address, timeOut);
Log.v("Connecting to: ", ipAddress + i);
port = new Ports();
port.progress = i;
if (socket.isConnected()) {
socket.close();
port.address = address + ": " + i;
}
//sleep for 2 ms
SystemClock.sleep(200);
publishProgress(port);
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (SocketTimeoutException e) {
e.printStackTrace();
} catch (ConnectException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
return null;
}
@Override
protected void onProgressUpdate(Ports... values) {
if(values[0].address != null) {
openPorts.add(values[0].address);
portAdapter.notifyDataSetInvalidated();
Toast.makeText(getApplicationContext(), values[0].toString() + " open!", Toast.LENGTH_SHORT).show();
}
progressBar.setProgress(values[0].progress);
}
@Override
protected void onPostExecute(Void aVoid) {
statusMsg.setText("Done!.. ");
progressBar.setVisibility(View.GONE);
}
}
}
package com.example.android.droidscanner;
导入android.content.Intent;
导入android.os.AsyncTask;
导入android.os.Bundle;
导入android.os.SystemClock;
导入android.support.annotation.Nullable;
导入android.support.v7.app.AppActivity;
导入android.util.Log;
导入android.view.view;
导入android.widget.Adapter;
导入android.widget.ArrayAdapter;
导入android.widget.ListView;
导入android.widget.ProgressBar;
导入android.widget.TextView;
导入android.widget.Toast;
导入java.io.IOException;
导入java.net.ConnectException;
导入java.net.InetAddress;
导入java.net.InetSocketAddress;
导入java.net.Socket;
导入java.net.SocketAddress;
导入java.net.SocketTimeoutException;
导入java.net.UnknownHostException;
导入java.util.ArrayList;
/**
*由jlvaz于2017年3月7日创建。
*/
公共类PortScanActivity扩展了AppCompatActivity{
字符串地址;
ArrayList开放端口;
阵列适配器便携式适配器;
int startPort=0;
int endPort=1023;
文本视图状态消息;
ProgressBar ProgressBar;
@凌驾
创建时受保护的void(@Nullable Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.scan_列表);
Intent-portIntent=getIntent();
ipAddress=portIntent.getStringExtra(“主机”);
statusMsg=(TextView)findViewById(R.id.status\u msg);
progressBar=(progressBar)findViewById(R.id.progress\u bar);
progressBar.setMax(0);
//设置适配器
ListView端口列表=(ListView)findViewById(R.id.scan\u列表);
openPorts=newarraylist();
portAdapter=new ArrayAdapter(这是android.R.layout.simple\u list\u item\u 1,openPorts);
setAdapter(portAdapter);
//扫描端口
PortScanTask portScan=新建PortScanActivity.PortScanTask();
portScan.execute();
progressBar.setClickable(错误);
}
/*
*类在端口扫描期间更新进度条
*/
类端口{
智力进步;
字符串地址;
}
私有类PortScanTask扩展了AsyncTask{
int timeOut=1000;//尝试连接多长时间(毫秒)
港口;
@凌驾
受保护的void onPreExecute(){
openPorts.clear();
statusMsg.setText(“扫描”+ipAddress+“端口…”);
progressBar.setVisibility(View.VISIBLE);
}
@凌驾
受保护的Void doInBackground(Void…参数){
对于(int i=startPort;i您不应该将max
设置为0。将max
设置为合理的值
在XML中:
<ProgressBar
style="@android:style/Widget.DeviceDefault.Light.ProgressBar.Horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:visibility="invisible"
android:id="@+id/progress_bar"
android:max="100"/>
问题是这一行:
progressBar.setMax(0);
从
将进度条的范围设置为0…最大值
您应该将其更改为progressBar.setMax(100);
progressBar.setMax(100);
progressBar.setMax(0);
void setMax (int max)