Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
130 views
in Technique[技术] by (71.8m points)

java - How to declare method globally in Class

I want to call startUpload(position); method in loginbutton.setOnClickListener(new View.OnClickListener() {} like this:

loginbutton.setOnClickListener(new View.OnClickListener() {

    @Override
public void onClick(View v) {
    SaveData();     
    alertDialog.dismiss();  
    startUpload(position);  
}

but always getting : position cannot be resolved to a variable

so where i am doing mistake, how can i resolve this issue..?

//Upload
public void startUpload(final int position) {      
    Runnable runnable = new Runnable() {

        public void run() {
            handler.post(new Runnable() {
                public void run() {
                    View v = lstView.getChildAt(position - lstView.getFirstVisiblePosition());
                    // Show ProgressBar
                    ProgressBar progress = (ProgressBar)v.findViewById(R.id.progressBar);
                    progress.setVisibility(View.VISIBLE);

                    //  Status  
                    TextView status = (TextView)v.findViewById(R.id.ColStatus);
                    status.setText("Uploading..");

                    new UploadFileAsync().execute(String.valueOf(position));   
                }
            }); 
        }
    };
    new Thread(runnable).start();
}


// Async Upload
public class UploadFileAsync extends AsyncTask<String, Void, Void> {

    String resServer;
    int position;

    protected void onPreExecute() {
        super.onPreExecute();
    }

    @Override
    protected Void doInBackground(String... params) {
        //  TODO Auto-generated method stub
        position = Integer.parseInt(params[0]);

        int bytesRead, bytesAvailable, bufferSize;
        byte[] buffer;
        int maxBufferSize = 1 * 1024 * 1024;
        int resCode = 0;
        String resMessage = "";

        String lineEnd = "
";
        String twoHyphens = "--";
        String boundary =  "*****";

        //  File Path
        strSDPath = ImageList.get(position).toString();

        // Upload to PHP Script
        String strUrlServer = "http://10.0.2.2/res/uploadFile.php";             

        try {
            /** Check file on SD Card ***/
            File file = new File(strSDPath);
            if(!file.exists())
            {
                resServer = "{"StatusID":"0","Error":"Please check path on SD Card"}";
                return null;
            }

            FileInputStream fileInputStream = new FileInputStream(new File(strSDPath));

            URL url = new URL(strUrlServer);
            HttpURLConnection conn = (HttpURLConnection) url.openConnection();
            conn.setDoInput(true);  
            conn.setDoOutput(true);
            conn.setUseCaches(false);
            conn.setRequestMethod("POST");

            conn.setRequestProperty("Connection", "Keep-Alive");
            conn.setRequestProperty("Content-Type",
                    "multipart/form-data;boundary=" + boundary);

            DataOutputStream outputStream = new DataOutputStream(conn
                    .getOutputStream());
            outputStream.writeBytes(twoHyphens + boundary + lineEnd);
            outputStream
            .writeBytes("Content-Disposition: form-data; name="filUpload";filename=""
                    + strSDPath + """ + lineEnd);
            outputStream.writeBytes(lineEnd);

            bytesAvailable = fileInputStream.available();
            bufferSize = Math.min(bytesAvailable, maxBufferSize);
            buffer = new byte[bufferSize];

            // Read file
            bytesRead = fileInputStream.read(buffer, 0, bufferSize);

            while (bytesRead > 0) {
                outputStream.write(buffer, 0, bufferSize);
                bytesAvailable = fileInputStream.available();
                bufferSize = Math.min(bytesAvailable, maxBufferSize);
                bytesRead = fileInputStream.read(buffer, 0, bufferSize);
            }

            outputStream.writeBytes(lineEnd);
            outputStream.writeBytes(twoHyphens + boundary + twoHyphens + lineEnd);

            // Response Code and  Message
            resCode = conn.getResponseCode();
            if(resCode == HttpURLConnection.HTTP_OK)
            {
                InputStream is = conn.getInputStream();
                ByteArrayOutputStream bos = new ByteArrayOutputStream();

                int read = 0;
                while ((read = is.read()) != -1) {
                    bos.write(read);
                }
                byte[] result = bos.toByteArray();
                bos.close();

                resMessage = new String(result);
            }

            Log.d("resCode=",Integer.toString(resCode));
            Log.d("resMessage=",resMessage.toString());

            fileInputStream.close();
            outputStream.flush();
            outputStream.close();

            resServer = resMessage.toString();

        } catch (Exception ex) {
            // Exception handling
            return null;
        }
        return null;
    }

    protected void onPostExecute(Void unused) {
        statusWhenFinish(position,resServer);
    }
}

// when upload finish
protected void statusWhenFinish(int position, String resServer) {

    View v = lstView.getChildAt(position - lstView.getFirstVisiblePosition());

    // Show ProgressBar
    ProgressBar progress = (ProgressBar)v.findViewById(R.id.progressBar);
    progress.setVisibility(View.GONE);


    // Status
    TextView status = (TextView)v.findViewById(R.id.ColStatus);
    /*** Default Value ***/
    String strStatusID = "0";
    String strMessage = "Unknow Status!";

    try {      

        JSONObject c = new JSONObject(resServer);
        strStatusID = c.getString("StatusID");
        strMessage = c.getString("Message");
    } catch (JSONException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

    // Prepare Status       
    if(strStatusID.equals("0"))
    {
        // When update Failed
        status.setText( strMessage );
        status.setTextColor(Color.RED);

        // Enabled Button again
        Button btnUpload = (Button) v.findViewById(R.id.btnUpload);
        btnUpload.setText("Already Uploaded");
        btnUpload.setTextColor(Color.RED);
        btnUpload.setEnabled(true);
    }
    else
    {
        status.setText("Upload Completed.");
        status.setTextColor(Color.GREEN);
    }
}
   }
See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

The declaration of position is key here.

Make sure it is in the method that contains this loginButton.onClickListener code and make sure it is declared as final


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...