-1

startUpload(position);私はこのようにメソッドを呼び出したいloginbutton.setOnClickListener(new View.OnClickListener() {}:

loginbutton.setOnClickListener(new View.OnClickListener() {

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

しかし、常に取得しています: 位置を変数に解決できません

だから私はどこで間違いを犯していますか、どうすればこの問題を解決できますか..?

//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 = "\r\n";
        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);
    }
}
   }
4

4 に答える 4

0

変数を参照する場合、それらはメソッドのスコープ内で限定的でなければなりません。

したがって、メソッドの場合は、パラメーターとして渡されるか、クラス内でグローバル変数として定義されていることを確認してください。

于 2013-07-02T09:15:42.583 に答える
0

試してみてください グローバル変数 POSITION を作成し、startUpload() メソッドで POSITION=position を割り当てます。

于 2013-07-02T09:20:05.647 に答える
0

ここでは、位置の宣言が重要です。

このloginButton.onClickListenerコードを含むメソッドにあることを確認し、次のように宣言されていることを確認してください。final

于 2013-07-02T09:10:52.517 に答える
0

変数として解決できる場合は、メソッドが原因positionではなく、属性ではないためです。

したがって、次のように宣言します。

int position = -1;

そして、メソッドを使用するように設定します。

于 2013-07-02T09:11:03.063 に答える