2 xiaorourou945 xiaorourou945 于 2016.02.27 16:29 提问

怎么把主线程getText()得到的String放进子线程

图片说明

9个回答

qq_33890819
qq_33890819   2016.02.27 22:52
已采纳

不一定非要定义全局变量,我修改的如下,你运行看看,不行再定义全局变量。修改了3个地方
public class StartLoginActivity extends Activity {

// 账号输入框
private EditText inputAccount;

//密码输入框
private EditText inputPassword;

// 登录按钮
private Button loginButton;

//private GlobalVariable mGlobalVariable;

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.login);

//透明状态栏
getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
//透明导航栏
getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);

inputAccount = (EditText) findViewById(R.id.account_edittext);
inputPassword = (EditText) findViewById(R.id.password_edittext);
    //1.
    **final String strInputAccount =  inputAccount.getText().toString();
    final String strInputPassword = inputPassword.getText().toString();**

Button loginButton = (Button) findViewById(R.id.login_button);
loginButton.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View source) {
        //2.
                    //new GeocodeingTask().execute( mGlobalVariable.account = inputAccount.getText().toString(), mGlobalVariable.password = inputPassword.getText().toString());
                    new GeocodeingTask().execute(strInputAccount , strInputPassword);
    }
});

}

public class GeocodeingTask extends AsyncTask> {

@Override
protected List<GlobalVariable> doInBackground(String... params) {

//3.这里不定参数params是异步任务传入的参数
//params[0]对应的是传入的strInputAccount,parmas[1]对应的是传入的strInputPassword

String json = RequestUtil.RequestJson("http://wechat.svner.com/login.php", "POST", params[1]);
Gson gson = new Gson();
class tmp {
public int result;
}
System.out.println(json);
tmp n = gson.fromJson(json, tmp.class);
if (n.result == 0) {
Toast.makeText(getApplicationContext(), "账号或密码错误", Toast.LENGTH_SHORT).show();
System.out.print("error============================");
} else {
Intent intent = new Intent(StartLoginActivity.this, StartMainBodyActivity.class);
startActivity(intent);
}
return null;
}
}
}

、、、
、、、、
、、、、、

public class GlobalVariable {
public String account;
public String password;
}

xiaorourou945
xiaorourou945 还是有两个空指针。。
接近 2 年之前 回复
xiaorourou945
xiaorourou945 好的,谢谢谢谢
接近 2 年之前 回复
u012784504
u012784504   2016.02.27 16:42

用全局变量。。。在外面定义String

u012784504
u012784504 回复xiaorourou945: 在函数外面定义变量。。
接近 2 年之前 回复
qq_33890819
qq_33890819 在new GeocodeingTask().execute(password)中传入,记得把password 加final修饰。然后在
接近 2 年之前 回复
xiaorourou945
xiaorourou945 谢谢,能不能具体说一下呢,百度了下没有看明白
接近 2 年之前 回复
qq_33890819
qq_33890819   2016.02.27 17:44

在new GeocodeingTask().execute(password)中传入,记得把password 加final修饰。
然后在doInBackGround(Integer... params)中 修改成oInBackGround(String... params)再把你现在的password引用改成params[0]就好了

xiaorourou945
xiaorourou945 额,没看懂
接近 2 年之前 回复
oyljerry
oyljerry   Ds   Rxr 2016.02.27 19:21

通过全局变量或者线程通信的方式传递

Mr_dsw
Mr_dsw   Ds   Rxr 2016.02.27 20:36

定义一个全局变量或者作为参数传递给你的异步任务

xiaorourou945
xiaorourou945 空指针了
接近 2 年之前 回复
xiaorourou945
xiaorourou945   2016.02.27 21:00

public class StartLoginActivity extends Activity {

// 账号输入框
private EditText inputAccount;

//密码输入框
private EditText inputPassword;

// 登录按钮
private Button loginButton;

private GlobalVariable mGlobalVariable;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.login);

    //透明状态栏
    getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
    //透明导航栏
    getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);

    inputAccount = (EditText) findViewById(R.id.account_edittext);
    inputPassword = (EditText) findViewById(R.id.password_edittext);

    Button loginButton = (Button) findViewById(R.id.login_button);
    loginButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View source) {
            new GeocodeingTask().execute( mGlobalVariable.account = inputAccount.getText().toString(), mGlobalVariable.password = inputPassword.getText().toString());
        }
    });
}

public class GeocodeingTask extends AsyncTask<String, Void, List<GlobalVariable>> {

    @Override
    protected List<GlobalVariable> doInBackground(String... params) {

        String json = RequestUtil.RequestJson("http://wechat.svner.com/login.php", "POST", params[0]);
        Gson gson = new Gson();
        class tmp {
            public int result;
        }
        System.out.println(json);
        tmp n = gson.fromJson(json, tmp.class);
        if (n.result == 0) {
            Toast.makeText(getApplicationContext(), "账号或密码错误", Toast.LENGTH_SHORT).show();
            System.out.print("error============================");
        } else {
            Intent intent = new Intent(StartLoginActivity.this, StartMainBodyActivity.class);
            startActivity(intent);
        }
        return null;
    }
}

}

、、、
、、、、
、、、、、

public class GlobalVariable {
public String account;
public String password;
}

xiaorourou945
xiaorourou945   2016.02.27 21:09

图片说明

xiaorourou945
xiaorourou945 回复lb_随我逐流: oo,谢谢,不过还有空指针
接近 2 年之前 回复
qq_33890819
qq_33890819 你这个肯定报空指针啊,因为mGlobalVariable都没初始化,你就对他进行赋值了。
接近 2 年之前 回复
qq_33890819
qq_33890819 你这个肯定报空指针啊,因为mGlobalVariable都没初始化,你就对他进行赋值了。
接近 2 年之前 回复
xiaorourou945
xiaorourou945   2016.02.27 23:17

图片说明

dongfeng9ge
dongfeng9ge   Ds   Rxr 2016.02.29 08:34

loop或者handler

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!