1

現在、アプリに Koush/ion - https://github.com/koush/ionライブラリを使用しています。

グローバル変数を設定しました public static String content;

そして、AsyncTask でこのメソッドを使用する

Ion.with(MainActivity.this, "http://google.com").asString().setCallback(new FutureCallback<String>() {

@Override

public void onCompleted(Exception e, String result) {


MainActivity.content = result.toString();

         }
    });

しかし、AsyncTask から変数コンテンツにアクセスしようとすると、null であることに気付きました。グローバル変数を設定し、それにデータを設定しました。何か問題がありますか?

編集:完全なスクリプト

package dev.tst.app

import android.app.Activity;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.widget.TextView;
import android.widget.Toast;

import com.koushikdutta.async.future.FutureCallback;
import com.koushikdutta.ion.Ion;

public class MainActivity extends Activity {
    public static volatile String content;
    TextView tv;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        tv = (TextView) findViewById(R.id.tv);
        new LongOperation().execute();
    }

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

    private class LongOperation extends AsyncTask<String, Void, String> {

        @Override
        protected String doInBackground(String... params) {
            Ion.with(MainActivity.this, "http://google.com").asString()
                    .setCallback(new FutureCallback<String>() {
                        @Override
                        public void onCompleted(Exception e, String result) {
                            MainActivity.content = result.toString();
                            Log.e("Count", content.length() + ".");
                        }
                    });
            return null;
        }

        @Override
        protected void onPostExecute(String result) {
            MainActivity.this.runOnUiThread(new Runnable() {
                public void run() {
                    Toast.makeText(MainActivity.this, MainActivity.content,
                            Toast.LENGTH_SHORT).show();
                }
            });
        }
    }
}
4

1 に答える 1

0

変数を揮発性にしてみてください。

public static volatile String content;
于 2013-07-10T03:18:21.013 に答える