0

嗨,下面的代码似乎无法正常工作,是我做错了什么吗?

基本上发生的事情是我收到了字符串prd|50126057|12bars|5,我试图把它分成三个不同的文本视图;当我运行它时,它只在第一个 textView 中显示 prd ,而其他的则不会改变。为什么会这样?

我可以看到它在日志中工作,只是没有在其他文本视图中显示它。

任何帮助都非常感谢,并提前感谢。

另外,如果这已经得到解答,我也很抱歉,我确实在这里进行了一些搜索,但找不到任何东西。

public void messageReceived(String message) {

    String response = message;
    String[] words = response.split("\\|");
    TextView tv1 = (TextView) findViewById(R.id.textView1);
    TextView tv2 = (TextView) findViewById(R.id.textView2);
    TextView tv3 = (TextView) findViewById(R.id.textView3);

    tv1.setText(words[0]);
    tv2.setText(words[1]);
    tv3.setText(words[2]);
    Log.e("items-->", "" + words[0] + " " + words[1] + " " + words[2]+ " " + words[3]);

    publishProgress(message);
}
4

6 回答 6

1
 String[] words;
 String s="prd|50126057|12bars|5"; 
 words= s.split("\\|");
 for(int i=0;i<words.length;i++)
 {
    System.out.println("Shifted: " +words[i]);
 }
于 2013-04-11T11:19:11.263 回答
1

AsyncTask<Void, Void, Void> { ... }在你的项目中使用过。如果您使用的是 AsyncTask,您可以使用onProgressUpdate(Progress...)onPostExecute(Result)方法更新 UI。你也调用publishProgress(message)方法。所以更好的是,您可以使用onProgressUpdate(Progress...)onPostExecute(Result)方法更新您的 UI(将字符串分配给 Textview)。例如:

public class connectTask extends AsyncTask<String,String,SOCKETClient> {
    @Override
    protected SOCKETClient doInBackground(String... message) {
        socketClient = new SOCKETClient(new SOCKETClient.OnMessageReceived() {
            @Override
            public void messageReceived(String message) {
                // this method calls the onProgressUpdate
                publishProgress(message);
            }
        });
        socketClient.run();
        return null;
    }

    @Override
    protected void onProgressUpdate(String... values) {
        super.onProgressUpdate(values);

        String response = values[0];
        String[] words = response.split("\\|");
        TextView tv1 = (TextView) findViewById(R.id.textView1);
        TextView tv2 = (TextView) findViewById(R.id.textView2);
        TextView tv3 = (TextView) findViewById(R.id.textView3);

        tv1.setText(words[0]);
        tv2.setText(words[1]);
        tv3.setText(words[2]);
    }
}

它应该工作。

于 2013-06-15T12:22:16.323 回答
0

利用:

String response = "abc|asd|asd|asd";
String[] words = response.split("\\|");
Log.e("items-->", "" + words[0] + " " + words[1] + " " + words[2]+ " " + words[3]);

o/p:

04-11 16:55:58.216: E/items-->(3885): abc asd asd asd

Edited:

String response = "abc|asd|asd|asd";

    String[] words = response.split("\\|");

   // Log.e("items-->", "" + words[0] + " " + words[1] + " " + words[2]+ " " + words[3]);

   TextView tv = (TextView)findViewById(R.id.text);

   tv.setText("" + words[0] + " " + words[1] + " " + words[2]+ " " + words[3]);

最后编辑:

        String response = "abc|asd|asd|asd";

        String[] words = response.split("\\|");

        // Log.e("items-->", "" + words[0] + " " + words[1] + " " + words[2]+
        // " " + words[3]);

        TextView tv = (TextView) findViewById(R.id.textView1);
        TextView tv1 = (TextView) findViewById(R.id.textView2);
        TextView tv2 = (TextView) findViewById(R.id.textView3);
        TextView tv3 = (TextView) findViewById(R.id.textView4);

        tv.setText("" + words[0]);
        tv1.setText("" + words[1]);
        tv2.setText("" + words[2]);
        tv3.setText("" + words[3]);

在此处输入图像描述

于 2013-04-11T11:20:41.283 回答
0

你的单词数组的大小是多少?

String test = "prd|50126057|12bars|5";
String [] words = test.split("\\|");
System.out.println(words.length);

给了我 4 的预期。

于 2013-04-11T11:20:46.420 回答
0

代码看起来没问题。要么没有调用它,要么传递了错误的字符串。

我建议添加日志记录,看看会发生什么:

Log.d("~~~","@@@@ response=["+response+"]");

并且,正如其他人所建议的那样,words.length和项目。

于 2013-04-11T11:41:24.430 回答
-2
String response = "prd|50126057|12bars|5";
String[] words = response.split("|");
Toast.makeText(mActivity, words[0]+"::"+words[1]+"::"+words[2]+"::"+words[3],Toast.LENGTH_SHORT).show();

上面的代码在这方面没有任何问题。只需检查 messageReceived 是否被调用。

于 2013-04-11T11:20:05.397 回答