我有一个Android应用程序应该解析来自Web服务的json数组输出 我用java应用程序测试了输出,它工作正常。 我的目的是在textview中输出一个输出但是我失败了
类JsonReader
public class JsonReader
{
private static String readAll(Reader rd) throws IOException {
StringBuilder sb = new StringBuilder();
int cp;
while ((cp = rd.read()) != -1)
{
sb.append((char) cp);
}
return sb.toString();
}
public static JSONArray readJsonFromUrl(String url) throws IOException, JSONException
{
InputStream is = new URL(url).openStream();
try
{
BufferedReader rd = new BufferedReader(new InputStreamReader(is, Charset.forName("UTF-8")));
String jsonText = readAll(rd);
JSONArray json = new JSONArray(jsonText);
return json;
}
finally
{
is.close();
}
}
public JsonReader() throws JSONException, IOException
{
}
}
MainActivity
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final TextView uid = (TextView)findViewById(R.id.editText1);
try
{
JsonReader r = new JsonReader();
JSONArray json = r.readJsonFromUrl ("http://localhost:8888/derdeery/zaki.php");
for (int i =1; i < json.length(); ++i)
{
JSONObject jsons =json.getJSONObject(i);
int service_ID = jsons.getInt("service_ID");
String Site_comment = jsons.getString("site_comment");
String Img_Link = jsons.getString("img_link");
uid.setText(Site_comment);
}
}
catch(Exception e)
{ }}}
我的xml文件
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity" >
<EditText
android:id="@+id/editText1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:layout_marginTop="60dp"
android:ems="10" />
答案 0 :(得分:1)
需要进行以下更改才能使其正常工作:
1。 editText1
为EditText
而不是TextView
。所以在xml文件中使用的代码中使用相同的视图:
final EditText uid = (EditText)findViewById(R.id.editText1);
2。目前在UI线程上进行网络操作(API调用),如果网络操作(API调用)需要更多时间,将导致ANR对话或NetworkOnMainThreadException
。
使用AsyncTask的doInBackground
方法进行网络操作(API调用),onPostExecute
使用doInBackground
方法的结果更新用户界面。
答案 1 :(得分:0)
试试这个
JSONObject json = new JSONObject(jsonString); JSONArray jArray = json.getJSONArray(&#34; list&#34;);
System.out.println("*****JARRAY*****" + jArray.length());
for(int i=0; i<jArray.length(); i++){
JSONObject json_data = jArray.getJSONObject(i);
Log.i("log_tag", "_id" + json_data.getInt("account") +
", mall_name" + json_data.getString("name") +
", location" + json_data.getString("number") +
", telephone" + json_data.getString("url") +
",----" + json_data.getString("balance") +
",----" + json_data.getString("credit") +
",----" + json_data.getString("displayName")
);
}