在android的textview中显示json数据的结果

Posted

技术标签:

【中文标题】在android的textview中显示json数据的结果【英文标题】:display result of json data in textview of android 【发布时间】:2016-12-02 16:39:27 【问题描述】:

我在 android 应用程序中显示数据时遇到一个问题。这是我的 php。我现在已经编辑以缩短代码。

if($imei_no!="" && $app_auid!="")

        //chk query
        $chk_query=$db1->query("select * from user where imei_number='$imei_no'");
        $chk_cnt=$chk_query->rowCount();
        if($chk_cnt>0)
        
            $search_qry=$db1->query("select * from candidate_reception cr,candidate_counseling cc ,candidate_admission ca where cr.candidate_id=cc.candidate_id and cr.candidate_id=ca.candidate_id and cr.auid=ca.auid and cr.counseling_id=cc.counseling_id and cr.auid='$app_auid'");
            $ser_count=$search_qry->rowCount();
            if($ser_count>0)
            
                $stud_row=$search_qry->fetch(PDO::FETCH_OBJ);

                $candidate_id=$stud_row->candidate_id;
                $auid = $stud_row->auid;
                $usn_no = $stud_row->usn_no;
                $sx = $stud_row->candidate_sex


                //image path    
                  if($inst_id==1) $img_path = "1"; 
                  if($inst_id==2) $img_path = "2"; 

                $result=array();    
                array_push($result, array('name' => $candidate_name,'img_path'=>$img_path));

            echo json_encode(array("can_data"=>$result));
            echo "Success"          
            
            else
            
                echo "Auid not Found.";
                   
        
        else
        
            echo "Invalid IMEI Number.!!!";
        

?>

这是我的java代码:

  private static final String LOGIN_URL = "http://xxx.xxx.x.x/mobile_app/data_push.php";
    private EditText editTextUserName;
    private Button buttonLogin;

    TelephonyManager tel;
    TextView imei;
    @Override
    protected void onCreate(Bundle savedInstanceState) 
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_imei__val);

        editTextUserName = (EditText) findViewById(R.id.editTextAUID);
        buttonLogin = (Button) findViewById(R.id.btn);
        buttonLogin.setOnClickListener(new View.OnClickListener() 
            @Override
            public void onClick(View view) 
                login();
            
        );

        tel = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
        imei = (TextView) findViewById(R.id.textView2);
        imei.setText(tel.getDeviceId().toString());

    

    private void login()
        String username = editTextUserName.getText().toString().trim();
        String imei_no = imei.getText().toString().trim();
        userLogin(username,imei_no);
    

    private void userLogin(final String username,final String imei_no)
        class UserLoginClass extends AsyncTask<String,Void,String> 
            ProgressDialog loading;
            @Override
            protected void onPreExecute() 
                super.onPreExecute();
                loading = ProgressDialog.show(IMEI_Val.this,"Please Wait",null,true,true);
            

            @Override
            protected void onPostExecute(String s) 
                super.onPostExecute(s);
                loading.dismiss();
                if(s=="Success")

                    Intent intent = new Intent(IMEI_Val.this, CapturePhoto.class);
                   // intent.putExtra(USER_NAME,username);
                    startActivity(intent);
                

               else
                   Toast.makeText(IMEI_Val.this, s, Toast.LENGTH_LONG).show();
                    Log.d("Tag Name", "Log Message");
                
            

            @Override
            protected String doInBackground(String... params) 
                HashMap<String,String> data = new HashMap<>();
                data.put("auid",params[0]);
                data.put("imei",params[1]);
                RegisterUserClass ruc = new RegisterUserClass();
                String result = ruc.sendPostRequest(LOGIN_URL,data);
                return result;
            
        
        UserLoginClass ulc = new UserLoginClass();
        ulc.execute(username,imei_no);
    


我的问题是当我点击登录按钮时,在有效的用户输入后,我会得到带有学生详细信息的 json 结果。如果用户输入有效,我想进入下一个活动并显示其他详细信息,如姓名、学院等。我怎样才能做到这一点? 当我输入有效输入时,这里得到 json 结果作为响应。即使输入正确的 regno,我也无法转到下一个活动并在文本框中显示其他详细信息。

【问题讨论】:

@user6588225 你得到什么 json 响应?显示您在 Toast 消息中的内容 这是 toast 中的消息: "can_data":["name":"dfsdfd","address":"gdgfsdf","course":"dfdfdsf"] 成功 【参考方案1】:

@user6588225

所以你发送带有成功消息的 Json

所以不要使用==,而是尝试使用contains

所以在你的onPostExecute(String s)里面

@Override
protected void onPostExecute(String s) 
     super.onPostExecute(s);
     loading.dismiss();
     if(s.contains("Success"))
         Intent intent = new Intent(IMEI_Val.this, CapturePhoto.class);
         // intent.putExtra(USER_NAME,username);
         startActivity(intent);
     
     else
       Toast.makeText(IMEI_Val.this, s, Toast.LENGTH_LONG).show();
       Log.d("Tag Name", "Log Message");
     

【讨论】:

知道了。非常感谢 :) @user6588225 你可能已经得到了这个,但现在你必须解码你的 json 并将这些解码后的值传递给下一个活动 是的。我该怎么做。现在我只是在尝试。请你帮我至少显示一个数据。 @user6588225 检查 Farhan 答案并尝试从您的 PHP 以该格式向您发送 json 数据,然后我将相应地编辑我的答案 @eLemEnt 你能推荐一些链接吗?【参考方案2】:

使用 if("Success".equalsIgnoreCase(s)) 替换 if(s=="Success")

【讨论】:

您将“成功”作为变量 s 中的值。对吧? 你能把你在吐司里得到的截图贴出来 这就像注册用户在登录页面输入他的用户名和密码等信息一样,然后转到下一个活动并在验证后显示该用户的所有详细信息。如何使用 php和安卓 输入有效信息后,else部分正在执行。 @user6588225 伙计,因为即使您输入了有效的详细信息,您也会从您的 php 文件中发送“成功”以及一些键值数组,这就是为什么只有“成功”没有得到匹配的原因。请发布您在 Toast 中得到的信息【参考方案3】:

将您在 php 中的响应更改为此

echo json_encode(array("can_data"=>$result,"success"=>"1"));

在android端解析为

JsonObject responseObject = new JsonObject(responseString);
String success=responseObject.getString("success");
if(success.equals("1"))
// go to next activity

【讨论】:

以上是关于在android的textview中显示json数据的结果的主要内容,如果未能解决你的问题,请参考以下文章

Android中如何让TextView显示指定的行数并且多出的部分显示省略号

如何使用快速的Android网络库在Android中显示Json结果

请问在Android中Textview换行显示问题,您如何解决?

Android TextView 限制显示行数

iOS中TextView显示HTML文本

Android TextView 常见问题与使用总结