2016-02-13 61 views
0

我对此很新颖。我已经阅读并观看并尝试了很多教程,但为了理解它的工作原理,我找不到很容易的东西。Android上的一个非常简单的解析json PHP

我制作了一个php文件,您可以在其中看到表格"result.php"的结果。在表格中,您可以插入First-nameLast-name。这些保存在数据库中。

"result.php",你可以看到结果为:

{"nametable":[{"fname":"","lname":""},{"fname":"ni","lname":"gi"}]} 

现在,我想找到一个简单的方法,以了解它,是在我的Android代码,也将是刚一个文本视图并显示名字.. 我不想混淆按钮,只是一个页面,它将显示数据库中的变量!

有没有人可以帮助我的代码,以了解它的工作方式?

谢谢!

+0

只是可以肯定,你想显示textView中的“fname”值? –

回答

0

这是我制作的一个简单的代码示例,使用org.json库& OkHttp客户端。

它将从服务器中检索JSON,并在TextView中显示每个名字。

注意:我没有测试它,它可能不会编译,但你明白了。

activity_main.xml中

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/textViewWrapper" 
    android:orientation="vertical" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

    <!-- TextView's will be appended here --> 

</LinearLayout> 

MyActivity.java

//...other imports 

import org.json.*; 
import okhttp3.*; 

public class MyActivity extends AppCompatActivity { 

    private LinearLayout textViewWrapper; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     //Get TextView Wrapper 
     textViewWrapper = (LinearLayout) findViewById(R.id.textViewWrapper); 

     fillTextView(); 
    } 

    /** 
    * Fill TextViews with API response. 
    * 
    */ 

    public void fillTextView() { 

     get("http://example.com/result.php", new Callback() { 
     @Override 
     public void onFailure(Call call, IOException e) {} 

     @Override 
     public void onResponse(Call call, final Response response) throws IOException { 

      final String body = response.body().string(); //Get API response 

      //OKHttp callback isn't in the main thread, 
      //UI operations need to be run in the main thread 
      //That's why you should use runOnUiThread 
      MyActivity.this.runOnUiThread(new Runnable() { 
       @Override 
       public void run() { 

        JSONObject JSON = null; 
        try { 
        //Parse JSON 
        JSON = new JSONObject(body); 
        //Get "nametable" array 
        JSONArray nameTable = JSON.getJSONArray("nametable"); 
        //Loop through "nametable" array 
        for (int i = 0; i < nameTable.length(); i++) { 

         JSONObject item = nameTable.getJSONObject(i); 

         //Create TextView 
         TextView rowTextView = new TextView(MyActivity.this); 

         //Set fname 
         rowTextView.setText(item.getString("fname")); 

         // add the textview 
         textViewWrapper.addView(rowTextView); 
        } 

        } catch (JSONException e) { 
        e.printStackTrace(); 
        } 
       } 
      }); 
     } 
     }); 

    } 

    /** 
    * OKHttp GET helper function (You should probably put this in a Request Utils class) 
    * 
    */ 

    public Call get(String url, Callback callback) { 

     OkHttpClient client = new OkHttpClient(); 

     okhttp3.Request request = new okhttp3.Request.Builder() 
     .url(url) 
     .get() 
     .build(); 

     Call call = client.newCall(request); 
     call.enqueue(callback); 

     return call; 

    } 
} 

在这个问题解析JSON的更多信息:How to parse JSON in Java

+0

感谢您的回复,并为我的延迟感到抱歉! 我想问你一些细节,以尝试和运行它! 首先,我有我的第一个错误“import okhttp3。*;” 它说,不能解析符号... 接下来,缺少新的Callback()库。问题是,有太多的选择,以选择导入alt +进入,我不知道女巫是适当的..你能帮助我吗? 我认为当“新回调()”下一些问题的一些会消失.. 你可以帮我,以继续我的代码?谢谢!! :) –

+0

您需要安装库。将依赖关系添加到您的gradle。 'compile'c​​om.squareup.okhttp3:okhttp:3.1.2''检查我提供的链接okhttp。 –