Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/193.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将数据设置为全局变量_Java_Android_Global Variables - Fatal编程技术网

Java 将数据设置为全局变量

Java 将数据设置为全局变量,java,android,global-variables,Java,Android,Global Variables,我目前正在为我的应用程序使用Koush/ion-library 我设置了一个全局变量 公共静态字符串内容 并在异步任务中使用此方法 Ion.with(MainActivity.this, "http://google.com").asString().setCallback(new FutureCallback<String>() { @Override public void onCompleted(Exception e, String result) { MainAct

我目前正在为我的应用程序使用Koush/ion-library

我设置了一个全局变量 公共静态字符串内容

并在异步任务中使用此方法

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中访问变量内容时,我意识到它是空的。 我已经设置了一个全局变量,并为其设置了数据。有什么问题吗

编辑:完整脚本

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();
                }
            });
        }
    }
}

尝试将变量设置为易失性:

public static volatile String content;

您确定结果不为空吗?是。在此行MainActivity.content=result.toString;Log.ecoount,content.length+。;它返回一个int结果而不是null,告诉我变量内容中有数据。但是,使用此方法后,内容将变回null。请检查onPostExecute是否在onCompleted之前执行。我可以问一下如何确保onPostExecute在onCompleted完成后执行?我认为这里不需要AsyncTask。尝试替换新的LongOperation.execute;用离子,用。。。如果我必须这样做,我无法控制这个方法的字符串。是否有任何方法可以使捕获的数据可供全球用户访问?