2

我正在开发一个简单的应用程序,它将伪随机字符串发送到服务器数据库。在这里,我使用 AsyncTask 将字符串发送到服务器,并在前台使用 ProgressDialog。问题是进度对话框没有停止,我在服务器上没有任何字符串。可能是发送 srcetring 的代码有问题。我是 Android 新手,我从 Internet 上的可用资源中学习。这是我使用的代码。

public class MainActivity extends Activity {

    Button btn;
    TextView tv;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        tv = (TextView)findViewById(R.id.textView2);
        btn = (Button)findViewById(R.id.button1);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.activity_main, menu);
        return true;
    }

    public void getThis(View v) {
        String str = "35" +
            Build.BOARD.length()%10+ Build.BRAND.length()%10 + 
            Build.CPU_ABI.length()%10 + Build.DEVICE.length()%10 + 
            Build.DISPLAY.length()%10 + Build.HOST.length()%10 + 
            Build.ID.length()%10 + Build.MANUFACTURER.length()%10 + 
            Build.MODEL.length()%10 + Build.PRODUCT.length()%10 + 
            Build.TAGS.length()%10 + Build.TYPE.length()%10 + 
            Build.USER.length()%10 ; 
        tv.setText(str);
        UploadUniqueID uni=new UploadUniqueID(this,str);
        uni.execute(str);
    }

    class UploadUniqueID extends AsyncTask<String, Integer, String> {

        Context context;
        MainActivity ma;
        ProgressDialog dialog;
        String id;
        public UploadUniqueID(MainActivity activity,String str) {
            ma = activity;
            context = activity;
            dialog = new ProgressDialog(context);
            id = str;
        }

        protected void onPreExecute() {
            this.dialog.setMessage("Progress start");
            this.dialog.setCancelable(true); 
            this.dialog.show();
        }

        @Override
        protected String doInBackground(String... params) {
            // perform long running operation operation
            String id=params[0];
            HttpClient httpclient = new DefaultHttpClient();
            HttpPost httppost = new HttpPost("http://10.0.2.2/UniqueIdApp/myPHP.php");

            try {
                List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(1);
                nameValuePairs.add(new BasicNameValuePair("android",id));     
                httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
                httpclient.execute(httppost);          
            } catch (Exception e) {
                Log.i("HTTP Failed", e.toString());
            }            

            return null;
        }

        protected void onProgressUpdate(Integer...integers) {

        }

        protected void onPostExecute(String...strings) {
            tv.setText("Sent"); 
            if (dialog.isShowing()) {
                dialog.dismiss();
            }
        }
    }
}
4

3 回答 3

0

我建议您在方法中初始化您的ProgressDialog dialog对象protected void onCreate(Bundle savedInstanceState),并在方法中关闭进度条onPostExecute(String...strings)。可能这会帮助你欢呼:)。

已编辑

public class MainActivity extends Activity {
ProgressDialog dialog;
Button btn;
TextView tv;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    tv = (TextView)findViewById(R.id.textView2);
    btn = (Button)findViewById(R.id.button1);
    dialog = new ProgressDialog(MainActivity.this);
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.activity_main, menu);
    return true;
}

public void getThis(View v) {
    String str = "35" +
        Build.BOARD.length()%10+ Build.BRAND.length()%10 + 
        Build.CPU_ABI.length()%10 + Build.DEVICE.length()%10 + 
        Build.DISPLAY.length()%10 + Build.HOST.length()%10 + 
        Build.ID.length()%10 + Build.MANUFACTURER.length()%10 + 
        Build.MODEL.length()%10 + Build.PRODUCT.length()%10 + 
        Build.TAGS.length()%10 + Build.TYPE.length()%10 + 
        Build.USER.length()%10 ; 
    tv.setText(str);
    UploadUniqueID uni=new UploadUniqueID(this,str);
    uni.execute(str);
}

class UploadUniqueID extends AsyncTask<String, Integer, String> {

    Context context;
    MainActivity ma;
    ProgressDialog dialog;
    String id;
    /*public UploadUniqueID(MainActivity activity,String str) {
        ma = activity;
        context = activity;
        dialog = new ProgressDialog(context);
        id = str;
    }*/

    protected void onPreExecute() {
        dialog.setMessage("Progress start");
        dialog.setCancelable(true); 
        dialog.show();
    }

    @Override
    protected String doInBackground(String... params) {
        // perform long running operation operation
        String id=params[0];
        HttpClient httpclient = new DefaultHttpClient();
        HttpPost httppost = new HttpPost("http://10.0.2.2/UniqueIdApp/myPHP.php");

        try {
            List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(1);
            nameValuePairs.add(new BasicNameValuePair("android",id));     
            httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
            httpclient.execute(httppost);          
        } catch (Exception e) {
            Log.i("HTTP Failed", e.toString());
        }            

        return null;
    }

    protected void onProgressUpdate(Integer...integers) {

    }

    protected void onPostExecute(String...strings) {
        tv.setText("Sent"); 
        try{
    if(dialog!=null && dialog.isShowing()){
        dialog.setMessage("DownLoading finished");
        dialog.dismiss();
    }
    }catch(Exception e){
        e.printStackTrace();
    }
    }
  }
}
于 2013-01-17T04:34:55.687 回答
0

您还可以UploadUniqueID通过执行以下操作在 AsyncTask 类中创建和初始化对话框:

private final ProgressDialog dialog = new ProgressDialog(MainActivity.this);

onPostExecute(...)并像您目前所做的那样在您的方法中将其关闭。此外,将@Override注释添加到您的onPreExecute()方法中。

于 2013-01-17T04:49:25.697 回答
0

试试下面的代码:

public class MainActivity extends Activity {
    Button btn;
    TextView tv;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        tv = (TextView) findViewById(R.id.textView1);
        btn = (Button) findViewById(R.id.button1);
    }

    public void getThis(View v) {
        String str = "35" + Build.BOARD.length() % 10 + Build.BRAND.length()
            % 10 + Build.CPU_ABI.length() % 10 + Build.DEVICE.length() % 10
            + Build.DISPLAY.length() % 10 + Build.HOST.length() % 10
            + Build.ID.length() % 10 + Build.MANUFACTURER.length() % 10
            + Build.MODEL.length() % 10 + Build.PRODUCT.length() % 10
            + Build.TAGS.length() % 10 + Build.TYPE.length() % 10
            + Build.USER.length() % 10;
        tv.setText(str);
        UploadUniqueID uni = new UploadUniqueID(this, str);
        uni.execute(str);
    }

    class UploadUniqueID extends AsyncTask<String, Integer, String> {
        Context context;
        MainActivity ma;
        ProgressDialog dialog;
        String id;

        public UploadUniqueID(MainActivity activity, String str) {
            ma = activity;
            context = activity;
            dialog = new ProgressDialog(activity);
            id = str;
        }

        protected void onPreExecute() {
            dialog.setMessage("Progress start");
            dialog.setCancelable(true);
            dialog.show();
        }

        @Override
        protected String doInBackground(String... params) {
            // perform long running operation operation
            String id = params[0];
            HttpClient httpclient = new DefaultHttpClient();
            HttpPost httppost = new HttpPost(
                "http://10.0.2.2/UniqueIdApp/myPHP.php");
            try {
                List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(
                    1);
                nameValuePairs.add(new BasicNameValuePair("android", id));
                httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
                httpclient.execute(httppost);
            } catch (Exception e) {
                Log.i("HTTP Failed", e.toString());
            }

            return null;
        }

        protected void onProgressUpdate(Integer... integers) { }

        protected void onPostExecute(String p_result) {
            super.onPostExecute(p_result);          
            tv.setText("Sent");
            if (dialog.isShowing()) {
                dialog.dismiss();
            }
        }
    }   
}
于 2013-01-17T04:49:37.630 回答