【问题标题】:Data Show in logcat but not show in text view数据显示在 logcat 中,但不显示在文本视图中
【发布时间】:2015-02-25 08:23:09
【问题描述】:

数据显示在 logcat 中,但不显示在文本视图中.. 我能做什么

这是我的日志

12-29 11:05:13.908:D/gralloc_goldfish(772):没有检测到 GPU 仿真的仿真器。 12-29 11:05:24.649: D/dalvikvm(772): GC_FOR_ALLOC 释放 195K,9% 释放 7439K/8135K,暂停 35ms,总共 38ms 12-29 11:05:26.458: D/dalvikvm(772): GC_CONCURRENT freed 229K, 10% free 7628K/8455K, paused 26ms+99ms,总共185ms 12-29 11:05:27.908: D/Create Response(772): {"message":"登录成功。","success":1} 12-29 11:05:28.598:I/Choreographer(772):跳过 52 帧!应用程序可能在其主线程上做了太多工作。 12-29 11:05:29.848: D/创建响应 (772): {"3":"jmi.mohsin@gmail.com","2":"myname","1":"msnmsn","0 ":"8527801400","mobile_number":"8527801400","hint":"myname","email_id":"jmi.mohsin@gmail.com","password":"msnmsn"} 12-29 11:05:29.848:I/JSON 解析(772):我的名字 12-29 11:05:29.878: W/System.err(772): android.view.ViewRootImpl$CalledFromWrongThreadException: 只有创建视图层次结构的原始线程才能接触其视图。 12-29 11:05:29.878: W/System.err(772): 在 android.view.ViewRootImpl.checkThread(ViewRootImpl.java:4609) 12-29 11:05:29.878: W/System.err(772): 在 android.view.ViewRootImpl.requestLayout(ViewRootImpl.java:835) 12-29 11:05:29.878: W/System.err(772): 在 android.view.View.requestLayout(View.java:15129) 12-29 11:05:29.878: W/System.err(772): 在 android.view.View.requestLayout(View.java:15129) 12-29 11:05:29.878: W/System.err(772): 在 android.view.View.requestLayout(View.java:15129) 12-29 11:05:29.888: W/System.err(772): 在 android.view.View.requestLayout(View.java:15129) 12-29 11:05:29.888: W/System.err(772): 在 android.view.View.requestLayout(View.java:15129) 12-29 11:05:29.888: W/System.err(772): 在 android.widget.TextView.checkForRelayout(TextView.java:6303) 12-29 11:05:29.888: W/System.err(772): 在 android.widget.TextView.setText(TextView.java:3547) 12-29 11:05:29.888: W/System.err(772): 在 android.widget.TextView.setText(TextView.java:3405) 12-29 11:05:29.888: W/System.err(772): 在 android.widget.TextView.setText(TextView.java:3380) 12-29 11:05:29.898: W/System.err(772): at com.example.phonebook.Welcome$loginAccess.doInBackground(Welcome.java:93) 12-29 11:05:29.898: W/System.err(772): at com.example.phonebook.Welcome$loginAccess.doInBackground(Welcome.java:1) 12-29 11:05:29.898: W/System.err(772): 在 android.os.AsyncTask$2.call(AsyncTask.java:287) 12-29 11:05:29.898: W/System.err(772): 在 java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305) 12-29 11:05:29.898: W/System.err(772): 在 java.util.concurrent.FutureTask.run(FutureTask.java:137) 12-29 11:05:29.898: W/System.err(772): 在 android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230) 12-29 11:05:29.908: W/System.err(772): 在 java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076) 12-29 11:05:29.908: W/System.err(772): 在 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569) 12-29 11:05:29.908: W/System.err(772): 在 java.lang.Thread.run(Thread.java:856)

这是我的欢迎活动

包 com.example.phonebook; 导入 java.util.ArrayList; 导入 java.util.List; 导入 org.apache.http.NameValuePair; 导入 org.apache.http.message.BasicNameValuePair; 导入 org.json.JSONObject; 导入android.app.Activity; 导入android.os.AsyncTask; 导入android.os.Bundle; 导入android.os.StrictMode; 导入android.util.Log; 导入 android.widget.TextView; 公共类欢迎扩展活动{ // 私有 ProgressDialog pDialog; TextView jsonParsed1,DataShow,hint_data; JSONParser jsonParser = new JSONParser(); JSONParser jobj = new JSONParser(); 私有静态字符串 url = "http://192.168.1.10/android_connect/login_setup/show_data.php"; //private static final String about = "about"; // 私有静态最终字符串 TAG_SUCCESS="success"; // 私有静态最终字符串hint="hint"; @覆盖 protected void onCreate(Bundle savedInstanceState) { StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder() .detectDiskReads().detectDiskWrites().detectNetwork() .penaltyLog().build()); super.onCreate(savedInstanceState); setContentView(R.layout.welcome); jsonParsed1=(TextView)findViewById(R.id.jsonParsed); DataShow=(TextView)findViewById(R.id.show_all_data); hint_data=(TextView)findViewById(R.id.hint_datafor_value); 字符串 abt = getIntent().getStringExtra("mobile_number"); //意图 i=getIntent(); //String abt=i.getStringExtra("mobile_number"); //System.out.println(abt); //jsonParsed1.setText(abt); 新的登录访问()。执行(); } 类 loginAccess 扩展 AsyncTask { TextView jsonParsed = (TextView) findViewById(R.id.jsonParsed); 私有字符串内容; 字符串输出数据 = ""; JSONObject jsonResponse; @覆盖 受保护的字符串doInBackground(字符串... arg0){ 字符串 abt = getIntent().getStringExtra("mobile_number"); 列表参数 = new ArrayList(); params.add(new BasicNameValuePair("mobile_number", abt)); JSONObject json = jsonParser.makeHttpRequest(url,"POST", params); 内容 = json.toString(); Log.d("创建响应", Content); /****************** 开始解析响应 JSON 数据 *************/ 尝试 { /****** 使用来自 JSON 字符串的名称/值映射创建一个新的 JSONObject。 ********/ jsonResponse = 新 JSONObject(内容); /******* 获取节点值 **********/ 字符串提示 = jsonResponse.optString("hint").toString(); OutputData += "节点:\n\n "+ 提示 +" "; Log.i("JSON 解析", 提示); /****************** 结束解析响应 JSON 数据 *************/ // jsonParsed.setText(OutputData); } 捕捉(异常 e){ e.printStackTrace(); } 返回空值; } 受保护的无效onPostExecute(无效未使用){ // //JSONObject jsonResponse = null; // // /******* 获取节点值 **********/ // 字符串提示 = jsonResponse.optString("hint").toString(); // // 输出数据 += "节点:\n\n "+ 提示 +" "; // // Log.i("JSON 解析", 提示); // // /****************** 结束解析响应 JSON 数据 *************/ // // hint_data.setText(OutputData); jsonParsed.setText(OutputData); } } }

【问题讨论】:

    标签: android json


    【解决方案1】:

    像这样修改你的异步任务: 做 asynctask 的后台方法在非 UI 线程中运行,所以我们不能从 doInbackgroud 修改 ui 元素,所以我们必须返回该结果,以便结果将作为参数进入 postExecute 方法,然后我们可以修改 UI

        package com.example.phonebook;
    
        import java.util.ArrayList;
    import java.util.List;
    
    import org.apache.http.message.BasicNameValuePair;
    import org.json.JSONObject;
    
    import android.app.Activity;
    import android.os.AsyncTask;
    import android.os.Bundle;
    import android.os.StrictMode;
    import android.util.Log;
    import android.widget.TextView;
    
    import com.afbb.animationtest.R;
    
        public class Welcome extends Activity {
            TextView jsonParsed1,DataShow,hint_data;
            TextView jsonParsed ;
            JSONParser jsonParser = new JSONParser();
            JSONParser jobj = new JSONParser();
            private static String url = "http://192.168.1.10/android_connect/login_setup/show_data.php";
            @Override
            protected void onCreate(Bundle savedInstanceState) {
                StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder()
                .detectDiskReads().detectDiskWrites().detectNetwork()
                .penaltyLog().build());
                super.onCreate(savedInstanceState);
                setContentView(R.layout.welcome);
                jsonParsed1=(TextView)findViewById(R.id.jsonParsed);
                DataShow=(TextView)findViewById(R.id.show_all_data);
                hint_data=(TextView)findViewById(R.id.hint_datafor_value);
                jsonParsed = (TextView) findViewById(R.id.jsonParsed);
                String abt = getIntent().getStringExtra("mobile_number");
                new loginAccess().execute();
            }
    
        class loginAccess extends AsyncTask<String,Void,JSONObject> {
            private String Content;
            @Override
            protected JSONObject doInBackground(String... arg0) {
                String abt = getIntent().getStringExtra("mobile_number");
                List params = new ArrayList();
                params.add(new BasicNameValuePair("mobile_number", abt));
                JSONObject json = jsonParser.makeHttpRequest(url,"POST", params);
                    Content = json.toString();
                    Log.d("Create Response", Content);
         /****************** Start Parse Response JSON Data *************/
                    try {
                        JSONObject jsonResponse = new JSONObject(Content);
                       String hint   = jsonResponse.optString("hint").toString();
                        return jsonResponse;
                     } catch (Exception e) {
    
                         e.printStackTrace();
                     }
                    return null;
            }
            protected void onPostExecute(JSONObject result) {
                //Parse and update the UI
                   jsonParsed.setText( OutputData );
                 }
            }
        }
    
    
    
    i
    

    【讨论】:

    • 我如何在欢迎活动中显示这些数据.....??..不只显示一个数据 {"3":"jmi.mohsin@gmail.com","2": "myname","1":"msnmsn","0":"8527801400","mobile_number":"8527801400","hint":"myname","email_id":"jmi.mohsin@gmail.com", "密码":"msnmsn"}
    • 你没有仔细检查我的代码,没有添加泛型,你没有向 postExecuted 返回任何值。
    • 字符串提示 = jsonResponse.optString("hint").toString();字符串 email_id =jsonResponse.optString("email_id").toString(); OutputData += "节点:\n\n"+ 提示 +" "; Log.i("JSON 解析", 提示);返回提示; } 捕捉(异常 e){ e.printStackTrace(); } 返回空值; } protected void onPostExecute(String resutl) { jsonParsed.setText( resutl );我必须显示提示,email_id 等。先生,我可以在这个活动中改变什么......??
    • 然后解析该结果在后执行。
    • 先生,您能更改活动吗?我如何将所有内容放入执行后...。请先生,例如,当我设置在我的活动中时,您可以编辑您的答案,请先生
    【解决方案2】:

    jsonParsed.setText( OutputData );
    您只需在hint_data.setText( OutputData ); 行之后的onPostExecute 方法中添加上述行,您将获得完美的输出。
    并从doInBackground 方法中删除jsonParsed.setText( OutputData ); 行。

    【讨论】:

    • 我改变了你所说的,但数据并不完美......你能设置活动吗...... Deep Mehta Sir
    • 编辑你喜欢说的问题
    • Log.i("JSON 解析", 提示);只需将这一行放在 jsonParsed.setText(OutputData); 之前的 onPostExecute 方法中即可线,你会得到我认为的解决方案。只需检查将这个日志放入 onPostExecute 方法后,您是否会在 logcat 中获取数据!
    • 这行之后:Log.i("JSON parse", hint);在 onPostExecute 方法中,你在 logcat 中得到了什么?我想你会得到空白字符串!
    • 是的,我会得到空白字符串......先生,你能在我的问题中编辑和更改这个......请先生
    【解决方案3】:

    从 doInBackground 方法中删除下面一行

     jsonParsed.setText( OutputData );
    

    你不能从主线程外触摸视图。

    【讨论】:

      猜你喜欢
      • 2014-08-14
      • 1970-01-01
      • 2014-11-25
      • 1970-01-01
      • 1970-01-01
      • 2020-06-05
      • 2019-11-28
      • 1970-01-01
      • 2014-06-25
      相关资源
      最近更新 更多