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币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
菜鸟学习记录:子线程获取到数值并赋值给主线程
相关内容:Android的消息机制Android规定访问UI只能在主线程中进行。若在子线程中访问UI就会抛出异常。因此,需要经过时间处理的逻辑才能影响UI结果的情况需要Android的消息机制才能处理。可以在子线程获取数组并把值赋给全局变量,然后发送消息Message通知handler,最后在handler中接收通知并显示使用这个全局变量。具体方法可以参考教程:Android子线程更新UI主线程方...
关于EditText中的getText()方法的返回值类型以及string的转换问题
EditText中的getText()方法的返回值为CharSequence,如果我们想要获得string类型数据的话,需要在后边加上.toString     另外,String类型转为int:Integer.parseInt(str); String类型转为float::Float.parseFloat(str);
Android 主线程和子线程消息传递的一点心得
 /**  * @author Evan 2014-11-19  *  * 消息的的星光大道  * 不要界面,直接用日志打出来吧  * 消息机制中各个概念的理解(官方的话,我就不说了,这里只写个人理解,个人把他们分别理解为行军打仗的两大阵营)  * 主线程(甲方阵营)UIThread{  * 成员介绍:  * Hander :甲方司令       实例化myHander
多线程通信ThreadDemo
实现了子线程与主线程之间的通信;主线程给自己发消息、主线程给子线程发消息、子线程给主线程发消息等。
线程之间的通信-(子线程获得主线程的方式)
/** ios 的线程库模型 1.pthread(底层C)线程库 (一般的情况下不用) 2.NSThread(OC线程库) 3.NSOperationQueue(线程池,线程队列) 4.GCD(Block 模式的线程) */ #import "ViewController.h" @interface ViewController () @end @impl
MFC多线程中主线程阻塞了子线程
这几天在编写飞控地面站软件,在工程中创建了一个子线程专门接收UDP传过来的数据,但我在按钮触发事件中加入了while(1)等子线程中的某一个short型数据变为1,结果始终不为1,如论如何没有收到这个1。最终调试发现,因为这个while(1)造成了接收子线程阻塞了,根本不接收数据了。最终,将按钮触发的事件放在一个新建的子线程中处理,解决了这个问题。这个主线程中while(1)造成子线程阻塞的原因,
handler底层是如何将消息从子线程发送到主线程
这个问题的实质是handler机制+引用的传递. 理解handler机制有很多方法,我推荐的方法是从四个关键类Handler、Message、MessageQueue、Looper的方法入手来弄清消息传递这一整条线的逻辑: 这条线的走向是:(相关对外提供的方法可以用eclipse或者source insight来查看.) 1产生消息对象 2-->消息相关属性(what,obj,target
Java子线程中操作主线程Private级别数据
两个类分别如下: package Demo2; import java.util.*; class Demo2 { private static ArrayList a = new ArrayList(); public static void main(String[] args) { a.add("String0"); threadDemo2 thread1 = new
[转]Java中主线程如何捕获子线程抛出的异常
<br />这么来看待这个问题。首先明确线程代码的边界。其实很简单,Runnable接口的run方法所界定的边界就可以看作是线程代码的边界。Runnable接口中run方法原型如下:   <br />  <<   <br />          public   void   run();   <br />  >>   <br />  而所有的具体线程都实现这个方法,所以这里就明确了一点,线程代码不能抛出任何checked异常。所有的线程中的checked异常都只能被线程本身消化掉。:)   这样本身也是符
java多线程 主线程等子线程执行完毕
有时候java开发,主线程要等子线程执行完毕的处理结果 主要有两种方法处理 1. 是用thread.join() 2. 是使用线程池 ExecutorService1 thread.join()package andy.thread.traditional.test;import java.util.Vector;/** * @author Zhang,Tianyou * @versi